第三代擴展文件系統(英語:Third extended filesystem,縮寫為ext3),是一個日誌文件系統,常用於Linux操作系統。它是很多Linux發行版的默認文件系統史提芬·崔迪在1999年2月的內核郵件列表[2]中,最早顯示了他使用擴展的ext2,該文件系統從2.4.15版本的內核開始,合併到內核主線中[3]

ext3
開發者史提芬·崔迪
全稱第三代擴展文件系統
發布2001年11月 (Linux 2.4.15)
分區標識0x83(MBR
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(GPT
結構
目錄內容表,樹
文件分配位圖(空閒區域),表(元數據)
壞塊
限制
最大文件尺寸16GiB – 2TiB
最大文件數量可變[1]
最長文件名255字節
最大卷容量4TiB – 32TiB
文件名字符集除NULL和'/'外的所有字節
功能
日期記錄修改(mtime),屬性修改(ctime),訪問(atime)
日期範圍1901年12月14日-2038年1月18日
日期分辨率1秒
岔流
屬性No-atime, append-only, synchronous-write, no-dump, h-tree (directory), immutable, journal, secure-delete, top (directory), allow-undelete
文件系統權限Unix權限,ACLs和arbitrary security attributes(Linux 2.6 and later)
透明壓縮
透明加密否(塊設備級上提供)
操作系統支持LinuxBSDWindows(通過IFSExt2Fsd

優勢 編輯

雖然它的性能(速度)不如它的競爭對手,例如JFS2ReiserFSXFS,但它具有重要的優勢,那就是它允許在適當的時候從流行的ext2文件系統升級,而無需備份和恢復數據;除此之外,它還具有比ReiserFSXFS更低的的CPU使用率[1]頁面存檔備份,存於網際網路檔案館) 。

ext3文件系統增加的超越其前代的包括:

  • 日誌
  • 位目錄跨越多個塊提供基於樹的目錄索引
  • 在線系統增長

如果沒有這些,ext3文件系統也同時是個有效的ext2文件系統。這樣,經過良好測試的、成熟的文件系統工具來管理和修復ext2文件系統工具,可以無需大的變動,就應用於ext3文件系統。ext2和ext3文件系統共享相同的工具集,帶有fsck工具的e2fsprogs。這種緊密的聯繫也將兩種文件系統之間進行轉換(包括升級到ext3和降級為ext2)變得非常容易。

Linux實現的ext3文件系統,包括3個級別的日誌:

  • 日記:(慢,但風險小)元數據和文件內容都在提交到主文件系統前寫入。這樣將提高穩定性但性能上有所損失,因為所有的數據都要寫入2次。如果沒有在/etc/fstab中加上這個選項,修改中的檔案遇上kernel panic或突然斷電的時候就可能發生損毀的情況,當然,這還是得看軟體是怎麼寫入檔案的。
  • 順序:(中速,中等風險)順序和寫回類似,但在對應的元數據標記為提交前,強制寫入文件內容。這是很多Linux發行版默認的方式。
  • 回寫:(快,但風險最大;在某種感覺上和ext2相當)這邊會寫入日誌的只有metadata而已,檔案的內容並不會跟著寫入日誌裡面。這樣的作法讓整個效率變快了不少,不過也同樣造成了檔案寫入時不按順序的結果。舉例來說,檔案在附加變大的同時發生了crash的情況,就可能造成下次掛載時檔案後面就附加一堆垃圾數據的情況。

儘管ext3缺少一些當代文件系統的特點,像是動態的inode、樹狀的資料儲放結構等等,都是被視作ext3的缺點之一,不過在這些特點之外,ext3在文件系統回復上面就有了很好的表現。跟樹狀結構的文件系統相比,在ext3上面metadata是放在固定的位置,而且在寫入的同時會重複寫入的一些資料讓ext2/3在面臨資料損毀的情況下還有挽回的機會。

劣勢 編輯

功能 編輯

當初ext3的設計目標就是提供對於ext2的高度相容,很多磁盤上的結構和都和ext2很相似。也因為這樣,ext3缺乏很多最新設計中的功能,例如動態分配inode和可變塊大小(frags或tails)。

ext3文件系統在被掛載為寫入的時候,是不能進行fsck的。ext3檔案系統的傾倒作業在這個檔案系統還是掛載中的時候執行可能會造成資料的損壞。

ext3不支持在其他文件系統上已經支持(例如:JFS2ext4)的擴展

磁盤碎片 編輯

在文件系統級別上,沒有在線的ext3磁盤碎片整理工具。

離線的ext2磁盤碎片整理工具e2defrag,可以用於ext3文件系統,但前提是在使用前要將文件系統轉換回ext2。但依賴於功能位在文件系統中打開,e2defrag可能會毀滅數據;目前仍然不知道如何處理新的ext3功能。[4]

有一些用戶使用的磁盤碎片整理工具,例如Shake[2]頁面存檔備份,存於網際網路檔案館) 和defrag[3]頁面存檔備份,存於網際網路檔案館),這些工具通過複製文件來實現新分配的文件不存在碎片。但這只在文件系統相當空的情況下有效,並且該文件系統不經常出現碎片。目前沒有真正的用於ext3的磁盤碎片整理工具[4]頁面存檔備份,存於網際網路檔案館) 。

