天天看點

全面了解安裝使用Linux下的日志檔案系統

    有這幾種可能:

    ◆當你儲存檔案以後,系統崩潰。這是最好的情況,你不會丢失任何資訊。隻需要重新啟動計算機然後繼續工作。

    ◆在你儲存檔案之前系統崩潰。你會丢失你所有的工作内容,但是老版本的文檔還會存在。

    ◆當正在将儲存的文檔寫入磁盤時系統崩潰。這是最糟的情況:新版檔案覆寫了舊版本的檔案。這樣磁盤上隻剩下一個部分新部分舊的檔案。如果檔案是二進制檔案那麼就會出現不能打開檔案的情況,因為其檔案格式和應用所期待的不同。

    在最後這種情況下,如果系統崩潰是發生在驅動器正在寫入中繼資料時,那麼情況可能更糟。這時候就是檔案系統發生了損壞,你可能會丢失整個目錄或者整個磁盤分區的資料。

    是以就出現了日志式檔案系統(journalling filesystems)來滿足這樣的需求。

    什麼是日志式檔案系統

    這裡僅僅對日志式檔案系統進行簡單的說明。如果需要更深入的資訊請參考文章日志式檔案系統,或者是日志式檔案系統介紹。

    大多數現代檔案系統都使用了來自于資料庫系統中為了提高崩潰恢複能力而開發的日志技術。磁盤事務在被真正寫入到磁盤的最終位置以前首先按照順序方式寫入磁盤中日志區(或是log區)的特定位置。

    根據日志檔案系統實作技術的不同,寫入日志區的資訊是不完全一樣的。某些實作技術僅僅寫檔案系統中繼資料,而其他則會記錄所有的寫操作到日志中。

    現在,如果崩潰發生在日志内容被寫入之前發生,那麼原始資料仍然在磁盤上,丢失的僅僅是最新的更新内容。如果當崩潰發生在真正的寫操作時(也就是日志内容已經更新),日志檔案系統的日志内容則會顯示進行了哪些操作。是以當系統重新開機時,它能輕易根據日志内容,很快地恢複被破壞的更新。

    在任何一種情況下,都會得到完整的資料,不會出現損壞的分區的情況。由于恢複過程根據日志進行,是以整個過程會非常快隻需要幾秒鐘時間。

    應該注意的是使用日志檔案系統并不意味着完全不需要使用檔案掃描工具fsck了。随機發生的檔案系統的硬體和軟體錯誤是根據日志是無法恢複的,必須借助于fsck工具。

    目前Linux環境下的日志檔案系統

    ◆安裝ext3

    關于ext3檔案系統技術方面的問題請參考Dr. Stephen Tweedie的論文和訪談。ext3日志式檔案系統直接來自于其祖先ext2檔案系統。其具有完全向後相容的關鍵特性,實際上其僅僅是在ext2日志式檔案系統上添加了日志功能。其最大的缺點是沒有現代檔案系統所具有的能提高檔案資料處理速度和解壓的高性能。

    * ext3-0.0.7a.tar.bz2:核心更新檔

    * e2fsprogs-1.21-WIP-0601.tar.bz2 支援ext3的e2fsprogs程式套件

    拷貝linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目錄下,進行解壓:

    mv linux linux-old

    tar -Ixvf linux-2.2.19.tar.bz2

    tar -Ixvf ext3-0.0.7a.tar.bz2

    cd linux

    cat ……/ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1

    cat ……/ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1

    首先對核心添加SGI的kdb核心調試器更新檔,第二個是ext3檔案系統更新檔。下來就需要配置核心,對檔案系統部分的"Enable Second extended fs development code"回答Yes.然後編譯。

    核心編譯安裝以後,需要安裝e2fsprogs軟體套件:

    tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2

    cd e2fsprogs-1.21

    。/configure

    make

    make check

    make install

    下來要做的工作就是在分區上建立一個ext3檔案系統,使用新核心重新啟動,這時候你有兩種選擇建立新的日志檔案系統或者對一個已有的ext2檔案系統更新到ext3日志檔案系統。

    對于需要建立新ext3檔案系統的情況下,隻需要使用安裝的e2fsprogs軟體包中的mke2fs指令加-f參數就可以建立新的ext3檔案系統:

    mke2fs -j /dev/xxx

    這裡/dev/xxx是希望建立ext3檔案系統的新分區。-j參數表示建立ext3而不是ext2檔案系統。可以使用參數"-Jsize="來指定希望的日志區大小(n機關為M)。

    更新一個已有的ext2,使用tune2fs就可以了:

    tune2fs -j /dev/xxx

    你可以對正在加載的檔案系統和沒有加載的檔案系統進行更新操作。如果目前檔案系統正在被加載,則檔案。journal會在檔案系統加載點的所在目錄被建立。如果是更新一個當時沒有加載的檔案系統,則使用隐含的系統inode來記錄日志,這時候檔案系統的所有内容都會被保留不被破壞。

    你可以使用下面的指令加載ext3檔案系統:

    mount -t ext3 /dev/xxx /mount_dir

    由于ext3實際上是帶有日志功能的ext2檔案系統 ,是以一個ext3檔案系統可以以ext2的方式被加載。

    ◆安裝XFS檔案系統

    如果需要從技術方面了解XFS檔案系統,請參考SGI的XFS檔案系統和SGI資訊頁面。也可以參考FAQ.

    patch-2.4.14-xfs-1.0.2.bz2

    patch-2.4.14-xfs-1.0.2-kdb.bz2

    拷貝Linux核心linux-2.4.2.tar.bz2到 /usr/src目錄下,修改老的核心目錄名,然後解壓新核心:

    tar -Ixf inux-2.4.2.tar.bz2

    拷貝每個每個更新檔到核心源碼目錄下(例如:/usr/src/linux),并打更新檔:

    zcat patch-2.4.14-xfs-1.0.2.bz2 | patch -p1

    zcat patch-2.4.14-xfs-1.0.2-kdb.bz2 | patch -p1

    然後配置核心,打開檔案系統部分的核心選項:"XFS filesystem support" (CONFIG_XFS_FS)和"Page Buffer support" (CONFIG_PAGE_BUF)。同時需要更新下面這些系統工具到下面或更高的版本:

    modutils-2.4.0

    autoconf-2.13

    e2fsprogs-devel-1.18

    然後下載下傳xfs工具。這個軟體包包括下面的指令來處理檔案系統,使用下面的指令來安裝該軟體包::

    tar -zxf xfsprogs-1.2.0.src.tar.gz

    cd xfsprogs-1.2.0

    make configure

    安裝這些指令以後,就可以建立新的XFS檔案系統:

    mkfs -t xfs /dev/xxx

    如果xxx是一個已經存在的檔案系統,那麼就需要使用"-f"參數來建立新分區,但是記得這将會破壞該分區的所有資料。

    mkfs -t xfs -f /dev/xxx

    建立以後就可以使用基于下面的指令加載新檔案系統:

    mount -t xfs /dev/xxx /mount_dir

