之前的那篇雖然可以成功開機,但是有一些問題沒有解決,這篇是解決那些問題的。
一、啟用 LABEL
UUID 雖然可以正常使用,但是實在很難記,又不人性化,因此最後還是決定用磁碟標籤來做。
首先,要先知道你的根目錄磁區的磁碟路徑及檔案系統,這裡假設路徑是 /dev/sda1。
reiserfstune -l USBLinux /dev/sda1 # 如果你的系統是 ReiserFS
e2label USBLinux /dev/sda1 # 如果是 Ext2/Ext3
接著,更改 /etc/fstab 以及 /boot/grub/menu.lst 的設定,把本來 UUID=XXXX-XXXX 的地方,全部改成 LABEL=USBLinux
Note:這件事請使用 LiveCD 之類的來做,總之在做這件事時你的根目錄磁碟最好不要是被掛載的狀態。
二、關機時清除 UUID/LABEL 的快取
由於系統在尋找 UUID 及 LABEL 時,會先從快取檔裡找,所以當你把這個隨身作業系統插到別的電腦上用時,在 Mount local filesystem 的時候,常常會和你抱怨 /dev/XXX 不存在。
這個我們可以利用關機時刪除快取檔的方式來解決,我們直接使用開關機時都會跑的 local init script 來做這件事。
vi /etc/conf.d/local
打開這個檔案後,移到 local stop,並在 return 0 那一行之前,加入 rm -f /etc/blkid* 這個指令。
這樣子,每次關機的時候,就會進行快取檔的刪除。
三、更改 linuxrc
如果你發現系統每次開機,都會在 Determining root device 那一行停下來,要按 Enter 才會繼續,那麼請照著這一節做。
這是由於系統偵測載入模組後,就會直接掛載根目錄磁區,可是這時其實硬碟還沒就續,所以會出現這個狀況。
這個要改開機時使用的程式,比較麻煩,但還是可以解決。
mkdir tmp # 建立一個暫存資料夾
cd tmp
zcat /boot/initramfs-genkernel-xxxx | cpio -vi # 解壓縮開機用的程式
cp init ~/
vi ~/init
開啟這個檔案後,找到 good_msg 'Determining root device' 這一行程式碼,然後在其下加入下面的程式碼。那個 10 請自行試驗適當的數值,可以縮短開機時間。
sleep 10
改完後,要重新建立 initrd 檔。
genkernel --disklabel --linuxrc=/root/init initrd
這樣子,理論上就真的有一個可以到處跑的 Gentoo 囉。:D
回響