[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

CentOS 5 及 6 上安裝 Grub

此文件解釋如何在 CentOS 5 或 6 上安裝或重裝 Grub 開機程式。如果你的開機程式曾被損毀或破壞 —— 譬如安裝了不兼容的操作系統 —— 你必須重新安裝 Grub 開機程式。


安裝 Grub 涉及三個步驟:

  1. 建立 /boot/grub/grub.conf 設定檔。

  2. /boot/grub 安裝 Grub 檔案。

  3. 安裝 Grub 開機程式

第二及第三步可以透過 grub-install 單一個指令來完成。 另外,第二步亦可透過 grub 這個指令來完成。


1. Grub 慣用名稱

Grub 按以下方式為碟盤及分割區命名:

  1. 不論碟盤是 IDE(PATA)、SATA 或 SCSI 碟盤,也不論它們的普遍稱謂是 hdsd,所有碟盤一律稱為 hd

  2. 所有碟盤及分割區一律以 0 而不是 1 開始編號。
  3. 不論碟盤上有多少個主分割區,延伸分割區一律以 4 開始編號。
  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. 預設的開機分割區

  2. 等候多久才自動啟動預設的分割區。

  3. 選擇性地提供一個開機畫面,在等候用戶輸入時顯示出來。

  4. 可供用戶選擇的各個開機分割區

範例:

(請勿輸入行首的數字。它們索引範例檔後的解釋。)

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

ArtWork/WikiDesign/icon-admonition-alert.png

假若你把 /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 initrdinitramfs 的位置。

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 initrdinitramfs 的位置。


3. 利用 grub-install 安裝 Grub

當可行時,安裝 Grub 的最簡易方法是利用 grub-install 這個指令。

此指令將會:

  1. 在現有分割區的 /boot/grub 內安裝所需檔案。

  2. 在透過傳統命名方式所指定的位置安裝開機程式。

範例:

指令

含意

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 的安裝。

  1. 執行 grub

  2. 你可選擇執行 find /boot/grub/stage1 尋找哪個分割區在 /boot/grub 內含有 Grub 所需的檔案。如果你的 /boot 採用獨立分割區,請執行 find /grub/stage1

  3. 執行 root [按 Grub 方式命名的分割區] 來指定哪個分割區的 /boot/grub 內含有 Grub 檔案及備有 /boot/grub/grub.conf

  4. 利用 setup [按 Grub 方式命名的開機程式位置] 來安裝開機程式。

  5. 執行 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 內以 rootkernelinitrd 起首的行必須有下列改動:

範例:

/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

可行的解決方法有兩個:


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. 更多資訊


英文版本由 YvesBellefeuille 建立

Translation of revision 20


2023-09-11 07:23