第 4 個(gè)擴(kuò)展文件系統(tǒng),即 ext4,是下一代的日志文件系統(tǒng),它與上一代文件系統(tǒng) ext3 是向后兼容的。盡管 ext4 目前還不是標(biāo)準(zhǔn)文件系統(tǒng),但它將成為大部分下一代 Linux? 發(fā)行版的默認(rèn)文件系統(tǒng)。了解 ext4,以及它為什么將成為您最喜歡的新文件系統(tǒng)。
Linux 內(nèi)核的每次發(fā)行都伴隨一些驚喜,今年 12 月份發(fā)行的 2.6.28 也不例外。這個(gè)發(fā)行版是首個(gè)穩(wěn)定的 ext4 文件系統(tǒng)(它還包含其他出色的特性,比如正在開(kāi)發(fā)的 Btrfs)。這個(gè)下一代擴(kuò)展文件系統(tǒng)提供更好的伸縮性、可靠性和許多新功能。ext4 的伸縮性如此之大,以致的文件系統(tǒng)所用的磁盤(pán)空間將達(dá)到 100 萬(wàn) TB。
擴(kuò)展文件系統(tǒng)的簡(jiǎn)史
第一個(gè)受 Linux 支持的文件系統(tǒng)是 Minix 文件系統(tǒng)。這個(gè)文件系統(tǒng)有嚴(yán)重的性能問(wèn)題,因此出現(xiàn)了另一個(gè)針對(duì) Linux 的文件系統(tǒng),即擴(kuò)展文件系統(tǒng)。第 1 個(gè)擴(kuò)展文件系統(tǒng)(ext1)由 Remy Card 設(shè)計(jì),并于 1992 年 4 月引入到 Linux 中。ext1 文件系統(tǒng)是第一個(gè)使用虛擬文件系統(tǒng)(VFS)交換的文件系統(tǒng)。虛擬文件系統(tǒng)交換是在 0.96c 內(nèi)核中實(shí)現(xiàn)的,支持的文件系統(tǒng)為 2 GB。
第 2 個(gè)擴(kuò)展文件系統(tǒng)(ext2)也是由 Remy Card 實(shí)現(xiàn)的,并于 1993 年 1 月引入到 Linux 中。它借鑒了當(dāng)時(shí)文件系統(tǒng)(比如 Berkeley Fast File System [FFS])的先進(jìn)想法。ext2 支持的文件系統(tǒng)為 2TB,但是 2.6 內(nèi)核將該文件系統(tǒng)支持的容量提升到 32TB。
第 3 個(gè)擴(kuò)展文件系統(tǒng)(ext3)是 Linux 文件系統(tǒng)的重大改進(jìn),盡管它在性能方面遜色于某些競(jìng)爭(zhēng)對(duì)手。ext3 文件系統(tǒng)引入了日志 概念,以在系統(tǒng)突然停止時(shí)提高文件系統(tǒng)的可靠性。雖然某些文件系統(tǒng)的性能更好(比如 Silicon Graphics 的 XFS 和 IBM? Journaled File System [JFS]),但 ext3 支持從使用 ext2 的系統(tǒng)進(jìn)行就地(in-place)升級(jí)。ext3 由 Stephen Tweedie 實(shí)現(xiàn),并于 2001 年 11 月引入。
今天,我們已經(jīng)擁有第 4 個(gè)擴(kuò)展文件系統(tǒng)(ext4)。ext4 在性能、伸縮性和可靠性方面進(jìn)行了大量改進(jìn)。最值得一提的是,ext4 支持 1 EB 的文件系統(tǒng)。ext4 是由 Theodore Tso(ext3 的維護(hù)者)領(lǐng)導(dǎo)的開(kāi)發(fā)團(tuán)隊(duì)實(shí)現(xiàn)的,并引入到 2.6.19 內(nèi)核中。目前,它在 2.6.28 內(nèi)核中已經(jīng)很穩(wěn)定(到 2008 年 12 月為止)。
ext4 從競(jìng)爭(zhēng)對(duì)手那里借鑒了許多有用的概念。例如,在 JFS 中已經(jīng)實(shí)現(xiàn)了使用區(qū)段(extent)來(lái)管理塊。另一個(gè)與塊管理相關(guān)的特性(延遲分配)已經(jīng)在 XFS 和 Sun Microsystems 的 ZFS 中實(shí)現(xiàn)。
在 ext4 文件系統(tǒng)中,您可以發(fā)現(xiàn)各種改進(jìn)和創(chuàng)新。這些改進(jìn)包括新特性(新功能)、伸縮性(打破當(dāng)前文件系統(tǒng)的限制)和可靠性(應(yīng)對(duì)故障),當(dāng)然也包括性能的改善。
功能
ext4 引入了大量新功能,但最重要的是與 ext3 的向后和向前兼容性,以及在時(shí)間戳上的改進(jìn)。這些改進(jìn)立足于提高未來(lái)的 Linux 系統(tǒng)的性能。
向后和向前兼容性
由于 ext3 是 Linux 上歡迎的文件系統(tǒng)之一,因此應(yīng)該能夠輕松遷移到 ext4。為此,ext4 被設(shè)計(jì)為在 extent 方面具有向后和向前兼容性。ext4 與 ext3 是向前兼容的,這樣就可以將 ext3 文件系統(tǒng)掛載為 ext4 文件系統(tǒng)。為了充分利用 ext4 的優(yōu)勢(shì),必須實(shí)現(xiàn)文件系統(tǒng)的遷移,以轉(zhuǎn)換和利用新的 ext4 格式。您還可以將 ext4 掛載為 ext3(向后兼容),但前提是 ext4 文件系統(tǒng)不能使用區(qū)段(將在性能小節(jié)對(duì)其進(jìn)行討論)。
除了兼容性特性之外,您還可以逐步地將 ext3 文件系統(tǒng)遷移到 ext4。這意味著沒(méi)有移動(dòng)的舊文件可以保留 ext3 格式,但新的文件(或已被復(fù)制的舊文件)將采用新的 ext4 數(shù)據(jù)結(jié)構(gòu)。您可以通過(guò)這種方式在線將 ext3 文件系統(tǒng)遷移到 ext4 文件系統(tǒng)。
提高時(shí)間戳分辨率和擴(kuò)展范圍
令人驚訝的是,ext4 之前的擴(kuò)展文件系統(tǒng)的時(shí)間戳都是以秒為單位的。這已經(jīng)能夠應(yīng)付大多數(shù)設(shè)置,但隨著處理器的速度和集成程度(多核處理器)不斷提升,以及 Linux 開(kāi)始向其他應(yīng)用領(lǐng)域發(fā)展(比如高性能計(jì)算),基于秒的時(shí)間戳已經(jīng)不夠用。ext4 設(shè)計(jì)時(shí)間戳?xí)r考慮到未來(lái)的發(fā)展,它將時(shí)間戳的單位提升到納秒。ext4 給時(shí)間范圍添加了兩個(gè)位,從而讓時(shí)間壽命再延長(zhǎng) 500 年。
伸縮性
文件系統(tǒng)未來(lái)發(fā)展的一個(gè)重要方面就是伸縮性,即根據(jù)需求進(jìn)行伸縮的能力。ext4 以多種方式現(xiàn)實(shí)了強(qiáng)大的伸縮性,它的伸縮性超越了 ext3,并且在文件系統(tǒng)元數(shù)據(jù)管理方面開(kāi)辟了新領(lǐng)域。
突破文件系統(tǒng)的限制
ext4 的一個(gè)明顯差別就是它支持更大的文件系統(tǒng)、文件和子目錄。ext4 支持的文件系統(tǒng)為 1 EB(1000 PB)。雖然根據(jù)今天的標(biāo)準(zhǔn)這個(gè)文件系統(tǒng)已經(jīng)非常巨大,但存儲(chǔ)空間的消費(fèi)會(huì)不斷增長(zhǎng),因此 ext4 必須考慮到未來(lái)的發(fā)展。ext4 支持 16 TB 的文件(假設(shè)由 4KB 的塊組成),這個(gè)容量是 ext3 的 8 倍。
最后,ext4 也擴(kuò)展了子目錄的容量,將其從 32KB 擴(kuò)展到無(wú)窮大。這是極端情況,我們還需要考慮文件系統(tǒng)的層次結(jié)構(gòu),因?yàn)樗拇鎯?chǔ)容量為 1 EB。此外,目錄索引也優(yōu)化為類(lèi)似于散列 B 樹(shù)結(jié)構(gòu),因此盡管限制更加多,但 ext4 支持更快的查找。
區(qū)段
ext3 分配空間的方式是其主要缺點(diǎn)之一。ext3 使用空閑空間位映射來(lái)分配文件,這種方式不是很快,并且伸縮性不強(qiáng)。ext3 的格式對(duì)小文件而言是很高效的,但對(duì)于大文件則恰恰相反。ext4 使用區(qū)段取代 ext3 的機(jī)制,從而改善了空間的分配,并且支持更加高效的存儲(chǔ)結(jié)構(gòu)。區(qū)段是一種表示一組相鄰塊的方式。使用區(qū)段減少了元數(shù)據(jù),因?yàn)閰^(qū)段維護(hù)關(guān)于一組相鄰塊的存儲(chǔ)位置的信息(從而減少了總體元數(shù)據(jù)存儲(chǔ)),而不是一個(gè)塊的存儲(chǔ)位置的信息。
ext4 的區(qū)段采用分層的方法高效地表示小文件,并且使用區(qū)段樹(shù)高效地表示大文件。例如,單個(gè) ext4 inode 有足夠的空間來(lái)引用 4 個(gè)區(qū)段(每個(gè)區(qū)段表示一組相鄰的塊)。對(duì)于大文件(包括片段文件),一個(gè) inode 能夠引用一個(gè)索引節(jié)點(diǎn),而每個(gè)索引節(jié)點(diǎn)能夠引用一個(gè)葉節(jié)點(diǎn)(引用多個(gè)區(qū)段)。這種持續(xù)的區(qū)段樹(shù)為大文件(尤其是分散的文件)提供豐富的表示方式。這些節(jié)點(diǎn)還包含自主檢查機(jī)制,以阻止文件系統(tǒng)損壞帶來(lái)威脅。
性能
衡量一個(gè)新文件系統(tǒng)的最重要指標(biāo)就是它的根本性能。這常常是最難實(shí)現(xiàn)的指標(biāo),因?yàn)楫?dāng)文件系統(tǒng)變得龐大并且要求實(shí)現(xiàn)高可靠性時(shí),將會(huì)以損害性能為代價(jià)。但是,ext4 不僅解決了伸縮性和可靠性,它還提供各種改善性能的方法。
文件級(jí)預(yù)分配
某些應(yīng)用程序,比如數(shù)據(jù)庫(kù)或內(nèi)容流,要求將文件存儲(chǔ)在相鄰的塊上(利用相鄰塊的讀優(yōu)化和化讀的命令-塊比率)。盡管區(qū)段能夠?qū)⑾噜弶K劃分為片段,但另一種更強(qiáng)大的方法是按照所需的大小預(yù)分配比較大的相鄰塊(XFS 以前就是采用這種方法)。ext4 通過(guò)一個(gè)新的系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)這個(gè)目的,這個(gè)調(diào)用將按照特定的大小預(yù)分配并初始化文件。然后,您就可以寫(xiě)入必要的數(shù)據(jù),并為數(shù)據(jù)提供不錯(cuò)的讀性能。
延遲塊分配
另一個(gè)基于文件大小的優(yōu)化是延遲分配。這種性能優(yōu)化延遲磁盤(pán)上的物理塊的分配,直到塊被刷入到磁盤(pán)時(shí)才進(jìn)行分配。這種優(yōu)化的關(guān)鍵是延遲物理塊的分配,直到需要在磁盤(pán)上寫(xiě)這些物理塊時(shí)才對(duì)其進(jìn)行分配并寫(xiě)到相鄰的塊。這類(lèi)似于持久化預(yù)分配,惟一的區(qū)別是文件系統(tǒng)會(huì)自動(dòng)執(zhí)行這項(xiàng)任務(wù)。不過(guò)如果預(yù)先知道文件的大小時(shí),持久化預(yù)分配是更好的選擇。
多個(gè)塊分配
這是最后一個(gè)與相鄰塊相關(guān)的優(yōu)化,即針對(duì) ext4 的塊分配器。在 ext3 中,塊分配器的工作方式是每次分配一個(gè)塊。當(dāng)需要分配多個(gè)塊時(shí),非相鄰塊中可能存在相鄰的數(shù)據(jù)。ext4 使用塊分配器修復(fù)了這個(gè)問(wèn)題,它能夠在磁盤(pán)上一次分配多個(gè)塊。與前面其他優(yōu)化一樣,這個(gè)優(yōu)化在磁盤(pán)上收集相關(guān)的數(shù)據(jù),以實(shí)現(xiàn)相鄰讀優(yōu)化。
多個(gè)塊分配的另一個(gè)方面是分配塊時(shí)需要的處理量。記住,ext3 一次只分配一個(gè)塊。在最簡(jiǎn)單的情況下,每個(gè)塊的分配都要有一個(gè)調(diào)用。如果一次分配多個(gè)塊,對(duì)塊分配器的調(diào)用就會(huì)大大減少,從而加快分配并減少處理量。
可靠性
ext4 文件系統(tǒng)可能會(huì)擴(kuò)展得比較大,這將導(dǎo)致可靠性問(wèn)題。但 ext4 通過(guò)許多自主保護(hù)和自主修復(fù)機(jī)制來(lái)解決這個(gè)問(wèn)題。
執(zhí)行文件系統(tǒng)日志校驗(yàn)和
和 ext3 一樣,ext4 也是一個(gè)日志文件系統(tǒng)。日志記錄就是通過(guò)日記(磁盤(pán)上相鄰區(qū)域的專(zhuān)門(mén)循環(huán)記錄)記錄文件系統(tǒng)的變更的過(guò)程。因此,根據(jù)日志對(duì)物理存儲(chǔ)執(zhí)行實(shí)際變更更加可靠,并且能夠確保一致性,即使在操作期間出現(xiàn)系統(tǒng)崩潰或電源中斷。這樣做可以減少文件系統(tǒng)損壞的幾率。
但是即使進(jìn)行日志記錄,如果日志出現(xiàn)錯(cuò)誤仍然會(huì)導(dǎo)致文件系統(tǒng)損壞。為了解決這個(gè)問(wèn)題,ext4 對(duì)日志執(zhí)行校驗(yàn)和,確保有效變更能夠在底層文件系統(tǒng)上正確完成。在 參考資料 小節(jié)可以找到其他關(guān)于日志記錄(ext4 的重要部分)的資料。
ext4 支持根據(jù)用戶(hù)需求采用多種模式的日志記錄。例如,ext4 支持 Writeback 模式,它僅記錄元數(shù)據(jù);或 Ordered 模式,它記錄元數(shù)據(jù),但寫(xiě)為元數(shù)據(jù)的數(shù)據(jù)是從日志中寫(xiě)入的;或 Journal 模式(最可靠的模式),它同時(shí)記錄元數(shù)據(jù)和數(shù)據(jù)。注意,雖然 Journal 模式是確保文件系統(tǒng)一致的選擇,但它也是最慢的,因?yàn)樗袛?shù)據(jù)都要經(jīng)過(guò)日志。
在線磁盤(pán)碎片整理
盡管 ext4 添加一些特性來(lái)減少文件系統(tǒng)的碎片(比如將相鄰塊分配為區(qū)段),但隨著系統(tǒng)使用時(shí)間的增加,碎片是難以完全避免的。因此出現(xiàn)了在線碎片整理工具,它們可以對(duì)文件系統(tǒng)和單個(gè)文件執(zhí)行碎片整理,從而改善性能。在線碎片整理程序是一個(gè)簡(jiǎn)單的工具,它將文件復(fù)制到引用相鄰區(qū)段的新 ext4 inode。
在線碎片整理還可以減少檢查文件系統(tǒng)所需的時(shí)間(fsck)。ext4 將未使用的塊組標(biāo)記到 inode 表中,并讓 fsck 進(jìn)程忽略它們以加快檢查速度。當(dāng)操作系統(tǒng)因內(nèi)部損壞(隨著文件系統(tǒng)變大,這是不可避免的)而檢查文件系統(tǒng)時(shí),ext4 的設(shè)計(jì)方式將能夠提高總體可靠性。
結(jié)束語(yǔ)
針對(duì) Linux 的擴(kuò)展文件系統(tǒng)有著漫長(zhǎng)而豐富的歷史 — 從 1992 年首次引入 ext1 到 2008 年引入 ext4。ext4 是首個(gè)專(zhuān)門(mén)為 Linux 設(shè)計(jì)的文件系統(tǒng),并且事實(shí)證明它是高效、穩(wěn)定、強(qiáng)大的文件系統(tǒng)。ext4 隨著文件系統(tǒng)研究的深入而不斷發(fā)展,并且借鑒其他新文件系統(tǒng)的先進(jìn)思想(比如 XFS、JFS、Reiser 和 IRON 容錯(cuò)文件系統(tǒng)技術(shù))。盡管目前預(yù)測(cè) ext5 將會(huì)是什么樣子還為時(shí)過(guò)早,但有一點(diǎn)是很明確的,它將主導(dǎo)企業(yè)級(jí) Liunx 系統(tǒng)
Linux 內(nèi)核的每次發(fā)行都伴隨一些驚喜,今年 12 月份發(fā)行的 2.6.28 也不例外。這個(gè)發(fā)行版是首個(gè)穩(wěn)定的 ext4 文件系統(tǒng)(它還包含其他出色的特性,比如正在開(kāi)發(fā)的 Btrfs)。這個(gè)下一代擴(kuò)展文件系統(tǒng)提供更好的伸縮性、可靠性和許多新功能。ext4 的伸縮性如此之大,以致的文件系統(tǒng)所用的磁盤(pán)空間將達(dá)到 100 萬(wàn) TB。
擴(kuò)展文件系統(tǒng)的簡(jiǎn)史
第一個(gè)受 Linux 支持的文件系統(tǒng)是 Minix 文件系統(tǒng)。這個(gè)文件系統(tǒng)有嚴(yán)重的性能問(wèn)題,因此出現(xiàn)了另一個(gè)針對(duì) Linux 的文件系統(tǒng),即擴(kuò)展文件系統(tǒng)。第 1 個(gè)擴(kuò)展文件系統(tǒng)(ext1)由 Remy Card 設(shè)計(jì),并于 1992 年 4 月引入到 Linux 中。ext1 文件系統(tǒng)是第一個(gè)使用虛擬文件系統(tǒng)(VFS)交換的文件系統(tǒng)。虛擬文件系統(tǒng)交換是在 0.96c 內(nèi)核中實(shí)現(xiàn)的,支持的文件系統(tǒng)為 2 GB。
第 2 個(gè)擴(kuò)展文件系統(tǒng)(ext2)也是由 Remy Card 實(shí)現(xiàn)的,并于 1993 年 1 月引入到 Linux 中。它借鑒了當(dāng)時(shí)文件系統(tǒng)(比如 Berkeley Fast File System [FFS])的先進(jìn)想法。ext2 支持的文件系統(tǒng)為 2TB,但是 2.6 內(nèi)核將該文件系統(tǒng)支持的容量提升到 32TB。
第 3 個(gè)擴(kuò)展文件系統(tǒng)(ext3)是 Linux 文件系統(tǒng)的重大改進(jìn),盡管它在性能方面遜色于某些競(jìng)爭(zhēng)對(duì)手。ext3 文件系統(tǒng)引入了日志 概念,以在系統(tǒng)突然停止時(shí)提高文件系統(tǒng)的可靠性。雖然某些文件系統(tǒng)的性能更好(比如 Silicon Graphics 的 XFS 和 IBM? Journaled File System [JFS]),但 ext3 支持從使用 ext2 的系統(tǒng)進(jìn)行就地(in-place)升級(jí)。ext3 由 Stephen Tweedie 實(shí)現(xiàn),并于 2001 年 11 月引入。
今天,我們已經(jīng)擁有第 4 個(gè)擴(kuò)展文件系統(tǒng)(ext4)。ext4 在性能、伸縮性和可靠性方面進(jìn)行了大量改進(jìn)。最值得一提的是,ext4 支持 1 EB 的文件系統(tǒng)。ext4 是由 Theodore Tso(ext3 的維護(hù)者)領(lǐng)導(dǎo)的開(kāi)發(fā)團(tuán)隊(duì)實(shí)現(xiàn)的,并引入到 2.6.19 內(nèi)核中。目前,它在 2.6.28 內(nèi)核中已經(jīng)很穩(wěn)定(到 2008 年 12 月為止)。
ext4 從競(jìng)爭(zhēng)對(duì)手那里借鑒了許多有用的概念。例如,在 JFS 中已經(jīng)實(shí)現(xiàn)了使用區(qū)段(extent)來(lái)管理塊。另一個(gè)與塊管理相關(guān)的特性(延遲分配)已經(jīng)在 XFS 和 Sun Microsystems 的 ZFS 中實(shí)現(xiàn)。
在 ext4 文件系統(tǒng)中,您可以發(fā)現(xiàn)各種改進(jìn)和創(chuàng)新。這些改進(jìn)包括新特性(新功能)、伸縮性(打破當(dāng)前文件系統(tǒng)的限制)和可靠性(應(yīng)對(duì)故障),當(dāng)然也包括性能的改善。
功能
ext4 引入了大量新功能,但最重要的是與 ext3 的向后和向前兼容性,以及在時(shí)間戳上的改進(jìn)。這些改進(jìn)立足于提高未來(lái)的 Linux 系統(tǒng)的性能。
向后和向前兼容性
由于 ext3 是 Linux 上歡迎的文件系統(tǒng)之一,因此應(yīng)該能夠輕松遷移到 ext4。為此,ext4 被設(shè)計(jì)為在 extent 方面具有向后和向前兼容性。ext4 與 ext3 是向前兼容的,這樣就可以將 ext3 文件系統(tǒng)掛載為 ext4 文件系統(tǒng)。為了充分利用 ext4 的優(yōu)勢(shì),必須實(shí)現(xiàn)文件系統(tǒng)的遷移,以轉(zhuǎn)換和利用新的 ext4 格式。您還可以將 ext4 掛載為 ext3(向后兼容),但前提是 ext4 文件系統(tǒng)不能使用區(qū)段(將在性能小節(jié)對(duì)其進(jìn)行討論)。
除了兼容性特性之外,您還可以逐步地將 ext3 文件系統(tǒng)遷移到 ext4。這意味著沒(méi)有移動(dòng)的舊文件可以保留 ext3 格式,但新的文件(或已被復(fù)制的舊文件)將采用新的 ext4 數(shù)據(jù)結(jié)構(gòu)。您可以通過(guò)這種方式在線將 ext3 文件系統(tǒng)遷移到 ext4 文件系統(tǒng)。
提高時(shí)間戳分辨率和擴(kuò)展范圍
令人驚訝的是,ext4 之前的擴(kuò)展文件系統(tǒng)的時(shí)間戳都是以秒為單位的。這已經(jīng)能夠應(yīng)付大多數(shù)設(shè)置,但隨著處理器的速度和集成程度(多核處理器)不斷提升,以及 Linux 開(kāi)始向其他應(yīng)用領(lǐng)域發(fā)展(比如高性能計(jì)算),基于秒的時(shí)間戳已經(jīng)不夠用。ext4 設(shè)計(jì)時(shí)間戳?xí)r考慮到未來(lái)的發(fā)展,它將時(shí)間戳的單位提升到納秒。ext4 給時(shí)間范圍添加了兩個(gè)位,從而讓時(shí)間壽命再延長(zhǎng) 500 年。
伸縮性
文件系統(tǒng)未來(lái)發(fā)展的一個(gè)重要方面就是伸縮性,即根據(jù)需求進(jìn)行伸縮的能力。ext4 以多種方式現(xiàn)實(shí)了強(qiáng)大的伸縮性,它的伸縮性超越了 ext3,并且在文件系統(tǒng)元數(shù)據(jù)管理方面開(kāi)辟了新領(lǐng)域。
突破文件系統(tǒng)的限制
ext4 的一個(gè)明顯差別就是它支持更大的文件系統(tǒng)、文件和子目錄。ext4 支持的文件系統(tǒng)為 1 EB(1000 PB)。雖然根據(jù)今天的標(biāo)準(zhǔn)這個(gè)文件系統(tǒng)已經(jīng)非常巨大,但存儲(chǔ)空間的消費(fèi)會(huì)不斷增長(zhǎng),因此 ext4 必須考慮到未來(lái)的發(fā)展。ext4 支持 16 TB 的文件(假設(shè)由 4KB 的塊組成),這個(gè)容量是 ext3 的 8 倍。
最后,ext4 也擴(kuò)展了子目錄的容量,將其從 32KB 擴(kuò)展到無(wú)窮大。這是極端情況,我們還需要考慮文件系統(tǒng)的層次結(jié)構(gòu),因?yàn)樗拇鎯?chǔ)容量為 1 EB。此外,目錄索引也優(yōu)化為類(lèi)似于散列 B 樹(shù)結(jié)構(gòu),因此盡管限制更加多,但 ext4 支持更快的查找。
區(qū)段
ext3 分配空間的方式是其主要缺點(diǎn)之一。ext3 使用空閑空間位映射來(lái)分配文件,這種方式不是很快,并且伸縮性不強(qiáng)。ext3 的格式對(duì)小文件而言是很高效的,但對(duì)于大文件則恰恰相反。ext4 使用區(qū)段取代 ext3 的機(jī)制,從而改善了空間的分配,并且支持更加高效的存儲(chǔ)結(jié)構(gòu)。區(qū)段是一種表示一組相鄰塊的方式。使用區(qū)段減少了元數(shù)據(jù),因?yàn)閰^(qū)段維護(hù)關(guān)于一組相鄰塊的存儲(chǔ)位置的信息(從而減少了總體元數(shù)據(jù)存儲(chǔ)),而不是一個(gè)塊的存儲(chǔ)位置的信息。
ext4 的區(qū)段采用分層的方法高效地表示小文件,并且使用區(qū)段樹(shù)高效地表示大文件。例如,單個(gè) ext4 inode 有足夠的空間來(lái)引用 4 個(gè)區(qū)段(每個(gè)區(qū)段表示一組相鄰的塊)。對(duì)于大文件(包括片段文件),一個(gè) inode 能夠引用一個(gè)索引節(jié)點(diǎn),而每個(gè)索引節(jié)點(diǎn)能夠引用一個(gè)葉節(jié)點(diǎn)(引用多個(gè)區(qū)段)。這種持續(xù)的區(qū)段樹(shù)為大文件(尤其是分散的文件)提供豐富的表示方式。這些節(jié)點(diǎn)還包含自主檢查機(jī)制,以阻止文件系統(tǒng)損壞帶來(lái)威脅。
性能
衡量一個(gè)新文件系統(tǒng)的最重要指標(biāo)就是它的根本性能。這常常是最難實(shí)現(xiàn)的指標(biāo),因?yàn)楫?dāng)文件系統(tǒng)變得龐大并且要求實(shí)現(xiàn)高可靠性時(shí),將會(huì)以損害性能為代價(jià)。但是,ext4 不僅解決了伸縮性和可靠性,它還提供各種改善性能的方法。
文件級(jí)預(yù)分配
某些應(yīng)用程序,比如數(shù)據(jù)庫(kù)或內(nèi)容流,要求將文件存儲(chǔ)在相鄰的塊上(利用相鄰塊的讀優(yōu)化和化讀的命令-塊比率)。盡管區(qū)段能夠?qū)⑾噜弶K劃分為片段,但另一種更強(qiáng)大的方法是按照所需的大小預(yù)分配比較大的相鄰塊(XFS 以前就是采用這種方法)。ext4 通過(guò)一個(gè)新的系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)這個(gè)目的,這個(gè)調(diào)用將按照特定的大小預(yù)分配并初始化文件。然后,您就可以寫(xiě)入必要的數(shù)據(jù),并為數(shù)據(jù)提供不錯(cuò)的讀性能。
延遲塊分配
另一個(gè)基于文件大小的優(yōu)化是延遲分配。這種性能優(yōu)化延遲磁盤(pán)上的物理塊的分配,直到塊被刷入到磁盤(pán)時(shí)才進(jìn)行分配。這種優(yōu)化的關(guān)鍵是延遲物理塊的分配,直到需要在磁盤(pán)上寫(xiě)這些物理塊時(shí)才對(duì)其進(jìn)行分配并寫(xiě)到相鄰的塊。這類(lèi)似于持久化預(yù)分配,惟一的區(qū)別是文件系統(tǒng)會(huì)自動(dòng)執(zhí)行這項(xiàng)任務(wù)。不過(guò)如果預(yù)先知道文件的大小時(shí),持久化預(yù)分配是更好的選擇。
多個(gè)塊分配
這是最后一個(gè)與相鄰塊相關(guān)的優(yōu)化,即針對(duì) ext4 的塊分配器。在 ext3 中,塊分配器的工作方式是每次分配一個(gè)塊。當(dāng)需要分配多個(gè)塊時(shí),非相鄰塊中可能存在相鄰的數(shù)據(jù)。ext4 使用塊分配器修復(fù)了這個(gè)問(wèn)題,它能夠在磁盤(pán)上一次分配多個(gè)塊。與前面其他優(yōu)化一樣,這個(gè)優(yōu)化在磁盤(pán)上收集相關(guān)的數(shù)據(jù),以實(shí)現(xiàn)相鄰讀優(yōu)化。
多個(gè)塊分配的另一個(gè)方面是分配塊時(shí)需要的處理量。記住,ext3 一次只分配一個(gè)塊。在最簡(jiǎn)單的情況下,每個(gè)塊的分配都要有一個(gè)調(diào)用。如果一次分配多個(gè)塊,對(duì)塊分配器的調(diào)用就會(huì)大大減少,從而加快分配并減少處理量。
可靠性
ext4 文件系統(tǒng)可能會(huì)擴(kuò)展得比較大,這將導(dǎo)致可靠性問(wèn)題。但 ext4 通過(guò)許多自主保護(hù)和自主修復(fù)機(jī)制來(lái)解決這個(gè)問(wèn)題。
執(zhí)行文件系統(tǒng)日志校驗(yàn)和
和 ext3 一樣,ext4 也是一個(gè)日志文件系統(tǒng)。日志記錄就是通過(guò)日記(磁盤(pán)上相鄰區(qū)域的專(zhuān)門(mén)循環(huán)記錄)記錄文件系統(tǒng)的變更的過(guò)程。因此,根據(jù)日志對(duì)物理存儲(chǔ)執(zhí)行實(shí)際變更更加可靠,并且能夠確保一致性,即使在操作期間出現(xiàn)系統(tǒng)崩潰或電源中斷。這樣做可以減少文件系統(tǒng)損壞的幾率。
但是即使進(jìn)行日志記錄,如果日志出現(xiàn)錯(cuò)誤仍然會(huì)導(dǎo)致文件系統(tǒng)損壞。為了解決這個(gè)問(wèn)題,ext4 對(duì)日志執(zhí)行校驗(yàn)和,確保有效變更能夠在底層文件系統(tǒng)上正確完成。在 參考資料 小節(jié)可以找到其他關(guān)于日志記錄(ext4 的重要部分)的資料。
ext4 支持根據(jù)用戶(hù)需求采用多種模式的日志記錄。例如,ext4 支持 Writeback 模式,它僅記錄元數(shù)據(jù);或 Ordered 模式,它記錄元數(shù)據(jù),但寫(xiě)為元數(shù)據(jù)的數(shù)據(jù)是從日志中寫(xiě)入的;或 Journal 模式(最可靠的模式),它同時(shí)記錄元數(shù)據(jù)和數(shù)據(jù)。注意,雖然 Journal 模式是確保文件系統(tǒng)一致的選擇,但它也是最慢的,因?yàn)樗袛?shù)據(jù)都要經(jīng)過(guò)日志。
在線磁盤(pán)碎片整理
盡管 ext4 添加一些特性來(lái)減少文件系統(tǒng)的碎片(比如將相鄰塊分配為區(qū)段),但隨著系統(tǒng)使用時(shí)間的增加,碎片是難以完全避免的。因此出現(xiàn)了在線碎片整理工具,它們可以對(duì)文件系統(tǒng)和單個(gè)文件執(zhí)行碎片整理,從而改善性能。在線碎片整理程序是一個(gè)簡(jiǎn)單的工具,它將文件復(fù)制到引用相鄰區(qū)段的新 ext4 inode。
在線碎片整理還可以減少檢查文件系統(tǒng)所需的時(shí)間(fsck)。ext4 將未使用的塊組標(biāo)記到 inode 表中,并讓 fsck 進(jìn)程忽略它們以加快檢查速度。當(dāng)操作系統(tǒng)因內(nèi)部損壞(隨著文件系統(tǒng)變大,這是不可避免的)而檢查文件系統(tǒng)時(shí),ext4 的設(shè)計(jì)方式將能夠提高總體可靠性。
結(jié)束語(yǔ)
針對(duì) Linux 的擴(kuò)展文件系統(tǒng)有著漫長(zhǎng)而豐富的歷史 — 從 1992 年首次引入 ext1 到 2008 年引入 ext4。ext4 是首個(gè)專(zhuān)門(mén)為 Linux 設(shè)計(jì)的文件系統(tǒng),并且事實(shí)證明它是高效、穩(wěn)定、強(qiáng)大的文件系統(tǒng)。ext4 隨著文件系統(tǒng)研究的深入而不斷發(fā)展,并且借鑒其他新文件系統(tǒng)的先進(jìn)思想(比如 XFS、JFS、Reiser 和 IRON 容錯(cuò)文件系統(tǒng)技術(shù))。盡管目前預(yù)測(cè) ext5 將會(huì)是什么樣子還為時(shí)過(guò)早,但有一點(diǎn)是很明確的,它將主導(dǎo)企業(yè)級(jí) Liunx 系統(tǒng)

