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