Grub2配置

此頁由 Linux Wiki用戶Chenxing 於 2012年6月13日 (星期三) 06:17 的最後更改。

出自Linux Wiki

提示:此文已超过 11 年(4307 天)未更新,如发现内容过时或有误,欢迎改进:)

GRUB,全稱the GRand Unified Bootloader,是常用的引導程序,一般負責在開機時裝載操作系統內核。GRUB 2是最近流行起來的GRUB新版本。

目錄

Grub 2與Grub

Grub 2雖在名稱上是Grub的升級版,但其代碼實際上被完全重寫了。[1],對於最終用戶來講,Grub 2帶來了若干改進,如:

  • 自動搜索可用的內核和硬盤中的可用系統。
  • 可支持NTFS等更多分區格式。
  • 可啟動Windows、Mac OS X等多種系統。
  • 更人性化的設計,如鍵入命令時TAB補全很強大,輸出很長時會分頁顯示等。
  • 界面的定製更加靈活

從配置的角度,Grub 2主要有以下幾點不同[2] [3]

  • /boot/grub/menu.lst/boot/grub/grub.cfg所取代
  • 主配置文件grub.cfg不能直接被用戶修改,而是由系統自動生成
  • 每當安裝內核、更新Grub 2或用戶主動運行grub-mkconfig -o /boot/grub/grub.cfg(曾經是update-grub)後,Grub 2會根據用戶配置文件重新生成grub.cfg
  • 可編輯的Grub 2配置文件主要包括/etc/default/grub、和/etc/grub.d/下的各文件。
  • 分區命名方式有變,第一個分區現在是1而不是0,但第一個設備仍然以0開始計數,如(hd0, 1)表示第一塊硬盤上的第一個分區。
Note.gif
注意:
使用Grub 2時,不要手動編輯/boot/grub/grub.cfg!否則所做的修改在Grub更新或安裝內核等情況下消失。有些文檔建議先賦予grub.cfg寫權限再編輯之,這是非常不可取的……
Hint.gif
提示:
修改了配置文件後,一定要運行update-grub才能使新的配置生效。

安裝

多數系統已經預裝了Grub 2。相比於為系統安裝Grub 2軟件而言,更常見的任務是將在Grub 2安裝到硬盤引導區。(如安裝Windows後Grub 2會被Windows清出硬盤MBR。。。)

Grub 2的工具多是grub-開頭的一系列命令,而將其安裝到硬盤上的命令則是grub-install

grub-install --root-directory=/ /dev/sda

其中root-directory用於指明存放/boot文件的分區。在用恢復盤啟動時,應先掛載裝有Grub 2的系統,再相應地執行grub-install指令。

/dev/sda表示安裝到sda的MBR。Grub 2亦可安裝到分區的引導扇區,但不建議這麼做(不小心的話會破壞某些類型的分區,如修復被grub覆蓋的ntfs分區引導扇區是挺麻煩的)。

全局配置

影響Grub 2行為的主要配置存放在/etc/default/grub中,可實現修改啟動項、更改分辨率、禁用操作系統探測器等。由於配置文件本身可讀性很好,僅介紹幾個不大直觀的項。完整的參數介紹可以參見[2]BURG的文檔

默認啟動項

默認啟動項由/etc/default/grub中的GRUB_DEFAULT設置,其取值有如下幾種:

數字 (如GRUB_DEFAULT=0) 
從0開始的菜單項編號,如果有子菜單,則形如 2>0
saved 
默認啟動最後一次選中的啟動項。使用此選項時,使用grub-set-default可設置默認啟動項,grub-reboot可設置僅影響下次啟動時的默認啟動項。
啟動項名稱
由於啟動項的序號可能是動態改變的,使用啟動項的名稱設置默認值有時更穩妥,如GRUB_DEFAULT="Ubuntu, Linux 2.6.31-9-generic"

更新配置後,不要忘了運行update-grub命令。

自定義菜單項

Hint.gif
提示:
有些發行版(如Archlinux)由於未安裝os-prober,不能自動探測硬盤上的其它操作系統,裝上os-prober軟件即可解決此問題。[4]

菜單項一般是由操作系統探測器(os-prober)自動生成的,但在某些情況下(如硬盤安裝時)也需要手動修改自定義菜單項。

自定義菜單項一般存放在/etc/grub.d/40_custom文件中。

一個簡單的菜單項定義如下[2]

menuentry "System Rescue CD" {
  set root=(hd0,8)
  linux /sysrcd/rescuecd subdir=sysrcd setkmap=us
  initrd /sysrcd/initram.igz
}

其中,第一行set root=對應以前Grub的root命令;linux對應以前的kernel命令;initrd命令功能與Grub 1相同。

又如[4]

menuentry "Windows XP" {
    set root=(hd0,3)
    chainloader (hd0,3)+1
}

此處set root=對應老Grub的rootnoverify

請再次注意,Grub 2中分區號從1開始,但磁盤號仍然是從0開始的。。(詳情請見Grub磁盤分區表示方法

更多的例子,可以參考/boot/grub/grub.cfg中自動生成的代碼。

更新配置後,不要忘了運行update-grub命令。

美化

有多主題可選的BURG截圖

Grub 2支持修改背景、前景顏色或使用圖片做背景,但一般來講配色是一個痛苦的過程……如有美化需求,建議參考文章用BURG美化GRUB


恢復模式 (Rescue Mode)

如果Grub2啟動失敗,會進入恢復模式,此時,屏幕上會顯示 grub rescue> 字樣。此時無需緊張,只要Grub2還在硬盤上,就可使用該控制台將其啟動[5][4]

# 在 grub rescue> 环境下输入如下命令, (hdX,Y)为包含Grub2的分区
set prefix=(hdX,Y)/boot/grub
insmod (hdX,Y)/boot/grub/normal.mod
normal

別忘了把(hdX,Y)換成Grub2所在的分區(具體見Grub磁盤分區表示方法)。執行後應該就能看到啟動菜單了。

常用命令小結

在系統命令行中使用的命令:

# 重新生成配置文件
grub-mkconfig -o /boot/grub/grub.cfg
 
# 将Grub 2安装到硬盘引导扇区
grub-install --root-directory=/ /dev/sda

參考資料

  1. GNU GRUB Manual 1.99
  2. 2.0 2.1 2.2 Ubuntu Community Documentation: Grub2
  3. Lesca is thinking…:一、GRUB, GRUB2: 區別、比較
  4. 4.0 4.1 4.2 ArchWiki: GRUB2
  5. Ubuntu在rescue模式下啟動並修復

本文对您有帮助?分享给更多朋友!

反馈与讨论

发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。
简体繁体转换