先說明一點:redhat所使用的kernel是不支持reiserfs的,所以要讓redhat的根分區
使用reiserfs,一般的方法是重編譯內核。這篇短文不是教你怎麼重編譯內核,這是誰都
會的,不用我原創。事實上這裡仍然使用redhat安裝時提供的內核。
論壇上有朋友問起redhat不重編譯內核在根分區使用reiserfs的方法,開始覺得不可
能,因為掛根分區是內核加載完之後做的第一件事情,那個時候還沒文件系統,而紅帽的
kernel不支持reiserfs,要支持的話必須 modprobe reiserfs 插入reiserfs的驅動,這
個時候連文件系統都沒有,更別說找到reiserfs.o這個文件了。
後來想想其實是有辦法的。仔細研究一下redhat的啟動過程就可以知道,內核加載完
後首先掛的不是安裝時所指定的硬盤分區(如hda1,hda5等),而是和vmlinuz-2.4.18.14同
在一個目錄下的/boot/initrd-2.4.18-14.img。initrd-2.4.18-14.img 這個文件是個壓
縮文件,解壓後被放到內存裡面,對內核來說就是ramdisk(/dev/ram0)。而這個ramdisk
的格式是ext2。在ramdisk加載完後運行一些ramdisk裡面指定的命令後才加載真正的根分
區設備:/dev/hda1,/dev/hda5等,然後ramdisk被卸載。
可以這樣理解,之所以有/boot/initrd-2.4.18-14.img這個東西,是讓redhat Linux
在掛根分區之前有能力作一些kernel沒做的處理(一般是加載scsi驅動)
問題簡單了:我們只要做個initrd文件,讓他加載reiserfs.o這個驅動,那麼reiserfs
的根分區不就能掛上去了嗎?事實上這個initrd文件也不用自己一步一步做,有個工具:
mkinitrd。執行:
mkinitrd aaa.img 2.4.18-14 --preload=reiserfs
在當前目錄下產生一個叫做aaa.img的initrd文件,把它拷到同kernel同一目錄,重
新編輯一下lilo.conf或grub.conf就可以了
又有了新問題:本文不是叫做“如何讓redhat8安裝時使用reiserfs”嗎,可redhat
的安裝程序裡面在分區的時候明明沒有提供reiserfs這個選項啊?沒錯,往下看。大家都
知道使用redhat的時候可以通過同時按下alt+f1 -- fn選擇多個終端,其實在安裝的時候
你也可以這樣做。試試看在安裝程序顯示完前面幾個沒用的消息之後按下 alt+f2,你得
到了一個shell!這樣做:手工使用fdisk分區(很簡單,一學就會),mkreiserfs把分區格
成reiserfs,然後在redhat安裝程序的分區工具(就是那個名字叫d什麼什麼的東西)裡只
選擇各個分區的掛載點就行了,然後選軟件包往下裝。
裝完之後重起會出錯提示沒辦法掛載根分區,這個時候就要用一張軟盤上的linux(或
其他可用的linux)把剛裝的東西掛上去,然後把上面所說的自己字所制作的那個aaa.img
拷過去,改grub.conf就ok了
本文次序上可能有點凌亂,大家將就著看吧,能看明白的自然知道我是什麼意思,看
不明白的應該也不會喜歡reiserfs。