1. GRUB2配置文件
GRUB2 的配置文件通常為 /boot/grub2/grub.cfg
,雖然此文件很靈活,但是我們並不需要手寫所有內容。可以通過程序自動生成,或是直接修改生成之后的文件。
2. 簡單配置
通常情況下簡單配置文件 /etc/default/grub
,然后用程序 grub-mkconfig
來產生文件 grub.cfg
。
文件 /etc/default/grub
是一個 shell 腳本,通常僅是 KEY=value
這樣的連續行。如果值包含空格或特殊字符,必須用 "
引用。詳看 GRUB Manual: Simple configuration。其常用關鍵字如下:
2.1. GRUB_DEFAULT
默認菜單項。默認值為 0
。可選值有:
值 | 說明 |
---|---|
<number> | 菜單項的數字序號,從 0 開始 |
saved | 被 GRUB_SAVEDEFAULT 保存的上次選擇項 |
<id> | 菜單項的唯一標識(menuentry ... --id xxxx) |
2.2. GRUB_TIMEOUT
自啟超時時間。默認值為 5
。可選值有:
值 | 說明 |
---|---|
0 | 不等待 |
-1 | 永久等待 |
其他 | 等待對應秒 |
2.3. GRUB_TIMEOUT_STYLE
倒計時顯示風格。默認值為 menu
。可選值有:
值 | 說明 |
---|---|
menu | 顯示菜單 |
countdown | 顯示倒計時 |
hidden | 隱藏 |
2.4. GRUB_DISTRIBUTOR
被用於生成菜單項的更多信息。
2.5. GRUB_TERMINAL
設置輸入、輸出終端類型。可選值有:
值 | 說明 |
---|---|
console | 控制台 |
serial | 串口 |
serial_<port> | 具體串口號 |
gfxterm | 圖形模式輸出 |
vga_text | VGA 文本輸出 |
2.6. GRUB_CMDLINE_LINUX
添加到菜單項中的啟動 linux
的命令行參數。
2.7. GRUB_DISABLE_RECOVERY
設置此選項為 true
,禁止產生恢復模式菜單項。
2.8. GRUB_DISABLE_SUBMENU
默認情況下,grub-mkconfig
會將低版本內核放在高版本內核子菜單里。設置此選項為 true
,所有菜單項都將出現在頂層。
2.9. GRUB_DISABLE_OS_PROBER
默認情況下,grub-mkconfig
會使用外部程序 os-prober
檢測其他已安裝的操作系統,並產生菜單項。設置此選項為 true
來禁止它。
3. 直接修改
我們也可以直接修改由 grub-mkconfig
生成之后的 grub.cfg
,其由 GRUB 內建的腳本語言組成,和 GNU bash
語法非常相似,比如定義函數、判斷語句等。以下列出一些可調用的命令,詳看 GRUB Manual: Commands。
注意:
命令
其中個別命令只能在
grub.cfg
中使用,不能在命令行模式使用。比如menuentry
等。指定設備
定位一個文件,需要指定它所在設備分區與路徑。指定設備的語法如下:
(<device-type><device-number>,<partition-number>)
注解:
<device-type>
設備類型,有如下幾種常用類型:
類型 說明 hd 硬盤 fd 3.5 英寸軟盤 nd 網絡 cd CD/DVD等 <device-number>
BIOS能夠識別的設備號,下標從
0
開始計數。比如hd0
表示主硬盤,等價於 linux 的/dev/hda
。<partition-number>
分區號,比如
modos2
表示第2
個分區。下標從1
開始計數。
3.1. menuentry
定義 GRUB 的菜單項。當選中菜單項時,GRUB 將執行括號內的命令。如果最后的命令返回成功
,並且內核被加載時,將自動執行 boot
命令。此命令不能在命令行模式執行。語法格式如下:
menuentry <title> [--class=<class> …] [--users=<users>]
[--unrestricted] [--hotkey=<key>] [--id=<id>] [<arg> …] { <command>; … }
注解:
- <title>
菜單項的顯示名稱。
[--class=<class> …]
將菜單項指定為某一類。可指定多個類別。不同的菜單主題可能會顯示不同的菜單類別。
[--users=<users>]
授予指定用戶訪問菜單項的權利。
[--unrestricted]
允許所有用戶訪問此菜單項。
[--hotkey=<key>]
給菜單項指定一個快捷鍵。
[--id=<id>]
給菜單項指定一個唯一的
ASCII
字符串標識。[<arg> …]
和 <title> 一起作為參數,傳遞給大括號里將要執行的命令。<title> 總是被指定為
$1
。
3.2. boot
啟動已加載的內核。
3.3. help
顯示內建命令的幫助信息。語法格式如下:
help [<pattern> …]
注解:
[<pattern> …]
如果省略,則顯示所有命令的簡短描述。否則,顯示指定命令的詳細描述。
3.4. linux
從指定文件加載內核,並傳遞啟動參數。任何 initrd
必須在此命令后重加載。語法格式如下:
linux <file> …
3.5. initrd
為 linux
內核加載初始的 ramdisk
,並在 linux
啟動的內存區域,設置恰當的參數。語法格式如下:
initrd <file>
3.6. search
查找設備。語法格式如下:
search [--file|--label|--fs-uuid] [--set [<var>]] [--no-floppy] <name>
注解:
[--file|--label|--fs-uuid]
分別表示按文件、文件系統標志、文件系統
UUID
查找設備。[--set [<var>]]
第一個找到的設備會被設置為環境變量
var
的值。默認變量是root
。[--no-floppy]
防止搜索軟盤。
3.7. set
設置環境變量。語法格式如下:
set [<envvar>=<value>]
注解:
[<envvar>=<value>]
如果省略此參數,打印所有變量。
根目錄標識
指定根目錄后,可以像
linux
的絕對路徑的方式去定位一個文件。語法格式如下:set root=(<device-type><device-number>,<partition-number>)
3.8. cat
顯示文件內容。
3.9. ls
列出設備或文件。語法格式如下:
ls [<arg> …]
注解:
[<arg> …]
如果沒有參數,則顯示所有 GRUB 已知的設備。否則根據參數顯示設備或者文件。
3.10. lsmod和insmod
顯示或插入指定的動態模塊。語法格式如下:
lsmod
insmod <module>