Ext4文件系統簡介:功能列表與遷移注意事項
Linux 支持幾個不同的文件系統。這些文件系統中,一些是專用的網絡文件系統或為其他操作系統開發的文件系統,但絕大部分還是用作 Linux 本地文件系統 — 您可以將 Linux 根(/)和系統目錄放在這種文件系統里。目前(2008年),這一類文件系統包括 ext2、ext3、ReiserFS、XFS 和 Journaled File System (JFS)。但是文件系統一直在不斷設計和開發中,新的文件系統也將陸續問世。
目前正在開發的最重要的 Linux 文件系統是 ext4 — 它是專門為 Linux 開發的原始的擴展文件系統(ext 或 extfs)的第四版。由于繼承了以前版本,ext4 在不久的將來很可能會成為一個重要的 Linux 標準文件系統(51CTO編輯注:本文撰寫于2008年,當時ext4尚處于試驗階段。截至到2010年6月,ext4目前已在多種發行版中被接受為默認文件系統之一,紅帽的RHEL 6也將采用ext4作為默認文件系統,可以說ext4技術現在已經成熟)。
Ext4 與 ext3 的對比
擴展文件系統(ext 或 extfs)第四版產生的原因是開發人員在 ext3 中并入了新的高級功能。但在實現的過程出現了幾個問題:
- 一些新功能違背向后兼容性。
- Ext3 代碼變得更加復雜并難以維護。
- 這些更改使原本十分可靠的 ext3 變得不可靠。
由于這些原因,從 2006 年 6 月份開始,開發人員決定把 ext4 從 ext3 中分離出來進行獨立開發。Ext4 的開發工作從那時起開始進行,但大部分 Linux 用戶和管理員都不怎么注意這件事情。隨著 2.6.19 內核在 2006 年 11 月的發布,ext4 ***次出現在主流內核里,但是它當時還處于試驗階段(現在還是),因此很多人都忽視了它。
由于還處于開發階段,從 2.6.24.4 內核開始,ext4 的功能列表就一直在變動。 Ext4 的當前和預期功能包括從 ext3 發展而來的功能,見下表:
◆大型文件系統
ext4文件系統可支持***1 Exbibyte的分區區與***16 Tebibyte的文件。
◆Extents
ext4引進了Extent文件存儲方式,以取代ext2/3使用的block mapping方式。Extent指的是一連串的連續物理block,這種方式可以增加大型文件的效率并減少分裂文件。ext4支持的單一Extent,在單一block為4KB的系統中***可達128MB[1]。單一inode中可存儲4筆Extent;超過四筆的Extent會以Htree方式被索引。
◆向下兼容
ext4向下兼容于ext3與ext2,因此可以將ext3和ext2的文件系統掛載為ext4分區區。由于某些ext4的新功能可以直接運用在ext3和ext2上,直接掛載即可提升少許效能。
ext3文件系統可以部分向上兼容于ext4(也就是說ext4文件系統可以被掛載為ext3分區區)。然而若是使用到Extent技術的ext4將無法被掛載為ext3。
◆預留空間
ext4允許對一文件預先保留軟盤空間。目前大多數文件系統做到這點的方式是直接產生一個填滿0的文件;ext4和XFS可以使用Linux內核中的一個新的系統調用“fallocate()”取得足夠的預留空間。
◆延遲取得空間
ext4使用一種稱為allocate-on-flush的方式,可以在數據將被寫入軟盤(sync)前才開始取得空間;大多數文件系統會在之前便取得需要的空間。這種方式可以增加效能并減少文件分散程度。
◆突破32000子目錄限制
ext3的一個目錄下最多只能有32000個子目錄。ext4的子目錄***可達64000,且使用“dir_nlink”功能后可以達到更高(雖然父目錄的link count會停止增加)。為了避免效能受到大量目錄的影響,ext4默認打開Htree(一種特殊的B-tree)索引功能。該功能已經實現于Linux內核2.6.23版。
◆日志校驗和
Ext4使用校驗和特性來提高文件系統可靠性,因為日志是磁盤上被讀取最頻繁的部分之一。這個特性還有一個好處就是可以安全地避免日志處理時磁盤I/O的等待,而稍微提高一些性能。日志校驗和的技術源于威斯康辛大學的一篇名為IRON File Systems的研究論文(見第六節 transaction checksums校驗和處理)[5]
◆在線磁盤整理
對于在線磁盤整理工具有許多草案,但是這些草案都沒有被包含在主流的內核當中。即使Ext4包含有許多避免磁盤碎片的技術,但是磁盤碎片還是難免會在一個長時間使用過的文件系統中存在。Ext4將會有一個具有磁盤整理功能的工具[來源請求].
◆快速文件系統檢查
Ext4將未使用的區塊標記在inode當中,這樣可以使諸如e2fsck之類的工具在磁盤檢查時將這些區塊完全跳過,而節約大量的文件系統檢查的時間。這個特性已經在2.6.24版本的Linux內核中實現。
(以上列表引用自維基百科)
功能列表的一些功能在實際使用中不具備與 ext3 的向后兼容性 — 即可能無法使用 ext3 文件系統類型的代碼掛載 ext4 文件系統。但是 ext4 保留了向前兼容性 — 您可以像掛載 ext4 文件系統一樣掛載 ext3 文件系統。
#p#
ext4 的使用對象
Ext4 最為顯著的改進是文件和文件系統的大小。因此,最可能需要 ext4 的用戶是那些磁盤空間大小為幾個 TB 的用戶。然而表 1 中的功能列表還展示了其他一些吸引人的改進。例如,如果您的目錄帶有大量子目錄,或者要求時間戳的精確度小于一秒,您可能希望嘗試使用 ext4。
從2.6.28版本開始,Linux Kernel開始正式支持新的文件系統EXT4。
把 ext3 遷移到 ext4
當系統在 ext4 的支持下啟動到內核時,您就可以使用新的文件系統了。為此,必須準備一個分區、獨立磁盤的冗余陣列(RAID)設備或其他存儲空間。然后就可以把它用作 ext4 文件系統并調整文件系統選項。
準備一個設備
如果希望從簡單的入手,可以使用新版或舊版的 e2fsprogs 包(即 mkfs.ext3 或 mkfs.ext4)附帶的工具格式化分區或其他設備。例如, mkfs.ext4 -j /dev/sda6 準備了 /dev/sda6 分區以供使用。使用 mkfs.ext4 可以產生一個文件系統,并激活了很多特定于 ext4 的功能。
目前,e2fsprogs 程序還沒有完全跟上內核文件系統的步伐。幸運的是,大部分內核驅動程序的功能都不需要對 mkfs.ext4 或其他實用程序進行特殊準備。當掛載文件系統時,將激活 ext4 功能。如果要在大媒體上使用 ext4, 就必須進行大膽的探索,確保記錄和報告所遇到的問題!
如果想把現有的 ext2 或 ext3 文件系統用作 ext4 文件系統,也不難實現。只需要按照隨后描述的方法掛載設備即可。然而如果使用某些新的功能,如 extent,該文件系統就不能和 ext2 或 ext3 的驅動程序一起使用。
使用 ext4
要把一個設備用作 ext4 文件系統,就必須使用 ext4dev 文件系統類型代碼掛載它(當 ext4 變得穩定時,文件系統類型代碼將變為 ext4)。例如,mount -t ext4dev /dev/sda6 /mnt/point 在 /mnt/point 中把 /dev/sda6 掛載為 ext4 文件系統。這些都是 ext4 的基本用法。注意,默認的掛載選項啟用了 extent,這會導致文件系統在作為 ext3 文件系統使用時變得不可用。如果您想嘗試一下 ext4 同時可以返回到 ext3,則使用 -o noextents 選項禁用 extent 功能。
一旦掛載以后,可以像其他任何文件系統一樣使用 ext4:復制文件、直接創建文件等等。 除了遇到 bug 或執行基準測試以外,您不會覺察到任何差別。
調整 ext4 性能選項
可以使用 tune2fs 程序調優 ext4 文件系統,與調優 ext2 或 ext3 文件系統的方式一樣。目前, tune2fs 不提供任何特定于 ext4 的選項,但是可以使用標準的 -O 參數設置 ext4 選項,例如 extent。
當把文件系統掛載為 ext4 時,內核開始使用特定于文件系統的功能,如 extent。這樣做的結果是不能再把文件系統掛載為 ext3 文件系統,至少會變得非常困難。
盡管把 ext3 文件系統掛載為 ext4 能夠實現特定于 ext4 的功能,掛載本身并不把舊數據結構轉換為新的格式。例如,現有文件保持塊狀方式分配, 而不是使用 extent 進行分配。因此,舊文件沒有從新功能獲得好處。然而,ext4 的開發人員已經考慮到這種情況并且提供了一種解決辦法:可以使用(正處于 試驗階段的)e4defrag 工具(隨后將介紹)轉換分配方式來利用 extent 功能。另一個新工具(尚不可用)將改變 inode 的大小,使它變為新的格式。
維護 ext4 文件系統
可以使用標準的 e2fsprogs 工具來維護 ext4 文件系統,例如使用 tune2fs 在創建文件系統之后調整選項,使用 fsck.ext4 執行文件系統檢查等等。這些程序在 ext4 與 ext3 之間沒有很大的差別。但是,如前面提到的一樣,ext4 包含一些能夠提升 fsck 性能的增強功能。
除了這些工具以外,有一個新工具特別值得注意:e4defrag。該程序能夠對已掛載的 ext4 文件系統進行磁盤碎片整理。這能夠提高性能,尤其是文件系統空間快要用完的時候。同時,這也有利于將 ext2/3 樣式的分配轉換為基于 extent 的 ext4 樣式的分配,因此能夠提高曾經作為 ext3 文件系統的文件系統的性能。不幸的是,e4defrag 還不是標準的 e2fsprogs 包的一部分,因此需要單獨下載。
【編輯推薦】