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