2007年1月28日 星期日

用 Knoppix 修復 GRUB

趕快來筆記一下,不然遇到每次都要找半天...

一般來說若是手上的 Linux 機器有問題,我都會使用 Knoppix 來當作救援工具。 Knoppix 本身就是一個完整的可開機系統,拿來當救 援的媒介非常的適合。比起在 Windows 的平台上,隨時都要準備一張救援磁碟片,然後當某一天你的 Windows 掛點了,你才使用這張幾乎甚麼都不能做的救援磁片(而且還不知道開不開的了機),意圖拯救你爛掉的 Windows ,還要好上太多倍了。

這次我遇到的問題是, Debian 在安裝過程中,無法正常的將 Grub 裝到硬碟的MBR 磁區。我猜測這應該是我手上的 Debian 安裝光碟的 Grub 認不出 SATA 的硬碟,抑或是只是單純的一個 bug...

所以要解決這個問題,首先得用 Knoppix 開機,進去之後先將原硬碟上的根目錄掛上來(假設根目錄位置在/dev/sda1):

#mount /dev/sda1 /mnt/sda1
但光是這樣還不夠,這樣子等等使用 chroot 切過去的時候,會造成系統無法認得 /dev 下面的裝置。所以還要加上 dev 參數,讓 Knoppix 所辨認出來的裝置,複製一份到 chroot 的系統中:
#mount -o dev /dev/sda1 /mnt/sda1
如果你已經掛載過了,那就加上remount,讓他重新以新的參數掛載一次:
#mount -o remount,dev /dev/sda1 /mnt/sda1
然後就用 chroot 切到硬碟的系統中:
#chroot /mnt/sda1
接下來換到要設定 Grub 的部份。由於 Grub 沒有正常的安裝 boot loader 到硬碟的 MBR 中,所以我們必須先手動設定 Grub 的設定檔 /boot/grub/menu.lst 。 Debian 的使用者很方便,系統會提供一個 grub-update 的指令,讓你產生預設的 menu.lst 。其他 distro的使用者,請自行尋找 Grub 套件中所提供的範例檔(比如 /usr/share/doc/grub-0.95/menu.lst),將他複製到 /boot/grub/menu.lst 。當然,其中的設定細節請參閱相關文件,在這邊不詳述。

除了 menu.lst ,還有一個 device.map 檔案需要設定。在 Grub 設定檔中,統一用(hd0, 0)的表示方式來代表哪一顆硬碟的哪一個磁區,可是 Grub 不會知道你的 hd0 到底是 /dev/hda,還是 /dev/sda 。所以我們要手動建立對應的檔案,那就是 device.map 。這個檔案一般都會自動產生,除非你像我一樣, Grub 沒有裝好,那就得自己來了。此檔的路徑一般都會在 /boot/grub/device.map ,所以我們在此檔新增類似這樣的內容:
(hd0) /dev/sda
(hd1) /dev/sdb
這樣的意思是代表:在 Grub 設定檔中所謂的 hd0 就是指向到 /dev/sda 這顆硬碟,其餘依此類推。

最後只要執行 grub-install,將 boot loader 裝到 MBR 即可:
#grub-install /dev/sda
記得完工後重新開機(廢話)。

0 意見: