CentOS 5 及 6 上安裝 Grub
此文件解釋如何在 CentOS 5 或 6 上安裝或重裝 Grub 開機程式。如果你的開機程式曾被損毀或破壞 —— 譬如安裝了不兼容的操作系統 —— 你必須重新安裝 Grub 開機程式。
Contents
安裝 Grub 涉及三個步驟:
建立 /boot/grub/grub.conf 設定檔。
在 /boot/grub 安裝 Grub 檔案。
安裝 Grub 開機程式。
第二及第三步可以透過 grub-install 單一個指令來完成。 另外,第二步亦可透過 grub 這個指令來完成。
1. Grub 慣用名稱
Grub 按以下方式為碟盤及分割區命名:
不論碟盤是 IDE(PATA)、SATA 或 SCSI 碟盤,也不論它們的普遍稱謂是 或 ,所有碟盤一律稱為 。
- 所有碟盤及分割區一律以 0 而不是 1 開始編號。
- 不論碟盤上有多少個主分割區,延伸分割區一律以 4 開始編號。
- 第一個數字代表碟盤;第二個數字(存在的話)代表分割區。
範例:
Grub 稱謂 |
意思 |
普遍稱謂 |
(hd0) |
第一個碟盤 |
/dev/sda(或 /dev/hda) |
(hd1) |
第二個碟盤 |
/dev/sdb(或 /dev/hdb) |
(hd0,0) |
第一個碟盤,第一個分割區 |
/dev/sda1(或 /dev/hda1) |
(hd1,0) |
第二個碟盤,第一個分割區 |
/dev/sdb1(或 /dev/hdb1) |
(hd1,1) |
第二個碟盤,第二個分割區 |
/dev/sdb2(或 /dev/hdb2) |
2. 建立或編輯 /boot/grub/grub.conf 設定檔
首先,你應該建立或編輯 /boot/grub/grub.conf 這個設定檔。 要是你的碟盤未曾安裝 Grub 開機程式,你應該先建立設定檔,然後才安裝開機程式。
在某些發行版本下,設定檔名為 /boot/grub/menu.lst。在 CentOS 下,/boot/grub/menu.lst 是條連結,它指向正式設定檔 /boot/grub/grub.conf。
此檔案含有以下資訊:
預設的開機分割區。
等候多久才自動啟動預設的分割區。
選擇性地提供一個開機畫面,在等候用戶輸入時顯示出來。
可供用戶選擇的各個開機分割區。
範例:
(請勿輸入行首的數字。它們索引範例檔後的解釋。)
1 default=0 2 timeout=10 3 splashimage=(hd0,5)/boot/grub/splash.xpm.gz 4 title CentOS 5.6 i686 5 root (hd0,5) 6 kernel /boot/vmlinuz-2.6.18-238.19.1.el5.centos.plusPAE ro root=/dev/sda6 rhgb noquiet 7 initrd /boot/initrd-2.6.18-238.19.1.el5.centos.plusPAE.img 8 title Linux Mint 11 9 root (hd0,9) 10 kernel /boot/vmlinuz-2.6.32-26-generic-pae ro root=/dev/sda10 11 initrd /boot/initrd.img-2.6.32-26-generic-pae
|
假若你把 /boot 放在獨立的分割區內,請參閱以下的備註。 |
解釋:
1. 預設啟動清單內的首個分割區。請注意 Grub 的編號以 0 開始,而不是 1。
2. 停頓 10 秒等候用戶輸入,然後啟動預設分割區。
3. 等候用戶輸入時顯示開機畫面(選擇性的)。
4. 第一個可用的開機分割區。在此範例中,它是預設的分割區(見行 1)。
5. 按 Grub 的命名方式指定主分割區。
6. 此行包含以下 5 部份:
kernel /boot/vmlinuz-2.6.18-238.19.1.el5.centos.plusPAE
以慣用的命名方式指出內核(vmlinuz)的位置。
ro
首先以 ro(唯讀)方式掛載分割區,以便在有需要時執行 fsck。
root=/dev/sda6
以慣用的命名方式指出主分割區的位置。你也可透過檔案系統的 UUID(通用唯一識別碼)來指定主分割區,例如:root=UUID=134d2a24-2699-4b0c-823b-1e13633f3b07。CentOS 現在預設採用 UUID。你可以利用這個指命來找出一個檔案系統的 UUID:tune2fs -l /dev/sda6。
rhgb
採用圖像式開機(Red Hat 圖像式開機)。需要文字模式開機時可刪除。
noquiet
輸出詳細信息。刪除後可減低詳細度。
7. 以慣用的命名方式指出初始化 ramdisk initrd 或 initramfs 的位置。
8. 第二個可用的開機分割區。
9. 按 Grub 的命名方式指定主分割區。
10. 此行包含以下 3 部份:
kernel /boot/vmlinuz-2.6.32-26-generic-pae
以慣用的命名方式指出內核(vmlinuz)的位置。
ro
首先以 ro(唯讀)方式掛載分割區,以便在有需要時執行 fsck。
root=/dev/sda10
以慣用的命名方式指出主分割區的位置。另外請參閱第 6 項有關 UUID 的備註。
11. 以慣用的命名方式指出初始化 ramdisk initrd 或 initramfs 的位置。
3. 利用 grub-install 安裝 Grub
當可行時,安裝 Grub 的最簡易方法是利用 grub-install 這個指令。
此指令將會:
在現有分割區的 /boot/grub 內安裝所需檔案。
在透過傳統命名方式所指定的位置安裝開機程式。
範例:
指令 |
含意 |
grub-install /dev/sda |
在現有分割區的 /boot/grub 目錄內安裝 Grub 的檔案。在首個碟盤的主啟動記錄(MBR)內安裝開機程式。這是安裝 Grub 的推薦方式。 |
grub-install /dev/sda1 |
在現有分割區的 /boot/grub 目錄內安裝 Grub 的檔案。在首個碟盤的第一個分割區內安裝開機程式。 |
grub-install /dev/sda2 |
在現有分割區的 /boot/grub 目錄內安裝 Grub 的檔案。在首個碟盤的第二個分割區內安裝開機程式。 |
[root@localhost ~]# grub-install /dev/sda Installation finished. No error reported. This is the contents of the device map /boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. # this device map was generated by anaconda (hd0) /dev/sda [root@localhost ~]#
4. 替代方法:單單利用 grub 安裝開機程式
你也可利用 grub 這個指令來安裝開機程式,它卻不會在 /boot/grub 內安裝 Grub 的檔案。要是開機程式被蓋過或損壞了,此方法可修復 Grub 的安裝。
執行 grub。
你可選擇執行 find /boot/grub/stage1 尋找哪個分割區在 /boot/grub 內含有 Grub 所需的檔案。如果你的 /boot 採用獨立分割區,請執行 find /grub/stage1。
執行 root [按 Grub 方式命名的分割區] 來指定哪個分割區的 /boot/grub 內含有 Grub 檔案及備有 /boot/grub/grub.conf。
利用 setup [按 Grub 方式命名的開機程式位置] 來安裝開機程式。
執行 quit 來離開 Grub 程式。
範例:
[root@localhost ~]# grub Probing devices to guess BIOS drives. This may take a long time. GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> find /boot/grub/stage1 (hd0,5) (hd0,9) grub> root (hd0,5) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,5)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded Done. grub> quit
5. 備註及警告
5.1. 以獨立分割區存放 /boot
要是你的 /boot 放在獨立的分割區內,/boot/grub/grub.conf 內以 root、kernel 及 initrd 起首的行必須有下列改動:
以 root 起首的那一行必須指定 /boot 的分割區,而不是 / 的分割區。
以 kernel 起首的那一行必須假設內核(vmlinuz)位於 /,而不是 /boot。然而,該行中 root 指令必須指定 / 的分割區,而不是 /boot 的分割區。
以 initrd 起首的那一行必須假設初始化 ramdisk(initrd 或 initramfs)位於 /,而不是 /boot。
範例:
/boot 的分割區是 /dev/sda1,或 hd(0,0)。/ 的分割區是 /dev/sda2,或 hd(0,1)。/boot/grub/grub.conf 檔須含有下列設定:
title CentOS 5.6 i686 root (hd0,0) kernel /vmlinuz-2.6.18-238.19.1.el5.centos.plusPAE ro root=/dev/sda2 initrd /initrd-2.6.18-238.19.1.el5.centos.plusPAE.img
5.2. Grub 及 ext4fs
CentOS 5 的 Grub 並不兼容 ext4fs。更準確來說,它無法讀取 ext4fs 預設採用的 256-byte inodes。
可行的解決方法有兩個:
- 採用 CentOS 6 的 Grub,它能正確地支援 ext4fs。
利用 mkfs.ext4 -I 128 這個指令建立一個擁有 128-byte inodes 的 ext4 檔案系統。這卻意味某些 ext4fs 功能將不可使用。
5.3. 在開機程式運用 Grub 的指令行
你可在開機程式內直接輸入 Grub 的指令。在開機選單按 c,然後輸入那些出現在 /boot/grub/grub.conf 設定檔內的 Grub 指令。
當設定檔出錯時,這個功能很有用。
範例:
grub> find /boot/grub/stage1 (hd0,5) grub> root (hd0,5) grub> kernel /boot/vmlinuz-2.6.18-238.19.1.el5.centos.plusPAE ro root=/dev/sda6 grub> initrd /boot/initrd-2.6.18-238.19.1.el5.centos.plusPAE.img grub> boot
你也可以透過 e 這個指令在 Grub 開機程式內編輯 /boot/grub/grub.conf 內的某行。舉個例說,要令 Linux 以單一用戶模式(runlevel 1)啟動,編輯含有 kernel 的那一行並在行末加入 1。按著按 b 來啟動它。
5.4. 利用 Grub 來啟動 Windows 分割區
要使用 Grub 來啟動一個 Windows 分割區,請在 /boot/grub/grub.conf 加入類似以下的內容:
範例:
title Windows rootnoverify (hd0,0) makeactive chainloader +1
6. 更多資訊
欲取得 Grub 的完整資訊,請執行 info grub。
英文版本由 YvesBellefeuille 建立
Translation of revision 20