Linux日志文件系統(tǒng)面面觀
文件系統(tǒng)是用來(lái)管理和組織保存在磁盤驅(qū)動(dòng)器上的數(shù)據(jù)的系統(tǒng)軟件,其實(shí)現(xiàn)了數(shù)據(jù)完整性的保證,也就是保證寫入磁盤的數(shù)據(jù)和隨后讀出的內(nèi)容的一致性。除了保存以文件方式存儲(chǔ)的數(shù)據(jù)以外,一個(gè)文件系統(tǒng)同樣存儲(chǔ)和管理關(guān)于文件和文件系統(tǒng)自身的一些重要信息(例如:日期時(shí)間、屬主、訪問權(quán)限、文件大小和存儲(chǔ)位置等等)。這些信息通常被稱為元數(shù)據(jù)(metadata)。
本文引用地址:http://www.ex-cimer.com/article/201610/305406.htm由于為了避免磁盤訪問瓶頸效應(yīng),一般文件系統(tǒng)大都以異步方式工作,因此如果磁盤操作被突然中斷可能導(dǎo)致數(shù)據(jù)被丟失。例如如果出現(xiàn)這種情況:如果當(dāng)你處理一個(gè)在linux的ext2文件系統(tǒng)上的文檔,突然機(jī)器崩潰會(huì)出現(xiàn)什么情況?
有這幾種可能:
當(dāng)你保存文件以后,系統(tǒng)崩潰。這是最好的情況,你不會(huì)丟失任何信息。只需要重新啟動(dòng)計(jì)算機(jī)然后繼續(xù)工作。
在你保存文件之前系統(tǒng)崩潰。你會(huì)丟失你所有的工作內(nèi)容,但是老版本的文檔還會(huì)存在。
當(dāng)正在將保存的文檔寫入磁盤時(shí)系統(tǒng)崩潰。這是最糟的情況:新版文件覆蓋了舊版本的文件。這樣磁盤上只剩下一個(gè)部分新部分舊的文件。如果文件是二進(jìn)制文件那么就會(huì)出現(xiàn)不能打開文件的情況,因?yàn)槠湮募袷胶蛻?yīng)用所期待的不同。
在最后這種情況下,如果系統(tǒng)崩潰是發(fā)生在驅(qū)動(dòng)器正在寫入元數(shù)據(jù)時(shí),那么情況可能更糟。這時(shí)候就是文件系統(tǒng)發(fā)生了損壞,你可能會(huì)丟失整個(gè)目錄或者整個(gè)磁盤分區(qū)的數(shù)據(jù)。
linux標(biāo)準(zhǔn)文件系統(tǒng)(ext2fs)在重新啟動(dòng)時(shí)會(huì)通過調(diào)用文件掃描工具fsck試圖恢復(fù)損壞的元數(shù)據(jù)信息。由于ext2文件系統(tǒng)保存有冗余的關(guān)鍵元數(shù)據(jù)信息的備份,因此一般來(lái)說不大可能出現(xiàn)數(shù)據(jù)完全丟失。系統(tǒng)會(huì)計(jì)算出被損壞的數(shù)據(jù)的位置,然后或者是通過恢復(fù)冗余的元數(shù)據(jù)信息,或者是直接刪除被損壞或是元數(shù)據(jù)信息損毀的文件。
很明顯,要檢測(cè)的文件系統(tǒng)越大,檢測(cè)過程費(fèi)時(shí)就越長(zhǎng)。對(duì)于有幾十個(gè)G大小的分區(qū),可能會(huì)花費(fèi)很長(zhǎng)時(shí)間來(lái)進(jìn)行檢測(cè)。由于Linux開始用于大型服務(wù)器中越來(lái)越重要的應(yīng)用,因此就越來(lái)越不能容忍長(zhǎng)時(shí)間的當(dāng)機(jī)時(shí)間。這就需要更復(fù)雜和精巧的文件系統(tǒng)來(lái)替代ext2.
因此就出現(xiàn)了日志式文件系統(tǒng)(journalling filesystems)來(lái)滿足這樣的需求。
什么是日志式文件系統(tǒng)
這里僅僅對(duì)日志式文件系統(tǒng)進(jìn)行簡(jiǎn)單的說明。如果需要更深入的信息請(qǐng)參考文章日志式文件系統(tǒng),或者是日志式文件系統(tǒng)介紹。
大多數(shù)現(xiàn)代文件系統(tǒng)都使用了來(lái)自于數(shù)據(jù)庫(kù)系統(tǒng)中為了提高崩潰恢復(fù)能力而開發(fā)的日志技術(shù)。磁盤事務(wù)在被真正寫入到磁盤的最終位置以前首先按照順序方式寫入磁盤中日志區(qū)(或是log區(qū))的特定位置。
根據(jù)日志文件系統(tǒng)實(shí)現(xiàn)技術(shù)的不同,寫入日志區(qū)的信息是不完全一樣的。某些實(shí)現(xiàn)技術(shù)僅僅寫文件系統(tǒng)元數(shù)據(jù),而其他則會(huì)記錄所有的寫操作到日志中。
現(xiàn)在,如果崩潰發(fā)生在日志內(nèi)容被寫入之前發(fā)生,那么原始數(shù)據(jù)仍然在磁盤上,丟失的僅僅是最新的更新內(nèi)容。如果當(dāng)崩潰發(fā)生在真正的寫操作時(shí)(也就是日志內(nèi)容已經(jīng)更新),日志文件系統(tǒng)的日志內(nèi)容則會(huì)顯示進(jìn)行了哪些操作。因此當(dāng)系統(tǒng)重啟時(shí),它能輕易根據(jù)日志內(nèi)容,很快地恢復(fù)被破壞的更新。
在任何一種情況下,都會(huì)得到完整的數(shù)據(jù),不會(huì)出現(xiàn)損壞的分區(qū)的情況。由于恢復(fù)過程根據(jù)日志進(jìn)行,因此整個(gè)過程會(huì)非常快只需要幾秒鐘時(shí)間。
應(yīng)該注意的是使用日志文件系統(tǒng)并不意味著完全不需要使用文件掃描工具fsck了。隨機(jī)發(fā)生的文件系統(tǒng)的硬件和軟件錯(cuò)誤是根據(jù)日志是無(wú)法恢復(fù)的,必須借助于fsck工具。
目前Linux環(huán)境下的日志文件系統(tǒng)
在下面的內(nèi)容里將討論三種日志文件系統(tǒng):第一種是ext3,由Linux內(nèi)核Stephen Tweedie開發(fā)。ext3是通過向ext2文件系統(tǒng)上添加日志功能來(lái)實(shí)現(xiàn)的,目前是redhat7.2的默認(rèn)文件系統(tǒng);Namesys開發(fā)的ReiserFs日志式文件系統(tǒng),可以從www.namesys.com下載,目前Mandrake8.1采用該日志式文件系統(tǒng)。SGI在2001年三月發(fā)布了XFS日志式文件系統(tǒng)??梢栽? oss.sgi.com/projects/xfs/下載。下面將對(duì)這三種日志文件系統(tǒng)采用不同的工具進(jìn)行檢測(cè)和性能測(cè)試。
安裝ext3
關(guān)于ext3文件系統(tǒng)技術(shù)方面的問題請(qǐng)參考Dr. Stephen Tweedie的論文和訪談。ext3日志式文件系統(tǒng)直接來(lái)自于其祖先ext2文件系統(tǒng)。其具有完全向后兼容的關(guān)鍵特性,實(shí)際上其僅僅是在ext2日志式文件系統(tǒng)上添加了日志功能。其最大的缺點(diǎn)是沒有現(xiàn)代文件系統(tǒng)所具有的能提高文件數(shù)據(jù)處理速度和解壓的高性能。
ext3從 2.2.19開始是作為一個(gè)補(bǔ)丁方式存在的。如果希望對(duì)內(nèi)核添加對(duì)ext3文件系統(tǒng)的支持,就需要使用補(bǔ)丁,可以從ftp.linux.org.uk/pub/linux/sct/fs/jfs或ftp.kernel.org/pub/linux/kernel/people/sct/ext3得到補(bǔ)丁程序,一共需要如下文件:
* ext3-0.0.7a.tar.bz2:內(nèi)核補(bǔ)丁
* e2fsprogs-1.21-WIP-0601.tar.bz2 支持ext3的e2fsprogs程序套件
拷貝linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目錄下,進(jìn)行解壓:
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
首先對(duì)內(nèi)核添加SGI的kdb內(nèi)核調(diào)試器補(bǔ)丁,第二個(gè)是ext3文件系統(tǒng)補(bǔ)丁。下來(lái)就需要配置內(nèi)核,對(duì)文件系統(tǒng)部分的Enable Second extended fs development code回答Yes.然后編譯。
內(nèi)核編譯安裝以后,需要安裝e2fsprogs軟件套件:
tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2
cd e2fsprogs-1.21
。/configure
make
make check
make install
下來(lái)要做的工作就是在分區(qū)上創(chuàng)建一個(gè)ext3文件系統(tǒng),使用新內(nèi)核重新啟動(dòng),這時(shí)候你有兩種選擇創(chuàng)建新的日志文件系統(tǒng)或者對(duì)一個(gè)已有的ext2文件系統(tǒng)升級(jí)到ext3日志文件系統(tǒng)。
對(duì)于需要?jiǎng)?chuàng)建新ext3文件系統(tǒng)的情況下,只需要使用安裝的e2fsprogs軟件包中的mke2fs命令加-f參數(shù)就可以創(chuàng)建新的ext3文件系統(tǒng):
mke2fs -j /dev/xxx
評(píng)論