ReiserFS文件系統分析論文
時間:2022-03-20 08:15:00
導語:ReiserFS文件系統分析論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
1.為什么叫日志式?
日志式文件系統在強調數據完整性的企業級服務器中有著重要的需求,是文件系統發展的方向。日志式文件系統的思想來自于如Oracle等大型數據庫。數據庫操作往往是由多個相關的、相互依賴的子操作組成,任何一個子操作的失敗都意味著整個操作的無效性,對數據庫數據的任何修改都要回復到操作以前的狀態。日志式文件系統采用了類似的技術。
在分區中保存有一個日志記錄文件,文件系統寫操作首先是對記錄文件進行操作,若整個寫操作由于某種原因(如系統掉電)而中斷,則在下次系統啟動時就會讀日志記錄文件的內容來恢復沒有完成的寫操作。而這個過程一般只需要幾秒鐘到幾分鐘,而不是ext2文件系統的fsck那樣在大型服務器情況下可能需要幾個小時來完成掃描。
對日志式文件系統原理的一個更詳細的描述可以參考JournalFileSystems
2.日志式文件系統簡介
盡管Linux可以支持種類繁多的文件系統,但是幾乎所有的Linux發行版都用ext2作為默認的文件系統。ext2的設計者主要考慮的是文件系統性能方面的問題。ext2在寫入文件內容的同時并沒有同時寫入文件的meta-data(和文件有關的信息,例如:權限、所有者以及創建和訪問時間)。換句話說,Linux先寫入文件的內容,然后等到有空的時候才寫入文件的meta-data。這樣若出現寫入文件內容之后但在寫入文件的meta-data之前系統突然斷電,就可能造成在文件系統就會處于不一致的狀態。在一個有大量文件操作的系統中出現這種情況會導致很嚴重的后果。因此就導致了新的日志式文件系統的出現以解決這個問題。日志文件系統比傳統的文件系統安全,因為它用獨立的日志文件跟蹤磁盤內容的變化。就像關系型數據庫(RDBMS),日志文件系統可以用事務處理的方式,提交或撤消文件系統的變化。Linux系統缺少日志式文件系統是限制推廣其在企業級應用的一個重要制約因素。因此就出現了多種不同的日志式文件系統,當前linux環境下有下面幾種日志文件可供選擇:
SGI的xfs日志文件系統,SGI的xfs是基于Irix(SGI的Unix)上已經實現的xfs。SGI已經宣布xfs為OpenSource的軟件。
Veritas的文件系統和卷管理(volumemanager)。
reiserfs:Reiserfs應用了一些新的技術,例如,統一名字空間(unifiednamespace)有一些Linux的發行版已經包括了reiserfs文件系統,作為安裝時的可選項。SuSE6.4就很容易使用reiserfs文件系統。reiserfs的最新版是ReiserFS3.6.25,經過測試reiserfs的基準測試的結果是非常令人滿意的。
IBM的jfs。這兩文件系統都遵循開放源碼版權聲明,且的而且很多有天賦的人在開發這兩個文件系統。jfs(JournaledFileSystemTechnologyforLinux)的開發者包括AIX(IBM的Unix)的jfs的主要開發者。在AIX上,jfs已經經受住了考驗。它是可靠、快速和容易使用的。
日志文件系統的另一個選擇是ext2的后繼者ext3fs文件系統。ext3fs文件系統正在Linux內核黑客StephenTweedie的領導下開發。ext3fs還處于beta測試階段,就像reiserfs和jfs,但是它工作得很好。Stephen預計2000年夏天可以正式ext3fs。ext3fs最大的優點是向下兼容ext2。而且ext3fs還支持異步的日志,這意味著它的性能可能還比ext2好。
在上面提到的日志式文件系統中,ReiserFS是目前Linux環境下最成熟的一種。而IBM的JFS和SGI的XFS則相對于來說要年輕一些,ext3文件系統則仍然需要開發。因此我們這里選擇ReiserFS。
3.獲得ReiserFS
Kernel2.4.1已經包含了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版本的內核:
#bzip2-dclinux-2.2.18-reiserfs-3.5.32-patch.bz2patch-p1
在makeconfig階段需要對"promptfordevelopmentand/orincompletecode/drivers"回答Yes。否則系統就不會詢問關于ReiserFS的選項;在編譯內核的文件系統參數部分,應該選擇支持ReiserFS。若你不希望將root(/)安裝在ReiserFS文件系統下,則只需要將對ReiserFS的支持編譯為模塊即可。本文將討論將root安裝在ReiserFS之上的情況。
4.編譯內核和模塊
注:如果你使用的是RedHat7.0,那么就需要首先邊際Makefile并將其中所有的gcc替換為kgcc。首先需要從redhat7.0安裝光盤上安裝kgcc,若沒有采取這一步,那么得到的內核將會顯示kernelpanics信息。Redhat7.0帶的gcc2.96有很多的bug。所有的內核編譯都應該使用kgcc來完成。
gccvs.kgcc:
Linux之父LinusTorvalds日前在Linux核心郵件論壇中,表明了他對RedHat7.0的看法:『基本上不堪使用』。節錄這封信的內容重點:『坦白地說,任何使用RedHat7.0和他們那壞掉的編譯器都會遇到麻煩。』『我不知道為何RedHat選擇釋出那愚蠢的gcc-2.96(一定通過沒有任何gcc技術人員的批準-gcc人員對此也很生氣),而且更令我驚訝的是他們顯然已經知道他們用的這個編譯器是壞的。他們包進了另一個好的編譯器,叫它作kgcc。』『kgcc意思是核心gcc,顯然因為(a)他們了解到核心編譯錯誤比某些應用程序編譯錯誤來得糟糕,和(b)...』『...我認為RedHat7.0基本上并非一個可用的開發平臺,而且我希望RedHat將他們的編譯器降級...』RedHat執行長MatthewSzulik對LinusTorvalds這番話的反應是:他不是真正能回應Linus這項挑戰的人選,而且他表示RedHat也預料到會遭受這樣的譴責。RedHat7.0備受爭議的關鍵在于其中包含了gcc發展分支中的一個非正式的版本gcc2.96,gcc小組曾表示『gcc2.96并非gcc正式版本』、『而且將來也不會有這個版本』,它只是在到達gcc3.0路上的一站。RedHat技術長MichaelTiemann最近曾為RedHat7.0使用gcc2.96的決定作出辯護,他表示:『沒有技術上更好的決策』、『因為其他的選擇不會比較好-對RedHat系列這樣復雜的需求而言-比起走回頭路,這項決定還能推動gcc3.0的發展。』Tiemann還說,若批評者的矛頭想要找個目標,對使用gcc2.96的決定『你也可以怪我』。)
下面我們將編譯ReiserFS工具,相應的代碼是存放在/usr/src/linux/fs/reiserfs/utils目錄中的,首先make編譯程序,然后再makeinstall來安裝程序。2.4內核中并沒有包括這些工具,而需要另外下載。從這里可以下載。
解壓文件:
#tarzxvfreiserfsprogs-3.x.0j.tar.gz
#cdreiserfsprogs-3.x.0j
#./configure
#make
#makeinstall
不幸的是,并沒有ext2toreiserfs之類的轉換工具,因此將/從ext2轉換為reiserfs就需要三步才能完成:
1.創建一個新的分區,并格式化為ReiserFS格式。
12.將數據從ext2分區拷貝到新分區。
13.將新分區加載為根(/)
創建新分區,ReiserFS并不需要一個特定的分區類型,因此就使用83(Linux):
#fdisk-l/dev/hda
/dev/hda928723126204825683Linux
/dev/hda1031273381204825683Linux
在新分區上創建ReiserFS文件系統:
#mkreiserfs/dev/hda10
加載新的分區:
#mount-treiserfs/dev/hda10/mnt/hda10
拷貝數據到新分區:
#cd/mnt/hda10
#tarcvlf-/tarxf-
編輯fstab來指向新的root:
/dev/hda10/reiserfsdefaults11
創建指向reiserfsck的一個符號鏈接因為RedHat啟動時將尋找fsck.reiserfs文件來掃描:
#ln-s/sbin/reiserfsck/sbin/fsck.reiserfs
保證系統lilo至少為21.6。這是第一個支持ReiserFS的版本,也可以在/boot目錄中使用小容量的ext2文件系統。但是升級lilo更好一些。也推薦使用GRUB來實現引導。
當在lilo.conf中使用新的內核時需要運行lilo程序。其中lilo.conf中需要將root指向新的內核所在分區。
- 上一篇:ASP技術WEB數據庫分析論文
- 下一篇:Linu操作系統研究論文