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