檔案系統實作

ext 檔案系統(ext file system)

/ ext -> ee-ex-tee, or "ext-four" for ext4 /

如果你用過 Linux,你的檔案多半住在 ext 上——擴展檔案系統,數十年來 Linux 預設的檔案系統家族。它是本領域所有概念縫合在一起、最熟悉的真實範例:索引節點、超級區塊、可用空間位元圖、多層索引、目錄,以及(從 ext3 起的)日誌。追溯它三個主要版本,正是一趟「一個實用檔案系統如何演進」的整潔導覽。

結構樣貌如下。一個 ext 磁碟區被切成多個區塊群組,每個都是一個自給自足的迷你檔案系統,擁有自己的索引節點位元圖、區塊位元圖、一段索引節點表,以及資料區塊(讓檔案的索引節點與資料彼此靠近以減少搜尋)。超級區塊(在數個區塊群組中有備份)存放整個磁碟區層級的中繼資料。每個檔案有一個使用經典多層索引的索引節點:12 個直接指標,外加單層、雙層、三層間接區塊。ext2 就是這個沒有日誌的乾淨設計——很快,但當機就意味著一次緩慢的完整 fsck。ext3 加入了日誌(中繼資料的預寫式記錄),使復原變成快速的重放而非完整掃描,同時保留相同的磁碟佈局,所以兩者大致相容。ext4 接著把它現代化:對大檔案,它以延伸區(extent)取代間接區塊方案(一個延伸區記錄起始區塊加長度,用一個項目而非數千個指標描述一長段連續的區塊),加入了 htree 索引的目錄以在巨大資料夾中快速查找、延後配置、以及對遠更大的檔案與磁碟區的支援。

ext 之所以重要,在於它是本領域理論的具體、久經沙場的化身——當你抽象地讀到索引節點或日誌時,ext 正是你能在一個運作中的系統裡真正看見它的地方。一個誠實的注記:ext 是一個日誌式、就地更新的檔案系統,與 btrfs、ZFS 這類寫入時複製系統是不同的設計取向;它不提供它們那種便宜的快照或區塊校驗和,以那些功能換取簡單、成熟與可預測的效能。

一段 1 GB 的影片在 ext2 上需要透過間接區塊走過超過 250,000 個區塊指標;在 ext4 上同一個檔案可能由單一延伸區描述:「從區塊 200000 開始、連續 262144 個區塊」——中繼資料少得多,循序讀取也快得多。

ext2(無日誌)-> ext3(加入日誌)-> ext4(延伸區、htree、更大上限):理論落地成具體。

ext 是就地更新的日誌式檔案系統,不是寫入時複製——所以它沒有 btrfs/ZFS 那種便宜的快照與端到端校驗和,這是刻意的設計而非疏漏。ext4 預設仍只記錄中繼資料、不記資料。

又稱
ext2ext3ext4extended file systemLinux ext第二/三/四代擴展檔案系統