在 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/grub2.cfg 這個檔名指向 grub.cfg,而它的位置視乎架構而定。存取檔案時採用絕對路徑是較佳的做法,在維修系統時更甚。預設的項目是透過 /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)
/etc/default/grub 檔內另一個有用的選項是:
GRUB_SAVEDEFAULT=true
連同 GRUB_DEFAULT=saved,它確保現時選取的開機項目會被設定下次開機採用 —— 適用於雙重開機的系統,因為更新 Windows 須要數次重新開機。
/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 檔內檢視緊急模式時發生甚麼事情。]
4. Stage 1.5(core.img)的收錄位置
grub/grub2 的檔案都位於 /boot 檔案系統內。在一個傳統(非 UEFI)的 BIOS 環境下,首先會載入一個開機映像(grub 是 stage1,grub2 是 boot.img),接著是載入 stage 1.5(grub2 是 core.img),它會啟動 /boot 檔案系統內的程式。stage 1.5 的收錄位置可以是緊接 MBR,或在 /boot 檔案系統的分割區內。在 CentOS 7,預設的位置是緊接 MBR。見 此圖像。
Translation of revision 10