1 刪除文件的原理
文件刪除:需要具備以下兩個條件同時具備才生效
1受文件的硬連接控制,有一個硬連接i_link+1,減少一個硬連接,i_link-1,當i_link=0時,文件就被刪了
列:創建文件i_link=1,為這個文件創建一個硬連接,i_link=2,刪除一個硬連接,i_link-1,刪除源文件i_link=0了
2受進程占用控制,當有進程使用這個文件時,有一個進程占用這個文件i_count+1,即i_count=1。當減少一個進程占用i_count-1,即i_count=0,當沒有進程調用時i_count=0.
當i_link=0并且i_count=0的時候,文件才會被真正的刪除。
有程序在用文件的時候i_count + 1.
查看被刪除但仍由進程占用的文件名
[root@test1 shell]# rm -rf aa/
[root@test1 shell]# lsof | grep del
bash????? 25710????? root? cwd?????? DIR????????????? 253,0??????? 0??? 2623611 /hexudong/shell/aa (deleted)
[root@test1 shell]#
Inode小結
1磁盤分區格式化ext4文件胡會產生一定數量的inode和block
2 inode是索引節點,作用是存放文件的屬性信息以及作為文件的索引
3 ext3/ext4文件系統的block存放的是文件的實際內容
4 inode是一塊存儲空間,c6非啟動分區inode默認大小256,c5是128字節
5inode是一串數字,不同的文件對應inode(一串數字)在文件系統里是唯一的
6 inode相同的文件,互為硬連接文件
7一個文件被創建后至少占用一個inode和一個block
8 block的大小一般有1k,2k,4K 幾種。其中引導分區等為1K,其他普通分區去4K(c6)
9如果一個文件很大,可能占多個block,如果文件很小,至少占一個。并且剩余空間浪費了。
10 inode大小和總量查看
dumpe2fs??/dev/sda3|egrep?-i?"block?size|Inode?size"
dumpe2fs? /dev/sda1 | egrep -i "block count|lnode count"
11查看inode的總量和使用量命令df �Ci
12如何生成及制定inode大小mkfs.ext4 �Cb 2048 �Cl 256 /dev/sdb
block小結
1)磁盤讀取數據是按block為單位讀取的。
2)一個文件可能占用多個block。每讀取一個block就會消耗一次磁盤i/o
3)如果要提升磁盤IIO,那么就要盡可能一次性讀取數據盡量多
4)一個block只能存放一個文件的內容,無論內容有多小,如果block 4K,那存放1K文件,剩余3K就浪費了。
5)block并非越大越好。Block太大對于小文件存放就會浪費磁盤空間,例如:1000K文件,BLOCK為4K,占用250個block,block為1K,占用1000個BLOCK。訪問效率誰更高?消耗IO分別為250次和1000次
6:)大文件(大于16K)一般設置BLOCK大一點,小文件(小于1K)一般設置BLOCK小點
7)block太大例如4K,文件都是0.1K的,大量浪費磁盤空間
8)block的設置也是格式化分區的時候,mkfs.ext4 �Cb 2048 �Cl 256 /dev/sdb
9)文件較大時,block設置大一些會提升磁盤訪問效率,ext3/ext4一般設置為4K。