第十一章 EXT2文件系統

以下內容是我對本章部分內容的學習總結

一、EXT2文件系統數據結構

1、虛擬磁盤佈局

每當文件系統需要從包含它的塊設備中讀取信息或數據,就將請求底層的設備驅動讀取一個基本塊大小整數倍的數據塊。
EXT2文件系統將它所使用的邏輯分區劃分成數據塊組。
每個數據塊組都將那些對文件系統完整性最重要的信息複製出來,同時將實際文件盒目錄看做信息與數據塊。

邏輯文件系統管理的是一個邏輯空間,這個邏輯空間就像一個大的數組,數組的每個元素就是文件系統操作的基本單位——邏輯塊。
邏輯塊是從0開始編號的,是連續的;邏輯塊相對的是物理塊。通常,EXT2的物理塊佔一個或幾個連續的扇區。

2、超級塊

超級塊Block#1:(在硬盤區分中字節偏移量為1024)B1是超級塊,用於容納整個文件系統的信息

其主要記錄的以下內容:

  • block與inode的總量;
  • 未使用與已使用的inode/block數量;
  • block與inode的大小;
  • 文件系統的詳細信息——掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤的時間等文件系統的相關信息等

3、塊組描述符

EXT2將磁盤塊分為幾個組,每個組有8192個塊,用一個塊組描述符結構體來描述。

  • Block#2:塊組描述符塊(硬盤上的s_first_data_block+1)
  • Block#8:塊位圖
  • Block#9:索引節點位圖

二、遍歷算法

  1. 讀取超級塊;
  2. 讀取塊組描述符塊(1+s_first_data_block),以訪問組0描述符;
  3. 讀取InodeBeginBlock,獲取/的索引節點,即INODE#2;
  4. 將路徑名標記為組件字符串,假設組件數量為n;
  5. 從3中的根索引節點開始,在其數據塊中搜索name[0];
  6. 使用索引節點號ino來定位相應的索引節點。Ino從1開始計數,使用郵差算法計算包含索引節點的磁盤塊及其在該塊中的偏移量;
  7. 由於5~6步將會重複n次,所以最好編寫一個搜索函數。

三、EXT2文件系統的結構

  1. 第1級別:實現了基本文件系統樹。用户命令程序有:mkdir,creat,mknod,rmdir,link,unlink,symlink,rm,ls,cd和pwd等;
  2. 第2級別:實現了文件內容讀寫函數;
  3. 第3級別:實現了文件系統的掛載、卸載和文件保護。

四、EXT2文件系統的實現

  1. 當前運行進程的PROC結構體。在實際系統中,每個文件操作都是由當前執行的進程決定的。每個進程都有一個cwd,指向進程當前工作目錄(CWD)的內存索引節點。它還有一個文件描述符數組fd],指向打開的文件實例。
  2. 文件系統的根指針。它指向內存中的根索引節點。當系統啓動時,選擇其中一個設備作為根設備,它必須是有效的EXT2文件系統。根設備的根索引節點(inode#2)作為文件系統的根(1)加載到內存中。該操作稱為“掛載根文件系統”。
  3. openTable條目。當某個進程打開文件時,進程fd數組的某個條目會指向openTable,openTable指向打開文件的內存索引節點。
  4. 內存索引節點。當需要某個文件時,會把它的索引節點加載到minode 槽中以供使用。因為索引節點是唯一的,所以在任何時候每個索引節點在內存中都只能有一個副本。在minode中,(dev,ino)會確定索引節點的來源,以便將修改後的索引節點寫回磁盤。refCount字段會記錄使用minode的進程數。
  5. dirty字段,表示索引節點是否已被修改,掛載標誌表示索引節點是否已被掛載,如果已被掛載,mntabPtr將指向掛載文件系統的掛載表條目。lock字段用於確保內存索引節點一次只能由一個進程訪問,例如在修改索引節點時,或者在讀/寫操作過程中。
  6. 已掛載的文件系統表。對於每個掛載的文件系統,掛載表中的條目用於記錄掛載的文件系統信息,例如掛載的文件系統設備號。在掛載點的內存索引節點中,掛載標誌打開,mntabPtr指向掛載表條目。在掛載表條目中,mntPointPtr指向掛載點的內存索引節點。

五、文件系統與系統項目擴展

  • type.h文件:這類文件包含EXT2文件系統的數據結構類型,比如超塊、組描述符、索引節點和目錄條目結構。此外,它還包含打開文件表、掛載表、PROC結構體和文件系統常數。
  • global.c文件:這類文件包含文件系統的全局變量。
  • util.c文件:該文件包含文件系統常用的實用程序函數。最重要的實用程序函數是讀/寫磁盤塊函數iget()、iput()和 getino()。
  • mount-root.c文件:該文件包含mount_root()函數,在系統初始化期間調用該函數來掛載根文件系統。

簡單的EXT2文件系統使用1KB塊大小,只有一個磁盤塊組它可以輕鬆進行以下擴展。

  1. 多個組:組描述符的大小為32字節對於1KB大小的塊,一個塊可能包含1024/32=32組描述符。32個組的文件系統大小可以擴展為32*8=256MB
  2. 4KB大小的塊:對於4KB大小的塊和一個組,文件系統大小應為4*8=32MB。對於一個組描述符塊,文件系統可能有128個組,可將文件系統大小擴展到128×32=4GB,對於2個組描述符塊,文件系統大小為8GB等。大多數擴展都很簡單,適合用於編程項目。
  3. 管道文件:管道可實現為普通文件,這些文件遵循管道的讀/寫協議。此方案的優點是:它統一了管道和文件索引節點,並允許可被不相關進程使用的命名管道。為支持快速讀/寫操作,管道內容應在內存中,比如在 RAMdisk中。必要時,讀者可將命名管道實現為FIFO文件。
  4. I/O緩衝:在編程項目中,每個磁盤塊都是接讀寫的。這會產生過多的物理磁盤I/O操作。為提高效率,實際文件系統通常使用一系列I緩衝區作為磁盤塊的緩存內存。文件系統的IO緩衝將會在第12章中討論,但是可把它合併到文件系統.

實踐環節

文件管理索引分配中邏輯塊號與物理塊號_描述符

  • free命令:查看文件操作系統
  • df(disk free):用於顯示目前在Linux系統上的文件系統磁盤使用情況統計。
  • du:查看目錄和文件容量

問題

EXT2系統的優點與缺點

優點:當創建Ext2文件系統時,系統管理員可以根據在給定大小的分區上預計存放的文件數來選擇給該分區分配多少個索引節點,這可以有效地利用磁盤的空間;文件系統把磁盤塊分為組,每組包含存放在相鄰磁道上的數據塊和索引節點,正是這種結構,使得可以用較少的磁盤平均尋道時間對存放在一個單獨塊組中的文件並行訪問。

缺點:沒有在書上找到對應內容