Linux是一種開放的、因Internet而產生的操作系統。Internet的發展、以網絡為中心的計算模式如電子商務被迅速接受和普及,都為 Linux提供了更巨大的機會,使之成為企業和部門級的首選平台。同時,Linux也以其對新技術的巨大包容能力為自身發展提供了良好的生長和棲息環境。這表現在其內核技術的發展為Linux環境下管理數據、存儲數據、分配數據、升級數據提供了高性能的系統技術支持。ext3文件系統就屬這類技術中較突出的一種。 日志文件系統 通常在系統運行中寫入文件內容的同時,並沒有寫入文件的元數據(如權限、所有者及創建和訪問時間),如果在寫入文件內容之後與寫入文件元數據之前的時間差裡,系統非正常關閉,處於寫入過程中的文件系統會非正常卸載,那麼文件系統就會處於不一致的狀態。當重新啟動時,Linux會運行fsck程序,掃描整個文件系統,保證所有的文件塊都被正確地分配或使用,找到被損壞的目錄項並試圖修復它。但是,fsck不保證一定能夠修復損壞。出現這種情況時,文件中不一致的元數據會填滿已丟失文件的空間,目錄項中的文件項可能會丟失,也就造成文件的丟失。 為了盡量減少文件系統的不一致性,縮短操作系統的啟動時間,文件系統需追蹤引起系統改變的記錄,這些記錄存放在與文件系統相分離的地方,通常我們叫“日志”。一旦這些日志記錄被安全地寫入,日志文件系統就可以應用它們清除引起系統改變的記錄,並將它們組成一個引起文件系統改變的集,將它們放在數據庫的事務處理中,保持在狀態下有效數據的正常運行,不與整個系統的性能發生沖突。在任何系統發生崩潰或需要重新啟動時,數據就遵從日志文件中的信息記錄進行恢復。由於日志文件中有定期的檢查點,通常非常整齊。文件系統的設計主要考慮效率和性能方面的問題。 Linux可以支持許多日志文件系統,包括FAT、VFAT、HPFS(OS/2)、NTFS(Windows NT)、UFS、XFS、JFS、ReiserFS、ext2、ext3等。 ext3支持多種日志模式 ext3 是ext2文件系統的高一級版本,完全兼容ext2,與ext2主要區別便是具有快速更新文件的存儲功能。計算機自磁盤上讀取或寫入數據開始就必須保證文件系統中文件與目錄的一致性,所有日志文件中的數據均以數據塊的形式存放在存儲設備中,當磁盤分區時文件系統即被創建,按照文件形式、目錄形式支持存儲數據和組織數據。Linux的文件和目錄采用層次結構文件系統,文件系統一般是在安裝系統時通過使用“mount”命令安裝上的,用於使用的文件鏈表存儲在文件/etc/fstab中,用於維護而安裝的文件鏈表則存放在/etc/mtab中。 ext3提供多種日志模式,即無論改變文件系統的元數據,還是改變文件系統的數據(包括文件自身的改變),ext3 文件系統均可支持,以下是在/etc/fstab文件引導時激活的三種不同日志模式: ◆data=journal日志模式 日志中記錄包括所有改變文件系統的數據和元數據。它是三種ext3日志模式中最慢的,但它將發生錯誤的可能性降至最小。使用“data= journal” 模式要求ext3將每個變化寫入文件系統2次、寫入日志1次,這將降低文件系統的總性能,但它的確是使用者最心愛的模式。由於記錄了在ext3中元數據和數據更新情況,當一個系統重新啟動的時候,這些日志將起作用。 ◆data=ordered日志模式 僅記錄改變文件系統的元數據,且溢出文件數據要補充到磁盤中。這是缺省的ext3日志模式。這種模式降低了在寫入文件系統和寫入日志之間的冗余,因此速度較快,雖然文件數據的變化情況並不被記錄在日志中,但它們必須做,而且由ext3的daemon程序在與之相關的文件系統元數據變化前執行,即在記錄元數據前要修改文件系統數據,這將稍微降低系統的性能(速度),然而可確保文件系統中的文件數據與相應文件系統的元數據同步。 ◆data=writeback日志模式 僅記錄改變文件系統的元數據,但根據標准文件系統,寫程序仍要將文件數據的變化記錄在磁盤上,以保持文件系統一致性。這是速度最快的ext3日志模式。因為它只記錄元數據的變化,而不需等待與文件數據相關的更新如文件大小、目錄信息等情況,對文件數據的更新與記錄元數據變化可以不同步,即ext3是支持異步的日志。缺陷是當系統關閉時,更新的數據因不能被寫入磁盤而出現矛盾,這一點目前尚不能很好解決。 不同日志模式間有差別,但設置的方法一樣方便。可以使用ext3文件系統指定日志模式,由/etc/fstab啟動時完成。例如,選擇data=writeback日志模式,可以做如下設置: /dev/hda5 /opt ext3 data=writeback 1 0 在一般情況下,data=ordered日志模式是ext3文件系統的缺省模式。 選擇日志模式 1.考慮數據完整性 使用ext3文件系統,在非正常關機時,數據完整性能得到可靠的保障,而且可以選擇數據保護的類型和級別。例如,可以選擇保證文件系統一致、允許文件系統上的數據在非正常關機時受損,這樣可以在某些狀況下提高一些速度(但非所有狀況)。另外,也可以選擇保持數據與文件系統一致的情況,這意味著在非正常關機後,不會在新近寫入的文件中看到任何數據垃圾。這種保持數據與文件系統一致的安全性選擇通常是缺省設置的情況。 在大多數情況下,用戶都是在文件的末尾增加寫入數據。僅僅在某些情況下(例如數據庫),用戶在現存文件的中間寫入數據,甚至覆蓋現存文件。這種操作一般是先截斷該文件,然後再寫入數據。如果選擇data=ordered模式,系統正在寫文件時崩潰,那麼數據塊可能被部分改寫,但是新增加的數據寫入過程並沒有完成,所以這種不完整數據塊將不能作為文件數據的一部分。崩潰後要得到殘存數據塊的惟一辦法是,在崩潰過程中有一個程序正在重寫現存文件的中部,該程序使用了 fsync()和O_SYNC強制寫操作,才能保證在這種情況下按特定順序寫入。 2.考慮速度 ext3寫入數據的次數要多於ext2,盡管如此,ext3的速度仍然快於ext2(即使是對高速數據流)。這是因為ext3的日志具有優化硬盤磁頭轉動的功能。通過選擇3種日志模式中的某一種,可以選擇優化速度,但這會或多或少地造成一些數據的不完整,下面就來比較一下這三種日志模式。 ◆ 使用選項data=writeback可以顯著地提高速度,但同時會降低對數據一致性的保護。選擇其它日志模式,數據一致性的保護基本上與ext2文件系統相同。不同的是在正常操作時,系統要不斷地維護文件系統的完整性,包括頻繁的共享寫操作創建和刪除大量的小文件。如果從ext2切換到ext3,發現應用程序性能大幅度下降,選項data=writeback可能會對提高性能有幫助。即使沒有獲得數據一致性保護措施,仍然可以享受ext3的優勢(文件系統總是保持一致)。在很多日志文件系統中,將這種模式設置為缺省模式。 ◆data=ordered(缺省模式)能提供保持數據與文件系統的一致,這意味著在非正常關機時,不會在新近寫入的文件中看到任何垃圾數據。 ◆為了保證在多數情況下獲得適中的速度,data=journal模式需要大一些的日志。當然在非正常關機後需要的恢復時間也長一些,但在某些數據庫操作時速度較快。 一般情況下,建議使用缺省模式。如果要改變模式,要在/etc/fstab文件中為相應的文件系統加上data=模式選項。 這樣,可以在速度和文件數據完整性兩方面權衡利弊,並且可以為某些特殊的應用調整速度。 Linux 操作系統是近年來用戶數量增長最快的操作系統,ext3作為第一個正式支持的日志文件系統,全面兼容ext2的。ext3提供了多種日志模式支持,改進了 Linux系統的性能,解決系統中存在的不一致性的問題。ext3文件系統是一個優秀的、極具發展前景的文件系統。