2021-05-12 14:32:11
Linux檔案系統結構
2020-06-16 17:08:35
檔案系統結構
磁碟是由若干磁區組成,每個磁區有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節點中沒有檔名就是因為基於這種定位檔案位置的機制
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-09/146740.htm
相關文章