在 CentOS 7 上設置 grub2

在 CentOS 7 上設置 grub2

此文章主要以 Things to Know About Grub2 為基礎,而對象是那些開啟 /etc/grub2.cfg(或 /boot/grub2/grub.cfg)編輯開機選單的用戶。

另外請參閱 上游關於 grub2 的文檔 和 grub 的使用手冊

 

1. 開機選單是自動建立出來的

請勿嘗試手動編輯開機選單,因為它是按照 /boot/ 目錄內的檔案自動建立出來的。然而你可以調整 /etc/default/grub 檔內定義的通用設定,及在 /etc/grub.d/40_custom 檔內加入個別自訂項目。

/etc/default/grub 檔的內容如下:

GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

通用於所有項目的內核選項都透過 GRUB_CMDLINE_LINUX 行來定義。舉個例說,要是你想看見詳細的開機訊息,刪除 rhgb quiet。要是你想看見標準的開機訊息,只刪除 rhgb。執行以下指令便能套用更改了的設定:

[root@host ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.14.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.14.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-605f01abef434fb98dd1309e774b72ba
Found initrd image: /boot/initramfs-0-rescue-605f01abef434fb98dd1309e774b72ba.img
done

UEFI 系統上的指令是 grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

 

2. 如何定義預設項目

若要列出系統開機時顯示的所有選項,請執行以下指令:

[root@host ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux 7 (Core), with Linux 3.10.0-229.14.1.el7.x86_64
1 : CentOS Linux 7 (Core), with Linux 3.10.0-229.4.2.el7.x86_64
2 : CentOS Linux 7 (Core), with Linux 3.10.0-229.el7.x86_64
3 : CentOS Linux 7 (Core), with Linux 0-rescue-605f01abef434fb98dd1309e774b72ba

又或者:

[root@host ~]# grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2

預設的項目是透過 /etc/default/grub 檔內的 GRUB_DEFAULT 行來定義。不過,要是 GRUB_DEFAULT 行被設定為 saved,這個選項便儲存在 /boot/grub2/grubenv 檔內。你可以這樣檢視它:

[root@host ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-229.14.1.el7.x86_64) 7 (Core)

/boot/grub2/grubenv 檔是不能手動編輯的。請採用以下指令:

[root@host ~]# grub2-set-default 2
[root@host ~]# grub2-editenv list
saved_entry=2

留意上述 awk 指令輸出的第一個項目的編號是 0。

現在你可重新啟動系統。

 

3. 修復模式及緊急模式

Linux 0-rescue-… 這個選項會令系統進入修復模式。這等同於單獨用戶模式。

此外,CentOS 並提供了一個緊急模式。在這模式下,systemd 啟動後便會立刻出現一個指令殼。其它程序都不會被啟動,而主檔案系統將會以唯讀模式掛載。其它檔案系統都不會被掛載。

要進入緊急模式,請在 grub2 的選單按 e 鍵來編輯設定。然後在內核選項的末端加入 systemd.unit=emergency.target

[如果你與 systemd 關係良好 :-) 你可以在 /usr/lib/systemd/system/emergency.service 檔內檢視緊急模式時發生甚麼事情。]