根據網友 Seqic 反映,在安裝了 Linux 和 Windows 雙系統之後,不知如何再啟動 Windows (因為系統使用 Linux 的引導程式了)。通常,這是因為安裝 Linux 時沒有為 GRUB 做好相應的配置。
Seqic 使用的是 Fedora 12,不知是這個發行版預設不對 GRUB 進行配置,還是在單系統時不對 GRUB 進行配置,我在安裝 Fedora 12 時也沒有遇到 GRUB 配置介面。
什麼是GRUB
在為系統配置 GRUB 之前,先瞭解一下 GRUB 比較好,以下是摘自“維基百科”的內容:
“GRUB 是 GNU GRUB 的簡稱,是來自 GNU 項目的一個多系統引導程式。它允許使用者可以在電腦內同時擁有多個作業系統,並在電腦啟動時選擇希望啟動並執行作業系統。
GRUB 非常輕便。它支援多種可執行格式,除了可適用於支援多啟動的作業系統外,還通過鏈式啟動功能支援諸如 Windows 和 OS/2 之類的不支援多啟動的作業系統。GRUB 支援所有的 Unix 檔案系統,也支援 Windows 適用的 FAT 和 NTFS 檔案系統,還支援 LBA 模式。GRUB允許使用者查看它支援的檔案系統裡檔案的內容。”
簡單地講,使用 GRUB 實現多系統引導,就是通過編輯 grub.conf 設定檔,使系統啟動時會出現一個多作業系統選擇菜單,選擇 Linux 則啟動 Linux,選擇 Windows 就啟動 Windows,其它系統也一樣 :D
“grub.conf 設定檔的絕對路徑是 /boot/grub/grub.conf,需要 root 許可權才可以讀取和編輯這個檔案。”
GRUB設定檔
GRUB 是 Linux 中最主要的多系統引導程式,使用它可以為 Unix、Linux、Windows、OS/2 等作業系統製作多系統引導菜單,並對這些作業系統進行引導啟動。
對於 GRUB 的表現和行為控制,主要通過編輯 grub.conf 設定檔得以實現,為了之後更好的自訂引導菜單,我們先通過以下簡單的樣本認識 grub.conf 設定檔中的各個選項,以及它們的作用。
- #boot=/dev/sda
- default=0
- timeout=0
- splashimage=(hd0,0)/grub/splash.xpm.gz
- hiddenmenu
-
- title Fedora (2.6.32.9-67.fc12.i686.PAE)
- root (hd0,0)
- kernel /vmlinuz-2.6.32.9-67.fc12.i686.PAE ro root=/
- initrd /initramfs-2.6.32.9-67.fc12.i686.PAE.img
-
- title Windows 7
- ...
-
說明:
default - 預設引導的菜單條目。在本例中,預設引導第一個條目 Fedora (2.6.32.9-67.fc12.i686.PAE)。如果將 default 的值改成 1, 則會預設引導 Windows 7。
timeout - 自動選擇預設引導前菜單顯示的時間。本例中,如果使用者沒有在 30 秒之內選擇作業系統,則會預設引導第一個條目 (即default 0)
splashimage - 指定 GRUB 引導菜單的介面風格。(hd0,0)/grub/splash.xpm.gz,是指在第一塊硬碟的第一個分區(hd0,0) 中,使用 grub 目錄下的 splash.xpm.gz 檔案作為介面風格。一般來講,無需更改這個配置 :D
hiddenmenu - 隱藏 GRUB 引導菜單。如果不想在啟動時顯示 GRUB 引導菜單,則刪除此條目。
系統引導條目
title - 引導條目的名稱。通常使用作業系統的名稱做為標識,你可以自行更改這個名稱,例如使用 "Fedora 12", "Fedora", 或者是 "MyLinux" 都可以。這個標題將顯示在 GRUB 引導菜單中。
root - 作業系統核心和引導檔案所在的磁碟分割。(hd0,0) 表示第一塊硬碟的第一個分區,(hd0,2) 表示第一塊硬碟的第3個分區,依次類推。
kernel - 系統核心及 boot 命令用到的參數。
initrd - 系統引導程式
kernel 和 initrd 中指定的檔案都是相對於 root 中所設定的硬碟分區,例如本例中的 (hd0,0) 是機器上的 /boot 分區,kernel 的位置實際上是 /boot/vmlinuz-2.6.32.9-67.fc12.i686.PAE
使用GRUB引導Windows
不像 Unix 和 Linux,Windows 屬於不支援多啟動的作業系統,簡單的在 grub.conf 設定檔中使用 kernel 和 init 選項,無法實現對 Windows 的引導。要能夠通過 GRUB 引導 Windows,需要使用 GRUB 的鏈式(chain-load)啟動功能。
提醒:查看和編輯 /boot/grub/grub.conf 都需要 root 許可權,並且在編輯 grub.conf 之前,最好先為這個檔案做一份備份。
對於設定檔的備份,通過使用 cp 命令即可完成
- ~]# cp /boot/grub/grub.conf /boot/grub/grub.conf.bak
-
一般情況
要使用 GRUB 的鏈式啟動功能引導 Windows,一般情況下,只需要向 grub.conf 設定檔中添加以下內容即可。
- title Windows 7
- rootnoverify hd(0,0)
- makeactive
- chainloader +1
多硬碟的情況
如果你的機器上有兩塊以上的硬碟,並且 Windows 作業系統安裝在第二塊硬碟上,則還需要在配置中加入 map 命令,它們的作用是更改兩塊硬碟的映射關係
- title Windows 7
- map (hd0) (hd1)
- map (hd1) (hd0)
- rootnoverify hd(0,0)
- makeactive
- chainloader +1
-
多主要磁碟分割的情況
使用 GRUB 引導 Windows 可能出現的另一個問題,是同一塊磁碟上安裝了多個 Windows 作業系統,這樣一來硬碟上就會有多個主要磁碟分割。要讓 GRUB 正確的引導某個 Windows 作業系統,你需要對 GRUB 隱藏不必要的主要磁碟分割。假設在第一個分區 hd(0,0) 上安裝了 Windows XP,在第二個分區 hd(0,1) 上安裝了 Windows 7,而你希望引導 Windows 7,則應該使用以下配置
- title Windows 7
- unhide hd(0,1)
- hide hd(0,0)
- rootnoverify hd(0,1)
- makeactive
- chainloader +1
-
一般而言,大多數使用者都屬於第一種情況,只需要簡單的幾行配置就能夠實現 Windows 的引導了。