事實上,磁盤碎片整理完全是一種人們在單用戶單進程環境下(如DOS/早期Windows)工作時養成的舊習。

在多任務環境下,磁盤碎片的出現根本是不可避免的,而且碎片化的速度非常之快。操作系統的任務不是不負責任地給用戶提供一個整理工具,而是應該在系統設計的時候消除碎片化對性能的傷害。比如Linux塊設備操作都要經過一個I/O調度層,通過在調度層中使用帶有電梯算法的調度策略來消除碎片對性能的影響。

另外,如果將來固態硬盤普及乃至取代傳統硬盤,也會讓磁盤碎片的概念成為歷史。

反刪除 編輯

和ext2不同,ext3會在刪除文件時把文件的節點(inode)中的塊指標清除。這樣做可以在unclean載入文件系統後,重放日誌時,可以減少對文件系統的訪問。但也同樣也增加了文件在反刪除上面的困難。用戶唯一的補救是在硬盤中撈取數據,並且要知道文件的起始到結束的塊指標。儘管提供了比ext2在刪除文件上稍微高一些的安全性,卻也無可避免的帶來了不便之處。

壓縮 編輯

Ext3不支持透明壓縮(Ext2以非官方補丁支持)。

大小限制 編輯

ext3有一個相對較小的對於單個文件和整個文件系統的最大尺寸。這些限制依賴於文件系統的塊大小;下面的表格總結了這些限制[5]

區塊大小 最大檔案容量 最大檔案系統容量
1KiB 16GiB 2TiB
2KiB 256GiB 8TiB
4KiB 2TiB 16TiB
8KiB[limits 1] 2TiB 32TiB
  1. ^ 8KiB塊,只能用於允許8KiB頁面的架構(例如alpha)。

日誌中沒有校驗和 編輯

Ext3在寫入日誌時,並不做校驗和。如果barrier=1沒有作為加載參數(在文件/etc/fstab),並且如果硬件在無次序的寫入緩存,在崩潰時會嚴重損壞文件系統[6][7](該選項在大多數流行的Linux發行版中都沒有被啟用,所以大多數發行版的處境都很危險。)

考慮下面的情況:如果硬盤無序的做寫入操作(因為現在的硬盤都使用緩存機制以便攤銷寫入速度),那麼有可能出現在寫入處理的提交塊時,其他的相關的塊已經被寫入了。如果電源掉電、內核panic出現在其他塊寫入前,那麼系統將必須重啟。在重啟後,文件系統將按照正常方式重演日誌,並且重演「優勝者」(具有提交塊的處理,包括上面無效的但被標記為有效的提交塊的處理)。於是,上面沒有完成的磁盤寫入將處理,但使用已經損壞的日誌數據。文件系統在重演日誌的時候,將錯誤的使用已經損壞的數據覆蓋正常數據。如果使用校驗和(如果假的「優勝者」處理被標記為互斥的校驗和),文件系統會處理的更好,並且不會在磁盤上重演錯誤的數據。截止到2007年6月24日,已經有補丁來修復這個問題。

Ext4dev / Ext4 編輯

2006年10月10日發布了一個增強版本的文件系統,使用ext4作為名稱。該文件系統包含很多新的功能。

注釋和引用 編輯

  1. ^ 最大i節點(並且之後作為文件和目錄的最大數量)數目在文件系統創建時確定。如果V是卷的大小(字節數),則默認的i節點數量位V/213(或塊的數量,以最小的為準),且最小為V'/223。絕大多數應用程序認為默認值已經足夠了。
  2. ^ Stephen C. Tweedie. Re: fsync on large files. Linux kernel mailing list. February 17, 1999 [2007-09-01]. (原始內容存檔於2021-02-25). 
  3. ^ Rob Radez. 2.4.15-final. Linux kernel mailing list. November 23, 2001 [2007-09-01]. (原始內容存檔於2011-08-26). 
  4. ^ Andreas Dilger. Post to the ext3-users mailing list(英文). ext3-users mailing list post. [2007-09-01]. (原始內容存檔於2021-02-24). 
  5. ^ Matthew Wilcox. Documentation/filesystems/ext2.txt. Linux kernel source documentation. [2007-09-01]. (原始內容存檔於2007-08-24). 
  6. ^ 存档副本. [2007-09-01]. (原始內容存檔於2007-09-28). 
  7. ^ 存档副本. [2007-09-01]. (原始內容存檔於2007-09-28). 

參考 編輯

外部連結 編輯