linux系統上的文件管理

一、 inode、data block與super block

1. inode用於記錄文件的屬性與權限等信息;一個文件佔用一個inode,同時inode還記錄了該文件的data block的位置。inode的大小有128、256字節兩種規格。

2. data  block:用於存儲文件的實際內容。塊大小爲1K、2K、4K字節三種規格。

3. super block: 記錄文件系統的整體信息,包括了inode與data block的總量、已使用量、剩餘的旦、卷標、文件系統格式等相關的信息。可以使用tune2fs -l  Partition_Name來查看。


注意:以ext2文件系統爲例,對於128字節的inode,除了存儲文件的權限屬性等信息外,只能存12個4字節的文件指向的數據塊號碼。那對於一個大文件來呢,需要幾十上百萬個數據塊來存放文件內容。這個怎麼弄?其中inode除了12個直接的數據指向以外,還有一個間接、一個雙間接、一個三間接的記錄區。所謂間接的意思就是inode的直接指向會指向一個數據block,這個block不存數據,而是存放的文件的數據塊的號碼。對於1K大小的數據塊,可以存儲256個指向。而256個數據區塊,可以存儲的文件大小爲256KB;雙間接可以存儲64MB數據,三間接可以存儲16G大小的文件;     對於2K和4K大小以及其他文件系統,算法不相同。但都借用了數據區塊來存放數據區塊號。



二、 文件是如何存取的

每個文件系統在其內部劃分了多個block group,而每個block group內又包括了以下幾個內容:

1. super block:   inode與數據區塊的總量,剩餘的數量,inode與數據區塊的大小,保留等信息。第一個塊組肯定有超級塊,後續的塊組,有的有,有的沒有。

2. 文件系統描述: 描述區塊羣組的開始與結束的區塊,以及說明每個區段(超級區塊、對照表、inode對照表、數據區塊)分別介於哪一個區塊之間,這部分也能用dumpe2fs來查看。

3. block bitmap:用於記錄哪些block是空的,哪些是已經使用的。

4. inode bitmap:  用於記錄哪些inode是空的,哪些是已經使用的。

5. inode table:  用於存儲文件屬性以及該文件數據區塊號碼

6. data block: 用於存儲文件的實際內容。


存取文件時,先檢查用戶對目錄是否有寫和執行權限;接着系統通過inode bitmap查詢哪些inode表是空的,將新文件的屬性寫入空的inode表;根據block bitmap查找哪些data block是空的,是空的則可以將文件內容寫入到這些block中;更新inode bitmap以及block bitmap,並更新超級塊的信息。


三、 系統如何通過路徑讀取文件內容

舉例說明,查找/etc/passwd文件

1. 先查找/的inode號碼,/的inode裏有記錄/對應的data block;

2. 在/的data block中找到etc目錄對應的inode

3.  讀取etc目錄對應的inode表中,找到etc目錄的數據塊

4. 在etc目錄的數據塊中,找到passwd文件的inode號碼

5. 讀取passwd文件的inode中數據塊指向,並將內容讀取出來。


總結: 從根目錄開始,先找inode,通過inode找到對應的數據區塊;在數據區塊中,分兩種情況:1. 該文件是目錄,則數據區塊記錄了其下屬子目錄及文件的文件名以及對應的inode; 2. 該文件是非目錄文件,則數據區域記錄了文件的內容。   通過inode--->block--->inode--->block依次循環來讀取文件。在這個過程中,需要檢查用戶對目錄及文件的權限。



四、 硬鏈拉與軟鏈接

1. 硬鏈接是指向同一個inode的多個文件路徑; 目錄不支持硬鏈接,不能跨文件系統,創建硬鏈接會增加inode計數。

2. 軟鏈接指向的是文件實際的訪問路徑,可以跨文件系統,支持對目錄創建軟鏈接,刪除軟鏈接不會影響原文件。


五、 MBR

存儲設備的第一個扇區,也就是最前面的512字節,叫做入引導記錄


1. 主引導記錄的結構

主引導記錄只有512字節,放不了太多東西,它的主要作用是告訴計算機到硬盤的哪一個位置去找操作系統。

主引導記錄由以下3個部分組成:

A. 第1-446字節:調用操作系統的機器碼

B. 第447-510字節:分區表 (Partition  table)

C. 第511-512字節:主引導記錄簽名(0X55和0XAA)


2. 分區表

硬盤分區有很多好處,考慮到每個區可以安裝不同的操作系統,主引導記錄呢須知道 將控制權轉交給哪個區。

分區表的長度只有64字節,裏面又分成4項,每項16字節。所以一個硬盤 最多隻能分4個一級分區,又叫作主分區。每組的記錄區主要記錄了該區段的起始與結束的柱面號碼。

每個主分區的16個字節由以下6部分組成:

A. 第1個字節,如果爲0X80,就表示該主分區是激活分區,控制權要轉交給這個分區。4個主分區裏面只能有一個分區是激活的。

B. 第2-4字節:主分區第一個扇區的物理位置(柱面、磁頭、扇區號等)

C. 第5字節:主分區類型

D. 第6-8字節:主分區最後一個扇區的物理位置

E. 第9-12字節:該主分區第一個扇區的邏輯地址

F. 第13-16字節:主分區的扇區總數。


最後的4字節(主分區的扇區總數)決定了這個主分區的長度,也就是說,一個主分區的扇區總數最多不超過2的32次方。

如果每個扇區爲512字節,則意味着單個分區最大不超過2TB。再考慮到扇區的邏輯地址也是32位,所以單個硬盤可利用的最大空間也不超過2TB。如果想再使用更大的硬盤,只有兩個方法:一是提高每個扇區的字節數,二是增加扇區總數。


六、 文件名存儲在哪裏,文件的屬性存儲在哪裏

1. 目錄也是文件;

2. 文件的文件名存儲在目錄的數據塊中;

3. 文件的屬性,權限等信息存儲在inode中;

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