淺析在RedHat中使用ReiserFS文件系統(tǒng)論文
日志文件(Log files)是包含系統(tǒng)消息的文件,包括內(nèi)核、服務(wù)、在系統(tǒng)上運行的應(yīng)用程序等。不同的日志文件記載不同的信息。日志文件系統(tǒng)比傳統(tǒng)的文件系統(tǒng)安全,因為它用獨立的日志文件跟蹤磁盤內(nèi)容的變化。以下是學(xué)習(xí)啦小編今天為大家精心準備的:淺析在RedHat中使用ReiserFS文件系統(tǒng)相關(guān)論文,內(nèi)容僅供參考,歡迎閱讀!
淺析在RedHat中使用ReiserFS文件系統(tǒng)全文如下:
一、日志式文件系統(tǒng)簡介
盡管Linux可以支持種類繁多的文件系統(tǒng),但是幾乎所有的Linux發(fā)行版都用ext2作為默認的文件系統(tǒng)。ext2的設(shè)計者主要考慮的是文件系統(tǒng)性能方面的問題。ext2在寫入文件內(nèi)容的同時并沒有同時寫入文件的meta-data(和文件有關(guān)的信息,例如:權(quán)限、所有者以及創(chuàng)建和訪問時間)。換句話說,Linux先寫入文件的內(nèi)容,然后等到有空的時候才寫入文件的meta-data。這樣若出現(xiàn)寫入文件內(nèi)容之后但在寫入文件的meta-data之前系統(tǒng)突然斷電,就可能造成在文件系統(tǒng)就會處于不一致的狀態(tài)。在一個有大量文件操作的系統(tǒng)中出現(xiàn)這種情況會導(dǎo)致很嚴重的后果。因此就導(dǎo)致了新的日志式文件系統(tǒng)的出現(xiàn)以解決這個問題。日志文件系統(tǒng)比傳統(tǒng)的文件系統(tǒng)安全,因為它用獨立的日志文件跟蹤磁盤內(nèi)容的變化。就像關(guān)系型數(shù)據(jù)庫(RDBMS),日志文件系統(tǒng)可以用事務(wù)處理的方式,提交或撤消文件系統(tǒng)的變化。Linux系統(tǒng)缺少日志式文件系統(tǒng)是限制推廣其在企業(yè)級應(yīng)用的一個重要制約因素。因此就出現(xiàn)了多種不同的日志式文件系統(tǒng),當前l(fā)inux環(huán)境下有下面幾種日志文件可供選擇:
SGI的xfs日志文件系統(tǒng),SGI的xfs是基于Irix(SGI的Unix)上已經(jīng)實現(xiàn)的xfs。SGI已經(jīng)宣布xfs為Open Source的軟件。
Veritas的文件系統(tǒng)和卷管理(volume manager)。
Reiserfs:Reiserfs應(yīng)用了一些新的技術(shù),例如,統(tǒng)一名字空間(unified name space)有一些Linux的發(fā)行版已經(jīng)包括了reiserfs文件系統(tǒng),作為安裝時的可選項。SuSE 6.4 就很容易使用reiserfs文件系統(tǒng)。reiserfs的最新版是ReiserFS 3.6.25,經(jīng)過測試reiserfs的基準測試的結(jié)果是非常令人滿意的。
IBM的jfs。這兩文件系統(tǒng)都遵循開放源碼版權(quán)聲明,且的而且很多有天賦的人在開發(fā)這兩個文件系統(tǒng)。jfs(Journaled File System Technology for Linux)的開發(fā)者包括AIX(IBM的Unix)的jfs的主要開發(fā)者。在AIX上,jfs已經(jīng)經(jīng)受住了考驗。它是可靠、快速和容易使用的。
日志文件系統(tǒng)的另一個選擇是ext2的后繼者ext3fs文件系統(tǒng)。ext3fs文件系統(tǒng)正在Linux內(nèi)核黑客Stephen Tweedie的領(lǐng)導(dǎo)下開發(fā)。ext3fs還處于beta測試階段,就像reiserfs和jfs,但是它工作得很好。Stephen預(yù)計2000年夏天可以正式發(fā)布ext3fs。ext3fs最大的優(yōu)點是向下兼容ext2。而且ext3fs還支持異步的日志,這意味著它的性能可能還比ext2好。
在上面提到的日志式文件系統(tǒng)中,ReiserFS是目前Linux環(huán)境下最成熟的一種。而IBM的JFS和SGI的XFS則相對于來說要年輕一些,ext3文件系統(tǒng)則仍然需要開發(fā)。因此我們這里選擇ReiserFS。
二、 為什么叫日志式?
日志式文件系統(tǒng)在強調(diào)數(shù)據(jù)完整性的企業(yè)級服務(wù)器中有著重要的需求,是文件系統(tǒng)發(fā)展的方向。日志式文件系統(tǒng)的思想來自于如Oracle等大型數(shù)據(jù)庫。數(shù)據(jù)庫操作往往是由多個相關(guān)的、相互依賴的子操作組成,任何一個子操作的失敗都意味著整個操作的無效性,對數(shù)據(jù)庫數(shù)據(jù)的任何修改都要回復(fù)到操作以前的狀態(tài)。日志式文件系統(tǒng)采用了類似的技術(shù)。
在分區(qū)中保存有一個日志記錄文件,文件系統(tǒng)寫操作首先是對記錄文件進行操作,若整個寫操作由于某種原因(如系統(tǒng)掉電)而中斷,則在下次系統(tǒng)啟動時就會讀日志記錄文件的內(nèi)容來恢復(fù)沒有完成的寫操作。而這個過程一般只需要幾秒鐘到幾分鐘,而不是ext2文件系統(tǒng)的fsck那樣在大型服務(wù)器情況下可能需要幾個小時來完成掃描。
對日志式文件系統(tǒng)原理的一個更詳細的描述可以參考Journal File Systems
三、獲得ReiserFS
Kernel 2.4.1已經(jīng)包含了ReiserFS的代碼,但是最好使用包含了最新的ReiserFS 3.6.25的kernel 2.4.3,若你不是使用kernel 2.4.3,建議你使用這個版本的ReiserFS。本文將使用kernel 2.4.3來作為示例。
對于Kernel 2.4.2則需要打補丁:
# cd /usr/src/linux
# zcat linux-2.4.2-reiserfs-20010327.patch.gz patch -p1
對于2.2版本的內(nèi)核:
# bzip2 -dc linux-2.2.18-reiserfs-3.5.32-patch.bz2 patch -p1
在make config階段需要對"prompt for development and/or incomplete code/drivers"回答Yes。否則系統(tǒng)就不會詢問關(guān)于ReiserFS的選項;在編譯內(nèi)核的文件系統(tǒng)參數(shù)部分,應(yīng)該選擇支持ReiserFS。若你不希望將root(/)安裝在ReiserFS文件系統(tǒng)下,則只需要將對ReiserFS的支持編譯為模塊即可。本文將討論將root安裝在ReiserFS之上的情況。
四、編譯內(nèi)核和模塊
注:如果你使用的是RedHat7.0,那么就需要首先邊際Makefile并將其中所有的gcc替換為kgcc。首先需要從redhat7.0安裝光盤上安裝kgcc,若沒有采取這一步,那么得到的內(nèi)核將會顯示kernel panics信息。Redhat7.0帶的gcc2.96有很多的bug。所有的內(nèi)核編譯都應(yīng)該使用kgcc來完成。
gcc vs. kgcc:
Linux 之父 Linus Torvalds 日前在 Linux核心郵件論壇中,表明了他對 Red Hat 7.0 的看法:『基本上不堪使用』。 節(jié)錄這封信的內(nèi)容重點:『坦白地說,任何使用 Red Hat 7.0 和他們那壞掉的編譯器都會遇到麻煩?!弧何也恢罏楹?Red Hat 選擇釋出那愚蠢的 gcc-2.96(一定通過沒有任何 gcc 技術(shù)人員的批準 - gcc 人員對此也很生氣),而且更令我驚訝的是他們顯然已經(jīng)知道他們用的這個編譯器是壞的。他們包進了另一個好的編譯器,叫它作 kgcc?!?『kgcc 意思是核心 gcc,顯然因為 (a) 他們了解到核心編譯錯誤比某些應(yīng)用程序編譯錯誤來得糟糕,和 (b)...』 『... 我認為 Red Hat 7.0 基本上并非一個可用的開發(fā)平臺,而且我希望 Red Hat 將他們的編譯器降級...』 Red Hat 執(zhí)行長 Matthew Szulik 對 Linus Torvalds 這番話的反應(yīng)是:他不是真正能回應(yīng) Linus 這項挑戰(zhàn)的人選,而且他表示 Red Hat 也預(yù)料到會遭受這樣的譴責。
Red Hat 7.0 備受爭議的關(guān)鍵在于其中包含了 gcc 發(fā)展分支中的一個非正式的版本 gcc 2.96,gcc 小組曾表示『gcc 2.96 并非 gcc 正式版本』、『而且將來也不會有這個版本』,它只是在到達 gcc 3.0 路上的一站。 Red Hat 技術(shù)長 Michael Tiemann 最近曾為 Red Hat 7.0 使用 gcc 2.96 的決定作出辯護,他表示:『沒有技術(shù)上更好的決策』、『因為其他的選擇不會比較好 - 對 Red Hat 系列這樣復(fù)雜的需求而言 - 比起走回頭路,這項決定還能推動 gcc 3.0 的發(fā)展?!?Tiemann 還說,若批評者的矛頭想要找個目標,對使用 gcc 2.96 的決定『你也可以怪我』。)
下面我們將編譯ReiserFS工具,相應(yīng)的代碼是存放在/usr/src/linux/fs/reiserfs/utils目錄中的,首先make編譯程序,然后再make install來安裝程序。2.4內(nèi)核中并沒有包括這些工具,而需要另外下載。從這里可以下載。
解壓文件:
# tar zxvf reiserfsprogs-3.x.0j.tar.gz
# cd reiserfsprogs-3.x.0j
# ./configure
# make
# make install
不幸的是,并沒有ext2toreiserfs之類的轉(zhuǎn)換工具,因此將/從ext2轉(zhuǎn)換為reiserfs就需要三步才能完成:
1.創(chuàng)建一個新的分區(qū),并格式化為ReiserFS格式。
12.將數(shù)據(jù)從ext2分區(qū)拷貝到新分區(qū)。
13.將新分區(qū)加載為根(/)
創(chuàng)建新分區(qū),ReiserFS并不需要一個特定的分區(qū)類型,因此就使用83(Linux):
# fdisk -l /dev/hda
/dev/hda9 2872 3126 2048256 83 Linux
/dev/hda10 3127 3381 2048256 83 Linux
在新分區(qū)上創(chuàng)建ReiserFS文件系統(tǒng):
# mkreiserfs /dev/hda10
加載新的分區(qū):
# mount -t reiserfs /dev/hda10 /mnt/hda10
拷貝數(shù)據(jù)到新分區(qū):
# cd /mnt/hda10
# tar cvlf - / tar xf -
編輯fstab來指向新的root:
/dev/hda10/reiserfs defaults 1 1
創(chuàng)建指向reiserfsck的一個符號鏈接因為RedHat啟動時將尋找fsck.reiserfs文件來掃描:
# ln -s /sbin/reiserfsck/sbin/fsck.reiserfs
保證系統(tǒng)lilo至少為21.6。這是第一個支持ReiserFS的版本,也可以在/boot目錄中使用小容量的ext2文件系統(tǒng)。但是升級lilo更好一些。也推薦使用GRUB來實現(xiàn)引導(dǎo)。
當在lilo.conf中使用新的內(nèi)核時需要運行l(wèi)ilo程序。其中l(wèi)ilo.conf中需要將root指向新的內(nèi)核所在分區(qū)。