文件系統結構分析


文件系統結構

磁盤分區和文件系統

磁盤是由若干扇區組成,每個扇區有512B(將磁盤存儲區扇區化是為了更好的管理磁盤)。又由若干個扇區組成一個塊(ext2默認是由8個扇區組成一個塊,即4kb,這里為了簡化說明,就把2個扇區組成一個塊,即1kb)。由圖知,將磁盤分成若干個分區,每個分區由若干個塊組成。

  • 自舉塊(boot block):占用1 block;主要存儲分區的操作系統類型、分區起始地址;pc聯盟規定的大小,和各個文件系統無關;每個分區只有一個;
  • 超級塊:占用1 block;存儲分區操作系統版本、塊大小、文件系統;
  • 塊組描述表(GDT):占用3 block;存儲一個塊組的描述信息;
  • 塊位圖(block bitmap):占用1 block;每個比特位表示一個數據塊是否被標記使用;1:已使用,0:未使用;
  • inode 位圖(inode bitmap):占用1 block;每一個比特位表示一個inode節點。1:已使用,0:未使用;
  • inode節點:占用128B;分為文件屬性部分和數據指針部分;數據指針占用60B,長度為15的指針數組;每個數據塊的大小是1 block,那么15個指針最多只能維護15*1K個文件大小,顯然,文件大小的上限太小了。所以文件系統通過三級間接尋址的方式來提高文件大小的上限。塊大小若以1 block計算,文件大小的上限為16G,若以4 block為塊大小,那文件大小的上限超過了1T;ext4文件系統中,數據指針有256B,那文件大小上限就非常大了;
  • 數據塊:存儲文件的內容;

三級間接尋址策略

三級間接尋址圖

間接尋址

將數據指針數組命名為data數組。文件系統中,將data[12]進行一級間接尋址。即:將data[12] 指針指向的數據塊,轉化為一個更大的指針數組,長度為1024/4=256。在將這個更大的指針數組的分別數指向256個數據塊;data[13]進行二級間接尋址,data[14] 進行三級間接尋址。都和一級間接尋址同理。

目錄文件

數據塊存儲內容

目錄塊

數據塊中存儲的是一條一條的記錄項,每條記錄項都由文件名、indoe編號、記錄長度(該記錄項首地址到下一條記錄項的首地址的長度)。每一個記錄項就是該目錄下“ls -a”的結果。

普通文件結構

普通文件結構

由圖可以看出,每個inode節點可以對應多個數據塊,和上文在分析inode節點的內容一致。然后,若干個目錄塊中的記錄項指向每個inode節點,通過inode節點中鏈接數這個數據成員來標識指向其的記錄項個數,這就是硬鏈接。當然,這些目錄塊都是目錄文件的數據塊;

目錄文件結構

目錄文件結構

由上圖知,inode節點在文件系統中被維護成了結構體數組,inode編號為數組的下標;2549號i節點是1267號i節點的子目錄,因為1267號i節點的數據塊中有2549號i節點的記錄項;“.”目錄文件和 “..”目錄文件都是硬鏈接。

從以上分析能夠得出結論:所有的目錄塊都是不同目錄文件的數據塊。

文件創建和查詢過程

執行命令:mkdir /home/aaron/a.c

(1)通過塊位圖區找到空閑的數據塊,存放a.c中的內容
(2)通過inode位圖區找到空閑的inode節點塊,生成相應的inode節點
(3)在aaron目錄文件的數據塊中添加一條a.c的記錄項

執行命令:vim /home/aaron/a.c

(1)找到inode編號為2的inode節點,
(2)遍歷根目錄文件的數據塊中的記錄項,匹配aaron記錄項,獲取其inode編號
(3)通過aaron目錄文件的inode編號,找到aaron文件對應的數據塊
(4)遍歷aaron文件的數據塊中的記錄項,匹配a.c記錄項。同理,找到對應的a.c的數據塊。用vim打開相應文件
  • unix和Linux系統是通過文件名來對應inode節點號,從而找到對應的數據塊,完成文件查詢的過程
  • inode節點中沒有文件名就是因為基於這種定位文件位置的機制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM