下面我們正是你介紹Ext2文件系統
Ext2文件系統使用以inode為基礎的文件系統。
文件系統一開始將inode與block規划好了,除非重新格式化,否則inode與block固定后就不再變動,但是當inode與block數量過多時,就不易於管理。因此Ext2在格式化的時候基本上是區分為多個塊組(block group),每個塊組都有獨立的/inode/block/superblock系統。Ext2格式化后如圖

在整體的規划中,文件系統最前面有一個啟動扇區(boot sector),這個啟動扇區可以安裝引導裝載程序。因此可以將不同的引導裝在程序安裝到個別的文件系統最前端,而不用覆蓋整塊硬盤唯一的MBR(主引導分區)。具體每個內瓤說明如下:
1、data block (數據塊):用來放置文件內容。在Ext2文件系統中所支持的block大小有1KB,2KB及4KB三種,在格式化block大小的時候就固定了,且每個block都有編號,以方便inode記錄。
但是,由於block大小的區別,會導致文件系統能夠支持的最大磁盤容量與最大單一文件容量並不相同,block大小而長生的Ext2文件系統限制如下
| block大小 | 1KB | 2KB | 4KB |
| 最大單一文件限制 | 16GB | 256GB | 2TB |
| 最大文件系統容量 | 2TB | 8TB | 16TB |
限制:
1)、原則上,block大小與數量在格式化完就不能再改變
2)、每個block內最多只能夠放置一個文件的數據
3)、承上,如果文件大於block的大小,則一個文件會占用多個block數量
4)、承上,如果文件小於block,則該block的剩余空間就不能再被使用(磁盤空間會浪費)
2、inodetable(inode表格):inode的內容主要記錄文件的屬性以及該文件實際數據是放置在哪幾號block內,基本上,inode記錄的文件數據至少有下面這些:
1)、該文件的訪問模式
2)、該文件的所有者與組
3)、該文件的大小
4)、該文件創建或狀態改變的時間
5)、最近一次的讀取時間
6)、最近修改的時間
7)、定義文件特性的標志
8)、該文件真正內容的指向
9)、每個inode大小均固定在128bytes
10)、每個文件都僅會占用一個inode而已
11)、承上,因此文件系統能夠創建的文件數量與inode的數量有關
12)、系統讀取文件時需要先找到inode,並分析inode所記錄的權限與用戶是否符合,若符合才能開始實際讀取block的內容
inode/block與文件大小的關系:
inode要記錄的數據非常多,但只有128bytes,而inode記錄一個block號碼要花掉4bytes,假設一個文件有400MB且每個block為4KB,那么至少要10萬條block號碼的記錄,inode哪有這么多可記錄
的信息?為此我們系統很聰明將inode記錄block號碼的區域定義為12個直接,一個間接,一個雙間接與一個三間接記錄區。

圖中最左邊為inode本身(128bytes),里面有12個直接指向block號碼的對照,這12個記錄可以直接取到block號碼,也就是直接尋址。至於所謂的間接就是再拿一個block來當作記錄block號碼的記錄區,如果文件過大時,就會使用間接的block來記錄編號,也就是間接尋址。同理,如果文件持續長大,就會利用雙間接。
這樣inode能夠指定多少個block呢?以較小的1KB的block來說明。可以指定的情形如下:
1)、12個直接指向:12*1K=12K,由於是直接指向,所以總共可以記錄12條記錄
2)、間接:256*1K
每條block號碼的記錄會花去4bytes,因此1K的大小能記錄256條記錄
3)、雙間接:256*256*1K=256^2K
4)、三間接:256*256*256*1K=256^3K
總額:將直接、間接、雙間接、三間接加總,得到12+256+256^2+ 256^3=16GB,此時我們知道當文件系統將block格式化為為1K大小時,能夠容納的最大文件為16GB,比較一下文件系統線指標的結果可發現是一致的。但這個方法不能用在2K及4K的block大小的計算中。因為大於2K的block將會收到文件系統本身的限制
3、Superblock(超級塊)
superblock是記錄整個文件系統相關信息的地方,沒有superblock,就沒有這個文件系統了,它記錄的主要信息有:
1)、block與inode的總量
2)、未使用與已使用的inode/block數量
3)、block與inode的大小
4)、文件系統的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤的時間等文件系統的相關信息
5)、一個validbit數值,若此文件系統已被掛載,則valid bit為0,若未被掛載,則valid bit為1
superBlock是非常重要的,因為我們這個文件系統的基本信息都寫在這里。此外,每個block group都有可能含有superblock。但是我們也說一個文件系統應該僅有一個superblock。事實上除了第一個blockgroup內會含有superblock之外,后續的block group 不一定含有superblock,若含有superblock則也是作為第一個superblock的備份而已。
4、File System Description(文件系統描述說明):這個區段可以描述每個block group的開始與結束的block號碼,以及說明每個區段分別介於哪一個block號碼之間
5、block bitmap(塊對照表):如果你想要添加文件時總會用到block。那你要使用哪個block來記錄呢?當然是選擇”空的block“來記錄新文件的數據。那你怎么知道哪個block是空的?這就得通過
block bitmap 的輔助,從block bitmap 當中可以知道哪些block是空的,因此我們的系統就能很快速找到可使用的空間來處理文件。同樣,如果刪除某些文件時,那么哪些文件原本占用的block號碼就得釋放出來,此時在block bitmap當中相對應到該block號碼的標志就得修改成為”未使用中“。這就是blockmap的功能。
6、inode bitmap(inode對照表):這個與block bitmap功能類似,只是block bitmap記錄的是使用與未使用的block號碼,inode bitmap記錄使用與未使用的inode號碼。
查看文件系統
剛才談到的各部分數據都與block號碼有關,每個區段與superblock的信息都可以使用dumpe2fd這個命令來查詢,利用dumpe2fs可以查詢到非常多的信息。
與目錄樹的關系
目錄與文件在Ext2文件系統當中是如何記錄數據的呢?基本上可以這么說
1、目錄:當我們在Linux的ext2文件系統新建一個目錄時,ext2會分配一個inode與至少一塊block給該目錄。其中inode記錄該目錄的相關權限與屬性,並可記錄分配的那塊block號碼。而block則是記錄在這個目錄下的文件名與該文件名占用的inode號碼數據。也就是說目錄所占用的block內瓤在記錄如下的信息:
1)、如果想實際查看root目錄下的文件所占用的inode號碼時,可以如下操作:

2、文件:當我們在Linux下的ext2新建一個一般文件時,ext2會分配一個inode與相對於該文件大小的block數量給該文件
3、目錄樹讀取:因為文件名是記錄在目錄的block當中,因此當我們要讀取某個文件時,就務必會經過目錄的inode與block,然后才能找到那個待讀取文件的inode號碼,最終才會取到正確的文件的block的內容。由於目錄樹是從根目錄開始讀取,因此系統通過掛載的信息可以找到掛載點的inode號碼,此時就能得到根目錄的inode內容,並依據該inode讀取根目錄的block內的文件名數據,再一層一層向下讀到正確的文件名。
3、文件系統大小與磁盤讀取性能
當一個文件系統規划的很大時,由於磁盤上面的數據經常變動,所以,整個文件系統上面的文件通常無法連續寫在一起,即block號碼不hi連續,而是填入式的將數據填入沒有被使用的block中,如果寫入的block很松散,那么就會有文件數據離散的問題發生。
