本文主要講述 Linux 上比較流行的 ext2 檔案系統在硬碟分區上的詳細布局情況。Ext2 檔案系統加上日誌支援的下一個版本是 ext3 檔案系統,它和 ext2 檔案系統在硬碟布局上是一樣的,其差別僅僅是 ext3 檔案系統在硬碟上多出了一個特殊的 ino de(可以理解為一個特殊檔案),用來記錄檔案系統的日誌,也即所謂的 journal。由於本文並不討論記錄檔,所以本文的內容對於 ext2 和 ext3 都是適用的。
1、前言
本文的資料來源是 Linux 核心中 ext3 檔案系統的原始碼。為了便於讀者查閱原始碼,本文中一些關鍵的技術詞彙都使用了核心原始碼中所使用的英語單詞,而沒有使用相應的中文翻譯。(這種方法是否恰當,還請讀者朋友們指教。)
2、粗略的描述
對於 ext2 檔案系統來說,硬碟分區首先被劃分為一個個的 block,一個 ext2 檔案系統上的每個 block 都是一樣大小的,但是對於不同的 ext2 檔案系統,block 的大小可以有區別。典型的 block 大小是 1024 bytes 或者 4096 bytes。這個大小在建立 ext2 檔案系統的時候被決定,它可以由系統管理員指定,也可以由檔案系統的建立程式根據硬碟分區的大小,自動選擇一個較合理的值。這些 blocks 被聚在一起分成幾個大的 block group。每個 block group 中有多少個 block 是固定的。
每個 block group 都相對應一個 group descriptor,這些 group descriptor 被聚在一起放在硬碟分區的開頭部分,跟在 super block 的後面。所謂 super block,我們下面還要講到。在這個 descriptor 當中有幾個重要的 block 指標。我們這裡所說的 block 指標,就是指硬碟分區上的 block 號數,比如,指標的值為 0,我們就說它是指向硬碟分區上的 block 0;指標的值為 1023,我們就說它是指向硬碟分區上的 block 1023。我們注意到,一個硬碟分區上的 block 計數是從 0 開始的,並且這個計數對於這個硬碟分區來說是全域性質的。