http://fanli7.net/a/JAVAbiancheng/ANT/20101003/43604.html
級別: 中級
Roderick W. Smith ,顧問和作家
2008 年6 月02 日
Ext4 是眾多Linux? 文件系統中的最新版本,它將像以前的版本一樣重要和流行。作為Linux 系統管理員,您應該知道遷移到ext4 的優缺點和基本步驟。本文將介紹何時應採用ext4、如何在ext4 中使用傳統的文件系統維護工具以及如何充分利用該文件系統。
Ext4的功能
Linux 支持幾個不同的文件系統。這些文件系統中,一些是專用的網絡文件系統或為其他操作系統開發的文件系統,但絕大部分還是用作Linux本地文件系統—您可以將Linux根( /
)和系統目錄放在這種文件系統裡。目前,這一類文件系統包括ext2、ext3、ReiserFS、XFS 和Journaled File System (JFS)。但是文件系統一直在不斷設計和開發中,新的文件系統也將陸續問世。
目前正在開發的最重要的Linux 文件系統是ext4 — 它是專門為Linux 開發的原始的擴展文件系統(ext 或extfs)的第四版。由於繼承了以前版本,ext4在不久的將來很可能會成為一個重要的Linux標准文件系統(可能是標准文件系統)。
Ext4與ext3的對比
擴展文件系統(ext 或extfs)第四版產生的原因是開發人員在ext3 中併入了新的高級功能。但在實現的過程出現了幾個問題:
由於這些原因,從2006 年6 月份開始,開發人員決定把ext4 從ext3 中分離出來進行獨立開發。 Ext4 的開發工作從那時起開始進行,但大部分Linux 用戶和管理員都不怎麼注意這件事情。隨著2.6.19 內核在2006 年11 月的發布,ext4 第一次出現在主流內核裡,但是它當時還處於試驗階段(現在還是),因此很多人都忽視了它。
由於還處於開發階段,從2.6.24.4 內核開始,ext4 的功能列表就一直在變動。 Ext4 的當前和預期功能包括從ext3 發展而來的功能,見表1。
表1. Ext4的當前功能和未來功能使它超越了ext3
功能 | 優勢 |
---|---|
更大的文件系統 | Ext3 最多只能容納32 TiB 的文件系統和2 TiB 的文件,根據使用的具體架構和系統設置,實際容量上限可能比這個數字還要低— 或許只能容納2 TiB 的文件系統和16 gibibyte(GiB )的文件。相反,Ext4的文件系統容量達到1024 pebibyte(PiB) ,或1 exbibyte(EiB),而文件容量則達到16 TiB。對一般的台式計算機和服務器而言,這可能並不重要,但對大磁盤陣列的用戶而言,這就非常重要了。 |
extent | extent 是一種提高磁盤文件描述符效率的方法,它能夠減少刪除大型文件所需的時間等等。 |
持久性預分配 | 如果一個應用程序需要在實際使用磁盤空間之前對它進行分配,大部分文件系統都是通過向未使用的磁盤空間寫入0 來實現分配。而ext4 允許提前分配,無需進行上述操作,這能提高某些數據庫和多媒體工具的性能。 |
延遲分配 | Ext4 能夠盡量延遲磁盤空間的分配,這能夠提高性能。 |
更多的子目錄 | 如果ext3 中一個目錄只能包含32,000 個子目錄還不能滿足您的需求,那麼不必擔心,因為ext4 取消了這一限制。 |
日誌checksum | Ext4 給日誌數據添加了檢查和(checksum)功能,這能提高可靠性和性能。 |
在線磁盤整理 | 雖然ext3 一般不會受到碎片的影響,但是存儲在它裡面的文件多少會產生一些碎片。 Ext4 支持在線磁盤整理,這能夠改善總體性能。 |
恢復刪除文件 | 雖然這一功能尚未實現,但ext4 將支持恢復刪除文件。當文件被意外刪除時,此功能將極為有用。 |
更快的文件系統檢查 | Ext4添加了新的數據結構,允許fsck 在檢查中跳過磁盤中未使用的部分,因此加快了文件系統的檢查。 |
納秒級時間戳 | 大部分的文件系統(包括ext3)都包含有精確到秒的時間戳數據,而ext4 把精確度提高到了納秒。一些資料還表明ext4 的時間戳支持的日期達到2514 年4 月25 日,而ext3 只達到2038 年1 月18 日。 |
由於ext4 目前還處於開發階段,這個功能表還會有所變動。功能列表的一些功能在實際使用中不具備與ext3 的向後兼容性— 即可能無法使用ext3 文件系統類型的代碼掛載ext4 文件系統。但是ext4 保留了向前兼容性— 您可以像掛載ext4 文件系統一樣掛載ext3 文件系統。
ext4的使用對象
Ext4 最為顯著的改進是文件和文件系統的大小。因此,最可能需要ext4 的用戶是那些磁盤空間大小為幾個TB 的用戶。然而表1 中的功能列表還展示了其他一些吸引人的改進。例如,如果您的目錄帶有大量子目錄,或者要求時間戳的精確度小於一秒,您可能希望嘗試使用ext4。
因為ext4 目前處於試驗階段,要使用它就必須重新編譯內核,否則,使用ext4 時將會出現麻煩。事實上,ext4 處於試驗階段意味著只有希望為ext4 的開發做貢獻,或者非常渴望它的某些功能,這些情況下才有必要使用它。如果想在穩定的ext4 發布之前獲得可靠的大磁盤支持,可以考慮使用XFS 或JFS。
當然,ext4 不可能永遠處於試驗階段。它不久將成為一個穩定的文件系統。屆時,ext4 將像ext3 一樣成為所有用戶的最佳選擇,但需要注意幾個問題。首先,ext4 還存在一些獨有的bug,因此當首次發行ext4 穩定版時要多加註意。其次,使用ext4 可能導致一些老版本的工具無法訪問磁盤。這將涉及到緊急恢復工具,因此在確定您使用的工具支持ext4 之前不要進行更新。好的一面是,應該可以從ext3 順利遷移到ext4,如果需要保存現有數據,這將實現輕鬆的轉移。
|
編譯和激活ext4支持
了解了這些內容,您大概想體驗一下ext4。但在體驗之前您必須重新編譯內核並添加必要的支持。我推薦使用最新的內核(撰寫本文時的最新版本為2.6.24.4)。先解壓縮內核源代碼並手動設置所有選項或複制舊版本內核的.config
文件,接著輸入make oldconfig
複製以前的設置,最後輸入首選配置命令(如make xconfig
)查看內核選項。您將在主File Systems區域看到ext4選項, Ext4dev/ext4 extended fs support development (EXPERIMENTAL) (該名稱將來很可能會改變,尤其是宣布ext4穩定以後)。注意,必須查看General區域的Prompt for development and/or incomplete code/drivers選項,在這裡也能夠看到ext4選項。
選擇ext4支持之後,保存對內核的修改,通過輸入make
編譯內核,並通過輸入make modules_install
把模塊安裝為root
。然後將已編譯的內核(在arch/i386/boot
或其他目錄下)複製到適當的位置(如/boot
),編輯GRand Unified Bootloader(GRUB)或Linux Loader(LILO)配置並重啟計算機。如果使用的是啟動RAM磁盤,在準備過程中還需用到實用程序mkinitrd
。
除了內核模塊之外,還要查看e2fsprogs
的一個版本,它支持ext4文件系統的功能。您可以下載一個壓縮文件( 參考資料一節提供了相關的鏈接)或使用git
,如清單1所示。
清單1.通過git
獲取最新版本的e2fsprogs
的命令
$ git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git $ cd e2fsprogs $ git checkout -b pu Switched to a new branch "pu" $ git branch master * pu $ git pull git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git pu |
注意,您有可能需要使用發行版的包管理器安裝git
。這些工具有待進一步測試,因此不推薦在生產系統中使用,並且就目前而言,並沒有添加很多特別針對ext4 的工具。因此,您可能更喜歡使用隨發行版一起交付的stock e2fsprogs
包。
e2fsprogs
的編譯過程非常標準:將cd
包解壓縮到生成的目錄,輸入./configure
,輸入make
,並輸入(作為root
) make install
。 這個過程將覆蓋發行版的常規e2fsprogs
包 ,因此,只有確定要使用這些工具的最新(也可能是不穩定的)版本時,才執行此操作。
|
把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
包的一部分,因此需要單獨下載( 參考資料小節提供了鏈接)。
參考資料
學習
獲得產品和技術
討論