文件系統指文件存在的物理空間。在Linux系統中,每個分區都是一個文件系統,都有自己的目錄層次結構。Linux的最重要特征之一就是支持多種文件系統,這樣它更加靈活,并可以和許多其它種操作系統共存。Virtual File System(虛擬文件系統)使得Linux可以支持多個不同的文件系統。由于系統已將Linux文件系統的所有細節進行了轉換,所以Linux核心的其它部分及系統中運行的程序將看到統一的文件系統。Linux的虛擬文件系統允許用戶同時能透明地安裝許多不同的文件系統。虛擬文件系統是為Linux用戶提供快速且高效的文件訪問服務而設計的。
隨著Linux的不斷發展,它所支持的文件格式系統也在迅速擴充。特別是Linux 2.4內核正式推出后,出現了大量新的文件系統,其中包括日志文件系統ext3、ReiserFS、XFSJFS和其它文件系統。Linux系統核心可以支持十多種文件系統類型:JFS、 ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
下面介紹Linux下幾個最常用的文件系統,其中包括ext、ext2、ext3、JFS、XFS、ReiserFS等。
ext
ext是第一個專門為開發的Linux的文件系統類型,叫做擴展文件系統。它是1992年4月完成的,對Linux早期的發展產生了重要作用。但是,由于其在穩定性、速度和兼容性上存在許多缺陷,現在已經很少使用了。
ext2
ext2是為解決ext文件系統的缺陷而設計的可擴展的、高性能的文件系統,它又被稱為二級擴展文件系統。ext2是1993年發布的,設計者是Rey Card。它是Linux文件系統類型中使用最多的格式,并且在速度和CPU利用率上較為突出,是GNU/Linux系統中標準的文件系統。它存取文件的性能極好,對于中、小型的文件更顯示出優勢,這主要得益于其簇快取層的優良設計。ext2可以支持256字節的長文件名,其單一文件大小和文件系統本身的容量上限與文件系統本身的簇大小有關。在常見的Intel x86兼容處理器的系統中,簇最大為4KB,單一文件大小上限為2048GB, 而文件系統的容量上限為6384GB。盡管Linux可以支持種類繁多的文件系統,但是2000年以前幾乎所有的Linux發行版都使用ext2作為默認的文件系統。
ext2也有一些問題。由于它的設計者主要考慮的是文件系統性能方面的問題,而在寫入文件內容的同時,并沒有寫入文件的meta-data(和文件有關的信息,例如權限、所有者及創建和訪問時間)。換句話說,Linux先寫入文件的內容,然后等到有空的時候才寫入文件的meta-data。如果出現寫入文件內容之后,但在寫入文件的meta-data之前系統突然斷電,就可能造成文件系統就會處于不一致的狀態。在一個有大量文件操作的系統中,出現這種情況會導致很嚴重的后果。另外,由于目前Linux的 2.4內核所能使用的單一分割區最大只有2048GB,盡管文件系統的容量上限為6384G,但是實際上能使用的文件系統容量最多也只有2048GB。
ext3
在講解ext3、JFS、XFS、ReiserFS日志格式文件系統之前,先介紹一些日志式文件系統基礎。
日志式文件系統起源于Oracle、Sybase等大型數據庫。由于數據庫操作往往是由多個相關的、相互依賴的子操作組成,任何一個子操作的失敗都意味著整個操作的無效性,對數據庫數據的任何修改都要恢復到操作以前的狀態。Linux日志式文件系統就是由此發展而來的。日志文件系統通過增加一個叫做日志的、新的數據結構來解決這個“fsck”問題。這個日志是位于磁盤上的結構。在對元數據做任何改變以前,文件系統驅動程序會向日志中寫入一個條目,這個條目描述了它將要做些什么,所以日志文件具有可伸縮性和健壯性。在分區中保存日志記錄文件好處是:文件系統寫操作首先是對記錄文件進行操作,若整個寫操作由于某種原因(如系統掉電)而中斷,則在下次系統啟動時就會讀日志記錄文件的內容,恢復到沒有完成的寫操作,這個過程一般只需要兩三分鐘時間。
ext3是由開放資源社區開發的日志文件系統,早期主要開發人員是Stephen Tweedie。ext3被設計成是ext2的升級版本,盡可能方便用戶從ext2向ext3遷移。ext3在ext2的基礎上加入了記錄元數據的日志功能,努力保持向前和向后的兼容性,也就是在保有目前ext2的格式之下再加上日志功能。和ext2相比,ext3提供了更佳的安全性,這就是數據日志和元數據日志之間的不同。ext3是一種日志式文件系統,日志式文件系統的優越性在于由于文件系統都有快取層參與運作,如不使用時必須將文件系統卸下,以便將快取層的資料寫回磁盤中。因此,每當系統要關機時,必須將其所有的文件系統全部卸下后才能進行關機。如果在文件系統尚未卸下前就關機 (如停電),那么重開機后就會造成文件系統的資料不一致,故這時必須做文件系統的重整工作,將不一致與錯誤的地方修復。然而,這個過程是相當耗時的,特別是容量大的文件系統不能百分之百保證所有的資料都不會流失,特別在大型的服務器上可能會出現問題。除了與ext2兼容之外,ext3還通過共享ext2的元數據格式繼承了ext2的其它優點。比如,ext3用戶可以使用一個穩固的fsck工具。由于ext3基于ext2的代碼,所以它的磁盤格式和ext2的相同,這意味著一個干凈卸裝的ext3文件系統可以作為ext2文件系統毫無問題地重新掛裝。如果現在使用的是ext2文件系統,并且對數據安全性要求很高,這里建議考慮升級使用ext3。
ext3最大的缺點是,它沒有現代文件系統所具有的、能提高文件數據處理速度和解壓的高性能。此外,使用ext3文件系統要注意硬盤限額問題,在這個問題解決之前,不推薦在重要的企業應用上采用ext3+Disk Quota(磁盤配額)。
JFS
JFS是一種提供日志的字節級文件系統。該文件系統主要是為滿足服務器(從單處理器系統到高級多處理器和群集系統)的高吞吐量和可靠性需求而設計、開發的。JFS文件系統是為面向事務的高性能系統而開發的。在IBM的AIX系統上,JFS已經過較長時間的測試,結果表明它是可靠、快速和容易使用的。2000年2月,IBM宣布在一個開放資源許可證下移植Linux版本的JFS文件系統。JFS也是一個有大量用戶安裝使用的企業級文件系統,具有可伸縮性和健壯性。與非日志文件系統相比,它的突出優點是快速重啟能力,JFS能夠在幾秒或幾分鐘內就把文件系統恢復到一致狀態。雖然JFS主要是為滿足服務器(從單處理器系統到高級多處理器和群集系統)的高吞吐量和可靠性需求而設計的,但還可以用于想得到高性能和可靠性的客戶機配置,因為在系統崩潰時JFS能提供快速文件系統重啟時間,所以它是因特網文件服務器的關鍵技術。使用數據庫日志處理技術,JFS能在幾秒或幾分鐘之內把文件系統恢復到一致狀態。而在非日志文件系統中,文件恢復可能花費幾小時或幾天。
JFS的缺點是,使用JFS日志文件系統性能上會有一定損失,系統資源占用的比率也偏高,因為當它保存一個日志時,系統需要寫許多數據。
ReiserFS
ReiserFS的第一次公開亮相是在1997年7月23日,Hans Reiser把他的基于平衡樹結構的ReiserFS文件系統在網上公布。ReiserFS 3.6.x(作為Linux 2.4一部分的版本)是由Hans Reiser和他的Namesys開發組共同開發設計的。SuSE Linux也對它的發展起了重大的幫助。Hans和他的組員們相信最好的文件系統是能夠有助于創建獨立的共享環境或命名空間的文件系統,應用程序可以在其中更直接、有效和有力地相互作用。為了實現這一目標,文件系統就應該滿足使用者對性能和功能方面的需要。那樣使用者就能夠繼續直接地使用文件系統,而不必建造運行在文件系統之上(如數據庫之類)的特殊目的層。ReiserFS 使用了特殊的、優化的平衡樹(每個文件系統一個)來組織所有的文件系統數據,這為其自身提供了非常不錯的性能改進,也能夠減輕文件系統設計上的人為約束。另一個使用平衡樹的好處就是,ReiserFS 能夠像其它大多數的下一代文件系統一樣,根據需要動態地分配索引節,而不必在文件系統創建時建立固定的索引節。這有助于文件系統更靈活地適應面臨的各種存儲需要,同時提供附加的空間有效率。
ReiserFS被看作是一個更加激進和現代的文件系統。傳統的Unix文件系統是按磁盤塊來進行空間分配的,對于目錄和文件等的查找使用了簡單的線性查找。這些設計在當時是合適的,但隨著磁盤容量的增大和應用需求的增加,傳統文件系統在存儲效率、速度和功能上已顯得落后。在ReiserFS的下一個版本—Reiser 4,將提供了對事務的支持。ReiserFS突出的地方還在于其設計上著眼于實現一些未來的插件程序,這些插件程序可以提供訪問控制列表、超級鏈接,以及一些其它非常不錯的功能。在http://www.namesys.com/v4/v4.html中,有Reiser 4的介紹和性能測試。
ReiserFS一個最受批評的缺點是,每升級一個版本都將要將磁盤重新格式化一次,而且它的安全性能和穩定性與ext3相比有一定的差距。因為ReiserFS文件系統還不能正確處理超長的文件目錄,如果創建一個超過768字符的文件目錄,并使用ls或其它echo命令,將有可能導致系統掛起。在http://www.namesys.com/ 網站可以了解關于ReiserFS的更多信息。
XFS
XFS是一種非常優秀的日志文件系統,它是由SGI于20世紀90年代初開發的。XFS推出后被業界稱為先進的、最具可升級性的文件系統技術。它是一個全64位、快速、穩固的日志文件系統,多年用于SGI的IRIX操作系統。當SGI決定支持Linux社區時,它將關鍵的基本架構技術授權于Linux,以開放資源形式發布了他們自己擁有的XFS的源代碼,并開始進行移植。此項工作進展得很快,目前已進入beta版階段。作為一個64位文件系統,XFS可以支持超大數量的文件(9000×1GB),可在大型2D和3D數據方面提供顯著的性能。XFS有能力預測其它文件系統薄弱環節,同時提供了在不妨礙性能的情況下增強可靠性和快速的事故恢復。
XFS可為Linux和開放資源社區帶來如下新特性:
◆可升級性 XFS被設計成可升級,以面對大多數的存儲容量和I/O存儲需求;可處理大型文件和包含巨大數量文件的大型目錄,以滿足21世紀快速增長的磁盤需求。XFS有能力動態地為文件分配索引空間,使系統形成高效支持大數量文件的能力。在它的支持下,用戶可使用的文件遠遠大于現在最大的文件系統。
◆優秀的I/O 性能 典型的現代服務器使用大型的條帶式磁盤陣列,以提供達數GB/秒的總帶寬。XFS可以很好地滿足I/O請求的大小和并發I/O請求的數量。XFS可作為root文件系統,并被LILO支持,也可以在NFS服務器上使用,并支持軟件磁盤陣列(RAID)和邏輯卷管理器(Logical Volume Manager,LVM)。SGI最新發布的XFS為1.0.1版,在http://oss.sgi.com/projects/XFS/ 可以下載它。
由于XFS比較復雜,實施起來有一些難度(包括人員培訓等),所以目前XFS主要應用于Linux企業應用的高端。
其它文件系統
上面介紹了六種主要文件系統,下面簡單介紹一些其它文件系統。
◆Minix 是Linux支持的第一個文件系統,對用戶有很多限制,性能低下,有些沒有時間標記,文件名最長l4個字符。Minix文件系統最大缺點是只能使用64MB的硬盤分區,所以目前已經沒有人使用它了。
◆Xia 是Minix文件系統修正后的版本,在一定程度上解決了文件名和文件系統大小的局限。但是沒有新的特色,目前很少有人使用。
◆ISO9660 標準CDROM文件系統,通用的Rock Ridge增強系統,允許長文件名。
◆NFS Sun公司推出的網絡文件系統,允許多臺計算機之間共享同一文件系統,易于從所有這些計算機上存取文件。
◆SysV 是System V/Coherent在Linux平臺上的文件系統。
除了上面這些Linux文件系統外,Linux也可以支持基于Windows和Netware的文件系統,例如UMSDOS、MSDOS、VFAT、HPFS、SMB和NCPFS等。兼容這些文件系統對Linux用戶也是很重要的,畢竟在桌面環境下Windows文件系統還是很流行的,而Netware網絡也有許多用戶,Linux用戶也需要共享這些文件系統的數據。
◆UMSDOS Linux下的擴展MSDOS文件系統驅動,支持長文件名、所有者、允許權限、連接和設備文件。允許一個普通的MSDOS文件系統用于Linux,而且無須為它建立單獨的分區。
◆MSDOS 是在DOS、Windows和某些OS/2操作系統上使用的一種文件系統,其名稱采用“8+3”的形式,即8個字符的文件名加上3個字符的擴展名。
◆VFAT 是Windows 9x和Windows NT/2000下使用的一種DOS文件系統,其在DOS文件系統的基礎上增加了對長文件名的支持。
◆HPFT 高性能文件系統(High Performance File System,HPFS)是微軟的LAN Manager中的文件系統,同時也是IBM的LAN Server和OS/2的文件系統。HPFT能訪問較大的硬盤驅動器,提供了更多的組織特性,并改善了文件系統的安全特性。
◆SMB 是一種支持Windows for Workgroups、Windows NT和Lan Manager的基于SMB協議的網絡操作系統。
◆NCPFS 是一種Novell NetWare使用的NCP協議的網絡操作系統。
◆NTFS 是Windows NT/2000操作系統支持的、一個特別為網絡和磁盤配額、文件加密等管理安全特性設計的磁盤格式。
察看Linux文件類型
不同版本的Linux所支持的文件系統類型和種類都有所不同,如何知道自己使用的Linux發行版的文件系統類型呢?下面以筆者使用的Mandrake Linux 8.2為例,講解如何操作。
以超級用戶權限登陸Linux,進入/Lib/modules/2.4.18-6mdk/kernel/fs目錄,執行下面命令:
|
注意,不同Linux發行版本的fs目錄的位置可能有些不同。/Lib/modules/2.4.18-6mdk/kernel/fs中會顯示當前系統所支持的文件系統種類。
從圖1中可以看到,筆者使用的Mandrake Linux 8.2支持的文件系統非常多,系統核心支持十多種文件系統類型:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。

圖1 Mandrake Linux 8.2支持的文件系統類型
文件系統是操作系統用于明確磁盤或分區上文件的方法和數據結構,即在磁盤上組織文件的方法。文件系統是整個操作系統中重要的組成部分,是操作系統正常運行的基本條件。了解Linux文件系統對于深入學習、研究Linux是非常重要的。