Ext3

**第三代擴充檔案系統**（英語：Third extended filesystem，縮寫為 **ext3**），是一個紀錄檔檔案系統，常用於 Linux 作業系統。它是很多 Linux 發行版的預設檔案系統。史提芬・崔迪在 1999 年 2 月的核心郵寄清單中，最早顯示了他使用擴充的 ext2，該檔案系統從 2.4.15 版本的核心開始，合併到核心主線中。

## 優勢

雖然它的效能（速度）不如它的競爭對手，例如 JFS2，ReiserFS 和 XFS，但它具有重要的優勢，那就是它允許在適當的時候從流行的 ext2 檔案系統升級，而無需備份和恢復資料；除此之外，它還具有比 ReiserFS 和 XFS 更低的的 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 不支援在其他檔案系統上已經支援（例如：JFS2 和 ext4）的擴充。

### 磁碟碎片

在檔案系統級別上，沒有線上的 ext3 磁碟重組工具。

離線的 ext2 磁碟重組工具 `e2defrag`，可以用於 ext3 檔案系統，但前提是在使用前要將檔案系統轉換回 ext2。但依賴於功能位在檔案系統中打開，`e2defrag` 可能會毀滅資料；目前仍然不知道如何處理新的 ext3 功能。

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

事實上，磁碟重組完全是一種人們在單使用者單行程環境下（如 DOS／早期 Windows）工作時養成的舊習。

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

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

### 反刪除

和 ext2 不同，ext3 會在刪除檔案時把檔案的節點（inode）中的塊指標準畫質除。這樣做可以在 unclean 載入檔案系統後，重放紀錄檔時，可以減少對檔案系統的存取。但也同樣也增加了檔案在反刪除上面的困難。使用者唯一的補救是在硬碟中撈取資料，並且要知道檔案的起始到結束的塊指標。儘管提供了比 ext2 在刪除檔案上稍微高一些的安全性，卻也無可避免的帶來了不便之處。

### 壓縮

Ext3 不支援透明壓縮（Ext2 以非官方修補程式支援）。

### 大小限制

ext3 有一個相對較小的對於單個檔案和整個檔案系統的最大尺寸。這些限制依賴於檔案系統的塊大小；下面的表格總結了這些限制：

### 紀錄檔中沒有校驗和

Ext3 在寫入紀錄檔時，並不做校驗和。如果 barrier=1 沒有作為載入參數（在檔案 /etc/fstab），並且如果硬體在無次序的寫入快取，在崩潰時會嚴重損壞檔案系統（該選項在大多數流行的 Linux 發行版中都沒有被啟用，所以大多數發行版的處境都很危險。）

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

## Ext4dev / Ext4

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

## 注釋和參照

## 參考

* ext2
* ext4
* List of file systems
* Comparison of file systems

## 外部連結

* Linux ext3 FAQ（頁面存檔備份，存於網際網路檔案館）
* Introducing ext3 - IBM developerWorks Advanced filesystem implementor's guide, Part 7（頁面存檔備份，存於網際網路檔案館）
* Ext2 File System For Windows（頁面存檔備份，存於網際網路檔案館） GPL ext2/ext3 file system driver for Windows NT/2000/XP/Vista（opensource, supports read & write, supports 2K/XP/VISTA on X86/AMD64）
* Ext2 Installable File System For Windows（頁面存檔備份，存於網際網路檔案館） ext2/ext3 file system driver for MS Windows NT/2000/XP（freeware, supports read & write on Windows NT4.0/2000/XP/2003 on x86 processors only）
* EXT2 IFS ext2/ext3 file system driver for MS Windows NT/2000/XP（opensource, doesn't support writing, doesn't support Windows XP SP2 or Windows Vista）
* Explore2fs（頁面存檔備份，存於網際網路檔案館） An explorer-like GUI tool for accessing ext2/ext3 filesystems under MS Windows
* ext2/ext3 resizing tools（頁面存檔備份，存於網際網路檔案館）
* Presentation on EXT3 Journaling Filesystem（頁面存檔備份，存於網際網路檔案館） by Dr. Stephen Tweedie at the Ottawa Linux Symposium, 20 July, 2000