GRUB2 配置文件詳解


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

注意:

  1. 命令

    其中個別命令只能在 grub.cfg 中使用,不能在命令行模式使用。比如 menuentry等。

  2. 指定設備

    定位一個文件,需要指定它所在設備分區與路徑。指定設備的語法如下:

    (<device-type><device-number>,<partition-number>)
    

    注解:

    1. <device-type>

      設備類型,有如下幾種常用類型:

      類型 說明
      hd 硬盤
      fd 3.5 英寸軟盤
      nd 網絡
      cd CD/DVD等
    2. <device-number>

      BIOS能夠識別的設備號,下標從 0 開始計數。比如 hd0 表示主硬盤,等價於 linux 的 /dev/hda

    3. <partition-number>

      分區號,比如 modos2 表示第 2 個分區。下標從 1 開始計數。

3.1. menuentry

定義 GRUB 的菜單項。當選中菜單項時,GRUB 將執行括號內的命令。如果最后的命令返回成功,並且內核被加載時,將自動執行 boot 命令。此命令不能在命令行模式執行。語法格式如下:

menuentry <title> [--class=<class> …] [--users=<users>] 
	[--unrestricted] [--hotkey=<key>] [--id=<id>] [<arg> …] { <command>; … }

注解:

  1. <title>

菜單項的顯示名稱。

  1. [--class=<class> …]

    將菜單項指定為某一類。可指定多個類別。不同的菜單主題可能會顯示不同的菜單類別。

  2. [--users=<users>]

    授予指定用戶訪問菜單項的權利。

  3. [--unrestricted]

    允許所有用戶訪問此菜單項。

  4. [--hotkey=<key>]

    給菜單項指定一個快捷鍵。

  5. [--id=<id>]

    給菜單項指定一個唯一的 ASCII 字符串標識。

  6. [<arg> …]

    和 <title> 一起作為參數,傳遞給大括號里將要執行的命令。<title> 總是被指定為 $1

3.2. boot

啟動已加載的內核。

3.3. help

顯示內建命令的幫助信息。語法格式如下:

help [<pattern> …]

注解:

  1. [<pattern> …]

    如果省略,則顯示所有命令的簡短描述。否則,顯示指定命令的詳細描述。

3.4. linux

從指定文件加載內核,並傳遞啟動參數。任何 initrd 必須在此命令后重加載。語法格式如下:

linux <file> …

3.5. initrd

linux 內核加載初始的 ramdisk,並在 linux 啟動的內存區域,設置恰當的參數。語法格式如下:

initrd <file>

查找設備。語法格式如下:

search [--file|--label|--fs-uuid] [--set [<var>]] [--no-floppy] <name>

注解:

  1. [--file|--label|--fs-uuid]

    分別表示按文件、文件系統標志、文件系統 UUID 查找設備。

  2. [--set [<var>]]

    第一個找到的設備會被設置為環境變量 var 的值。默認變量是 root

  3. [--no-floppy]

    防止搜索軟盤。

3.7. set

設置環境變量。語法格式如下:

set [<envvar>=<value>]

注解:

  1. [<envvar>=<value>]

    如果省略此參數,打印所有變量。

  2. 根目錄標識

    指定根目錄后,可以像 linux 的絕對路徑的方式去定位一個文件。語法格式如下:

    set root=(<device-type><device-number>,<partition-number>)
    

3.8. cat

顯示文件內容。

3.9. ls

列出設備或文件。語法格式如下:

ls [<arg> …]

注解:

  1. [<arg> …]

    如果沒有參數,則顯示所有 GRUB 已知的設備。否則根據參數顯示設備或者文件。

3.10. lsmod和insmod

顯示或插入指定的動態模塊。語法格式如下:

lsmod
insmod <module>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM