第三代擴充檔案系統(英語: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). 

參考 編輯

外部連結 編輯