◆安裝ReiserFS檔案系統

    如果希望更多地從技術方面了解reiserFS檔案系統,請參考NAMESYS和FAQ.

    ReiserFS檔案系統從2.4.1-pre4開始就是Linux核心的正式支援的檔案系統了。為了使用reiserFS檔案系統那你首先需要在系統上安裝檔案系統支援工具(如:建立ReiserFS檔案系統的mkreiserfs工具)。最新的ReiserFS檔案系統版本可以以更新檔的方式添加到2.2.x或者2.4.x核心中。這裡我們以2.2.19為例:

    第一步,首先下在核心源碼,并下在ReiserFS檔案系統的2.2.19更新檔 ,目前更新檔最新版本是linux-2.2.19-reiserfs-3.5.34-patch.bz2.同時應該下載下傳工具軟體包:reiserfsprogs-3.x.0j.tar.gz.

    然後解壓核心源碼和更新檔包到/usr/src中:

    tar -Ixf linux-2.2.19.tar.bz2

    bzcat linux-2.2.19-reiserfs-3.5.34-patch.bz2 | patch -p0

    編譯核心支援reiserfs,安裝核心。然後安裝檔案系統工具軟體:

    cd /usr/src/linux/fs/reiserfs/utils

    安裝新核心并重新啟動。現在就可以建立新的reiserfs檔案系統,并加載:

    mkreiserfs /dev/xxxx

    mount -t reiserfs /dev/xxx /mount_dir

    ◆檔案系統性能測試

    測試環境使用的計算機環境如下:Pentium III - 16 Mb RAM - 2 Gb HD,作業系統為RedHat6.2.所有的檔案系統都能正常工作,是以就進行benchmark分析來對它們進行性能比較。首先我直接拔掉系統電源以模拟系統掉電情況,以測試日志檔案系統恢複過程。所有的檔案系統都成功地經過了檔案掃描檢測階段,在數秒以後系統都經過了掃描然後正常啟動了系統。

    bonnie++ -d/work1 -s10 -r4 -u0

    其對加載在/work1目錄下的檔案系統進行了10Mb(-s10)的測試。是以在執行測試之前必須建立适當類型的檔案系統并加載到目錄/work1下。其他的參數指定記憶體大小(-r4)的M數,和以root身份運作測試程式,測試結果如下:

    每種測試都有兩組資料:檔案系統速度(K/sec)和CPU占用率(%CPU)。速度越高,檔案系統越好。而對于CPU率來說,數字越小性能越好。可以看到Reiserfs檔案系統在檔案操作方面(Sequential Create和Random Create部分的) 的性能最好,超出其他檔案系統10倍之多。在其他方面(Sequential Output和Sequential Input)則和其他檔案系統性能不相上下。對于其他檔案系統則沒有特别明顯的差別。XFS性能接近ext2檔案系統,ext3檔案系統則比ext2要稍微慢上一些(因為記錄日志需要一些額外的時間)。

    Fragm = number_of_fragments / number_of_files

    可以在結果檔案中得到同樣的測試比較結果:

    log - 原始結果

    log.tbl - 比較程式的輸出結果

    log_table - 表格式的結果

    下面的指令進行測試:

    mongo.pl ext3 /dev/hda3 /work1 logext3 1

    如果要測試其他檔案系統,就需要把上面指令的參數中的ext3修改為reiserfs或xfs.其他參數分别為要加載的分區,加載路徑,儲存測試結果的檔案名及啟動的程序數。

    下面的表格是測試結果。資料機關為秒。值越低性能越好。第一個表格測試使用的資料塊大小為100位元組,第二個表格為1000位元組,最後一個為10000位元組

    從上面的表格可以看到ext3在狀态删除和重命名方面要性能更好一些,而ReiserFS檔案系統在檔案建立和拷貝性能表現更出色。同時也可以看到reiserFS正如其技術文檔提到的其在小檔案處理方面性能相當出色。

    ◆結論

    目前Linux至少有兩個健壯可靠的日志檔案系統可供選擇(XFS和reiserFS),其都得到了廣泛的應用。例如Mandrake8.1就預設支援reiserFS檔案系統。

    從性能測試的結果可以看到,reiserFS是最好的選擇。

繼續閱讀