Linux文件系統學習

Linux常見文件系統ext2(linux second extended file system)
Linux文件系統包含三個組成部分:inode、data block、super block。
super block:記錄此文件系統的整體信息,包括inode/block的總量、使用量、剩餘量、以及文件系統的格式與相關信息等
inode:記錄文件的屬性,一個文件佔用一個inode,保存此文件的數據所在的block編號
data block:實際記錄文件的內容,若文件過大,會佔用多個block
啓動扇區
block group1
block group2
block group3
block groupn
每個block group組織圖
super block
文件系統描述(配置信息)(file system description)
塊對應表(blcok bitmap)
inode對應表(inode bitmap)
inode table
data block

每一個data block只能夠放置一個文件的數據。
在Ext2文件系統中所支持的data block大小有1KB、2KB、4KB三種。

inode包含的數據:文件的訪問模式、文件的所有者和組、文件的大小、ctime、atime、mtime、定義文件特性的標識,如SetUID等、文件真正內容的指向。
每個inode大小均固定爲128bytes。
每個文件都只佔用一個inode。
一個data block佔用inode的4byte。

data block大小
1KB
2KB
4KB
最大單一文件限制
16GB
256GB
2TB
最大文件系統總容量
2TB
8TB
16TB
一個inode所能記錄的data block數量是有限的,所以系統需要藉助data block記錄data block數量。
一個系統將一個inode分爲12個直接、一個間接、一個雙間接、一個三間接記錄區。
直接:inode直接記錄data block標號 。以1KB爲例,12*1KB
間接:inode記錄一個data block編號,data block記錄更多的data block。以1KB爲例,(1KB/4B)*1KB = 256KB
雙間接:藉助兩層data block記錄更多的data block。以1KB爲例,(1KB/4B)*(1KB/4B)*1KB
三間接:藉助三層data block記錄更多的data block。以1KB爲例,(1KB/4B)*(1KB/4B)*(1KB/4B)*1KB

一個文件系統應該僅有一個super block,在第一個block group中。其他的block group中也可能含有super block,主要作爲第一個block group中的super block的備份。
file system description:描述每個block group的開始與結束的block號碼,以及說明每個區段分別介於哪一個block號碼之間。
block bitmap:記錄block的使用狀態。
inode bitmap:記錄使用和未使用的inode號碼。

對於目錄:ext2會分配一個inode和至少一個data block給一個目錄,其中inode記錄該目錄的相關權限和屬性,並記錄分配到的那塊data block號碼;而data block則記錄在這個目錄下的文件名和該文件名佔用的inode 號碼。
對於文件:ext2會分配一個inode和適合這個文件大小的data block數量給該文件。

在ext2下創建一個文件,系統的行爲:
1、先確定用戶對於想要增加文件的目錄是否具有w和x的權限,如果有才能添加;
2、根據inode bitmap找到沒有使用的inode號碼,並將新文件的權限、屬性寫入;
3、根據block bitmap找到沒有使用的block號碼,並將實際數據寫入block中,同時更新inode,使其記錄存儲數據的block;
4、同步更新inode bitmap和block bitmap,根據剛纔使用的indoe和block,並更新super block的內容。

不管目錄還是文件,都會有對應的inode和data block,inode記載權限相關;目錄的data block記錄目錄下的文件名和該文件所佔用的inode編號;對於文件而言,data block記錄的是文件的內容。
讀取文件的流程:
1、通過掛載點獲取到根目錄的inode,判斷權限
2、讀取根目錄data block找到對應目錄的inode和data block號碼;
3、先讀取目錄的inode判斷權限,如果有權限再讀取data block內容;
4、重複2-3的內容,直到最後的文件和目錄

一個文件,如果數據沒有更改過,那麼該數據就是clean的,否則是dirty的。

df:列出文件系統的整體磁盤使用量
du:評估文件系統的磁盤使用量

df [-ahikHTm] [目錄或文件名]
-a:列出所有文件系統,包括系統特有的/proc等文件系統
-h:以GB、MB、KB等格式自行顯示,單位系統自動決定
-i:不用硬盤容量,而已inode的數量來顯示
-k:以KB爲單位顯示
-m:以MB爲單位顯示
-H:以1000位進位單位,而不是1024
-T:顯示該分區的文件系統名稱

du [-ahsSkm] [文件或目錄名稱]
-a:列出制定目錄下的所有文件的大小,默認僅顯示目錄大小
-h:以GB、MB、KB等格式自行顯示,單位系統自動決定
-s:僅列出總量,而不列出目錄下每個目錄各自的容量
-S:僅統計一層目錄,而不統計子目錄
-k:以KB爲單位顯示
-m:以MB爲單位顯示

df適合查看文件系統所佔的大小和剩餘容量,du適合查看目錄和文件容量。

硬連接和符號連接
硬連接示意圖
ln 源文件名 硬連接文件名
硬連接的限制:1、不能跨文件系統;2、不能連接到目錄

符號連接示意圖

ln -s 源文件名 符號連接文件名
當源文件刪除後,符號連接也就打不開了。
符號連接的data block中存儲的是源文件的完整路徑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章