趕快來筆記一下,不然遇到每次都要找半天...
一般來說若是手上的 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
記得完工後重新開機(廢話)。