在RedHat中使用ReiserFS文件系統(tǒng)

時間:2022-11-17 10:13:00

導(dǎo)語:在RedHat中使用ReiserFS文件系統(tǒng)一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

一、日志式文件系統(tǒng)簡介

盡管Linux可以支持種類繁多的文件系統(tǒng),但是幾乎所有的Linux發(fā)行版都用ext2作為默認(rèn)的文件系統(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)致很嚴(yán)重的后果。因此就導(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),當(dāng)前l(fā)inux環(huán)境下有下面幾種日志文件可供選擇:

SGI的xfs日志文件系統(tǒng),SGI的xfs是基于Irix(SGI的Unix)上已經(jīng)實現(xiàn)的xfs。SGI已經(jīng)宣布xfs為OpenSource的軟件。

Veritas的文件系統(tǒng)和卷管理(volumemanager)。

Reiserfs:Reiserfs應(yīng)用了一些新的技術(shù),例如,統(tǒng)一名字空間(unifiednamespace)有一些Linux的發(fā)行版已經(jīng)包括了reiserfs文件系統(tǒng),作為安裝時的可選項。SuSE6.4就很容易使用reiserfs文件系統(tǒng)。reiserfs的最新版是ReiserFS3.6.25,經(jīng)過測試reiserfs的基準(zhǔn)測試的結(jié)果是非常令人滿意的。

IBM的jfs。這兩文件系統(tǒng)都遵循開放源碼版權(quán)聲明,且的而且很多有天賦的人在開發(fā)這兩個文件系統(tǒng)。jfs(JournaledFileSystemTechnologyforLinux)的開發(fā)者包括AIX(IBM的Unix)的jfs的主要開發(fā)者。在AIX上,jfs已經(jīng)經(jīng)受住了考驗。它是可靠、快速和容易使用的。

日志文件系統(tǒng)的另一個選擇是ext2的后繼者ext3fs文件系統(tǒng)。ext3fs文件系統(tǒng)正在Linux內(nèi)核黑客StephenTweedie的領(lǐng)導(dǎo)下開發(fā)。ext3fs還處于beta測試階段,就像reiserfs和jfs,但是它工作得很好。Stephen預(yù)計2000年夏天可以正式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)寫操作首先是對記錄文件進(jìn)行操作,若整個寫操作由于某種原因(如系統(tǒng)掉電)而中斷,則在下次系統(tǒng)啟動時就會讀日志記錄文件的內(nèi)容來恢復(fù)沒有完成的寫操作。而這個過程一般只需要幾秒鐘到幾分鐘,而不是ext2文件系統(tǒng)的fsck那樣在大型服務(wù)器情況下可能需要幾個小時來完成掃描。

對日志式文件系統(tǒng)原理的一個更詳細(xì)的描述可以參考JournalFileSystems

三、獲得ReiserFS

Kernel2.4.1已經(jīng)包含了ReiserFS的代碼,但是最好使用包含了最新的ReiserFS3.6.25的kernel2.4.3,若你不是使用kernel2.4.3,建議你使用這個版本的ReiserFS。本文將使用kernel2.4.3來作為示例。

對于Kernel2.4.2則需要打補丁:

#cd/usr/src/linux

#zcatlinux-2.4.2-reiserfs-20010327.patch.gzpatch-p1

對于2.2版本的內(nèi)核:

#bzip2-dclinux-2.2.18-reiserfs-3.5.32-patch.bz2patch-p1

在makeconfig階段需要對"promptfordevelopmentand/orincompletecode/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)核將會顯示kernelpanics信息。Redhat7.0帶的gcc2.96有很多的bug。所有的內(nèi)核編譯都應(yīng)該使用kgcc來完成。

gccvs.kgcc:

Linux之父LinusTorvalds日前在Linux核心郵件論壇中,表明了他對RedHat7.0的看法:『基本上不堪使用』。節(jié)錄這封信的內(nèi)容重點:『坦白地說,任何使用RedHat7.0和他們那壞掉的編譯器都會遇到麻煩?!弧何也恢罏楹蜶edHat選擇釋出那愚蠢的gcc-2.96(一定通過沒有任何gcc技術(shù)人員的批準(zhǔn)-gcc人員對此也很生氣),而且更令我驚訝的是他們顯然已經(jīng)知道他們用的這個編譯器是壞的。他們包進(jìn)了另一個好的編譯器,叫它作kgcc?!弧簁gcc意思是核心gcc,顯然因為(a)他們了解到核心編譯錯誤比某些應(yīng)用程序編譯錯誤來得糟糕,和(b)...』『...我認(rèn)為RedHat7.0基本上并非一個可用的開發(fā)平臺,而且我希望RedHat將他們的編譯器降級...』RedHat執(zhí)行長MatthewSzulik對LinusTorvalds這番話的反應(yīng)是:他不是真正能回應(yīng)Linus這項挑戰(zhàn)的人選,而且他表示RedHat也預(yù)料到會遭受這樣的譴責(zé)。RedHat7.0備受爭議的關(guān)鍵在于其中包含了gcc發(fā)展分支中的一個非正式的版本gcc2.96,gcc小組曾表示『gcc2.96并非gcc正式版本』、『而且將來也不會有這個版本』,它只是在到達(dá)gcc3.0路上的一站。RedHat技術(shù)長MichaelTiemann最近曾為RedHat7.0使用gcc2.96的決定作出辯護(hù),他表示:『沒有技術(shù)上更好的決策』、『因為其他的選擇不會比較好-對RedHat系列這樣復(fù)雜的需求而言-比起走回頭路,這項決定還能推動gcc3.0的發(fā)展?!籘iemann還說,若批評者的矛頭想要找個目標(biāo),對使用gcc2.96的決定『你也可以怪我』。)

下面我們將編譯ReiserFS工具,相應(yīng)的代碼是存放在/usr/src/linux/fs/reiserfs/utils目錄中的,首先make編譯程序,然后再makeinstall來安裝程序。2.4內(nèi)核中并沒有包括這些工具,而需要另外下載。從這里可以下載。

解壓文件:

#tarzxvfreiserfsprogs-3.x.0j.tar.gz

#cdreiserfsprogs-3.x.0j

#./configure

#make

#makeinstall

不幸的是,并沒有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/hda928723126204825683Linux

/dev/hda1031273381204825683Linux

在新分區(qū)上創(chuàng)建ReiserFS文件系統(tǒng):

#mkreiserfs/dev/hda10

加載新的分區(qū):

#mount-treiserfs/dev/hda10/mnt/hda10

拷貝數(shù)據(jù)到新分區(qū):

#cd/mnt/hda10

#tarcvlf-/tarxf-

編輯fstab來指向新的root:

/dev/hda10/reiserfsdefaults11

創(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)。

當(dāng)在lilo.conf中使用新的內(nèi)核時需要運行l(wèi)ilo程序。其中l(wèi)ilo.conf中需要將root指向新的內(nèi)核所在分區(qū)。