Ext3

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

## 優勢

雖然它的性能（速度）不如它的競爭對手，例如JFS2，ReiserFS和XFS，但它具有重要的優勢，那就是它允許在適當的時候從流行的ext2文件系統升級，而無需備份和恢復數據；除此之外，它還具有比ReiserFS和XFS更低的的CPU使用率。

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 和defrag，這些工具通過複製文件來實現新分配的文件不存在碎片。但這只在文件系統相當空的情況下有效，並且該文件系統不經常出現碎片。目前沒有真正的用於ext3的磁碟碎片整理工具。

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

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

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

### 反刪除

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

### 壓縮

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

### 大小限制

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

區塊大小｜最大檔案容量｜最大檔案系統容量

1KiB｜16GiB｜2TiB

2KiB｜256GiB｜8TiB

4KiB｜2TiB｜16TiB

8KiB｜2TiB｜32TiB

### 日誌中沒有校驗和

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

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

## Ext4dev / Ext4

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

## 外部連結

- 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

## 基本資料

- 日語原文：ext3
- 全稱：第三代擴展文件系統
- 開發者：史提芬·崔迪
- 發布：Linux 2.4.15
- 發布：2001年11月
- 分區標識：0x83（MBR）、EBD0A0A2-B9E5-4433-87C0-68B6B72699C7（GPT）
- 目錄內容：表，樹
- 文件分配：位圖（空閒區域），表（元數據）
- 壞塊：表
- 最長文件名：255位元組
- 最大文件數量：可變
- 最大卷容量：4TiB – 32TiB
- 最大文件尺寸：16GiB – 2TiB
- 文件名字符集：除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）
- 透明壓縮：否
- 透明加密：否（塊設備級上提供）
- 作業系統：Linux、BSD、Windows（通過IFS或Ext2Fsd）