1. 程式人生 > >《Linux性能及調優指南》1.3 Linux文件系統

《Linux性能及調優指南》1.3 Linux文件系統

例如 之間 .so 特殊 follow htm -- 升級版本 版本

翻譯:飛哥 (http://hi.baidu.com/imlidapeng)

版權所有,尊重他人勞動成果,轉載時請註明作者和原始出處及本聲明。

原文名稱:《Linux Performance and Tuning Guidelines》

原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html

-------------------------------------------------------------------------------------------

1.3.1 虛擬文件系統
1.3.2 日誌記錄
1.3.3 Ext2
1.3.4 Ext3
1.3.5 ReiserFS
1.3.6 日誌文件系統
1.3.7 XFS

-------------------------------------------------------------------------------------------


?Linux作為開源操作系統其中最大的優勢就是支援多種文件系統。
?現代Linux內核幾乎支援計算機系統中所有文件系統,從基本的FAT到高性能文件系統如日誌文件系統【Journaling File System】(JFS)。
?由於Ext2、Ext3和ReiserFS為大多數Linux發行版的原生文件系統(ReiserFS只有使用在Novell SUSE Linux上才能獲得商業支持),
?所以我們只集中講解這些文件系統的相關特性,至於其它文件系統只會略作說明。

關於文件系統和硬盤子系統,參見4.6 “調優硬盤子系統”


?1.3.1 虛擬文件系統

虛擬文件系統(VFS)是一個位於用戶進程與各種Linux文件系統之間的抽象接口層,
?它提供用於訪問文件系統對象的通用對象模型(如i-node、文件對象、頁緩存、目錄條目等等)和方法,它對用戶進程隱藏了各種文件系統間的差異。
?用戶進程不需要知道使用的是哪個文件系統或不同的文件系統需要呼叫哪個系統調用。
?
?圖1-14闡明了VFS的概念。

技術分享圖片
圖1-14 VFS概念


?1.3.2 日誌記錄

在一個沒有日誌記錄的文件系統中,當文件系統執行一個寫操作時,首先內核會更改文件系統的元數據,然後才寫入實際的用戶數據。
?這樣的操作對於保持數據完整性會產生很高的風險。
?當寫操作正在更改文件系統元數據時系統突然崩潰,文件系統的一致性很可能遭到破壞。
?在下次重啟時,fsck需要通過檢查所有的元數據來修復一致性。
?但當系統的容量很大時,完成檢查需要很長的時間才能完成。在此過程中系統是不可以使用的。
?

一個有日誌記錄的文件系統是通過在數據寫入實際文件系統前先將變更的數據寫入日誌區【Journal Area】來解決這個問題。
?日誌區可以被放置於文件系統中也可被放置於文件系統之外。被寫入日誌區的數據被稱作日誌記錄【Journal Log】。
?它包含文件系統元數據的變化和實際的文件數據(如果支持)。
?

因為日誌記錄在寫入實際用戶數據到文件系統前需要寫入journal log,相對於沒有日誌記錄的文件系統這會導致性能上的開銷。
?維護數據的高一致性會犧牲多少的性能開銷,取決寫入用戶數據前有多少信息需要寫入硬盤。
?我們將在1.3.4“Ext3”中討論此課題。

技術分享圖片
圖1-15日誌記錄概念


?1.3.3 Ext2

Ext2是Ext3文件系統的前身,一個快速、簡單的文件系統。
?不像當今其它大多數文件系統一樣,它並沒有日誌功能。
?

圖1-16向我們展示了Ext2文件系統的數據結構。
?文件系統以引導扇區開始,緊接著是塊組【Block Group】。
?因i-node表和存儲用戶數據的數據塊【Data Block】可以位於磁碟片相鄰位置,這樣就可以減少尋道的時間,
?為了性能的提升整個文件系統被分為多個小塊組。
?
?一個塊組是由下面幾項組成:

Super block : 存儲文件系統信息。Super block必須位於每個塊組的頂部。
Block group descriptor:存儲塊組的相關信息。
Data block bitmaps: 用於管理未使用的數據塊。
i-node bitmaps: 用戶管理未使用的i-node。
i-node tables: 存儲i-node表。每個文件都有一個相應的i-node表,用來保存文件的元數據如:
? 文件模式、uid、gid、atime、ctime、mtime、dtime和數據塊的指針。
Data blocks: 存儲實際的用戶數據。

技術分享圖片
圖1-16 Ext2文件系統數據結構
?

為了要找到組成文件的數據塊,內核首先查找文件的i-node。
?當一個進程請求打開/var/log/messages時,內核解析文件路徑並查找/(根目錄)的目錄項,獲得其下的文件及目錄信息。
?下一步內核繼續查找/var的i-node並查看/var的目錄項,它也包含其下的文件及目錄信息。
?內核繼續使用同樣的方法直到找到所要文件的i-node。Linux內核使用文件對象緩存如目錄項緩存或i-node緩存,來加快查找相應i-node的速度。
?

當Linux內核找到文件的i-node後,它將嘗試訪問實際的用戶數據塊。
?正像我們所講述的,i-node保存有數據塊的指針。通過指針內核可以獲得數據塊。
?對於大文件,Ext2提供了直接/間接的數據塊參照。
?
?圖1-17描繪了其是怎樣運作的。

技術分享圖片
圖1-17 Ext2文件系統直接/間接的數據塊參照
?

不同的文件系統在文件系統結構和文件訪問操作上存在著不同的差異,這讓每個文件系統都各具特色。


?1.3.4 Ext3

當前Linux企業發行版中都支持第三擴展文件系統。
?它作為第二擴展文件系統的升級版本被廣泛使用。盡管它有著與Ext2文件系統相似的基本結構,
?但與Ext2最大的不同之處就是其擁有日誌記錄功能。
?
?此文件系統亮點包括:

? 可用性:Ext3始終保持寫入硬盤數據的一致性。當發生非正常關機(以外的電源故障或系統崩潰)時,服務器不需要花費時間去檢查數據的一致性,從而將系統恢復時間從幾小時縮短至幾秒鐘。

? 數據完整性:在mount命令時通過指定日誌記錄模式data=journal,所有數據包括文件數據及元數據都會被記錄日誌。

? 速度:通過指定日誌記錄模式data=writeback,你可以根據業務需要來決定選擇速度還是完整性。在一個同時發生寫操作非常頻繁的環境中這是非常重要的。

? 復雜度:將一個已存在的Ext2文件系統升級到Ext3文件系統是很簡單的,不需要重新格式化。
? 通過執行tune2fs命令並修改/etc/fstab文件,你就可以很容易將Ext2升級到Ext3文件系統。
? 此外Ext3文件系統可以被掛載為Ext2,但日誌記錄功能此時是不可用的。
? 有許多第三方的產品提供調整Ext3文件系統的功能,例如PartitionMagic可以修改Ext3的分區。


?日誌模式

Ext3支持3種日誌模式

? 日誌

此種模式提供了最高等級的數據一致性,文件數據和元數據都將被記錄日誌。它也會造成過多的性能開銷。

? 順序

在這種模式下只有元數據會被寫入,然而在此之前首先保證文件數據已被寫入。此模式為默認設定。

? 回寫

此種模式是在犧牲數據一致性的情況下提供訪問數據最快的速度。為保證數據的一致性,元數據任會被記錄。然而實際的文件數據並不會被特殊處理,這就導致當系統崩潰後舊數據的出現。


?1.3.5 ReiserFS

ReiserFS是一種快速的日誌文件系統,它可以優化硬盤空間的使用和加快故障恢復的速度。
?ReiserFS的開發很大程度上得益於Novell的支助。只有在Novell SUSE Linux上使用ReiserFS才可以得到商業支持。


?1.3.6 Journal File System

JFS是一個全64位文件系統,能支持大文件和分區。
?JFS起初是IBM為AIX所開發的,但現在已近可以在GPL下使用。
?JFS對於高性能計算(HPC)和數據庫環境中的大分區和文件是非常理想的文件系統。
?如果想了解更多,參見http://jfs.sourceforge.net
註釋:在Novel SUSE Linux Enterprise Server 10中,JFS不在被支持。


?1.3.7 XFS

eXtended File System(XFS)起初是Silicon Graphics公司為其IRIX系列系統開發的高性能日誌文件系統
?。其功能特性與來自IBM的JFS非常相似,也支持大文件和分區,因此使用情境與JFS也十分相似。

《Linux性能及調優指南》1.3 Linux文件系統