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
默认菜单项。默认值为
。可选值有:
值 | 说明 |
---|---|
<number> | 菜单项的数字序号,从 开始 |
saved | 被 保存的上次选择项 |
<id> | 菜单项的唯一标识(menuentry ... --id xxxx) |
2.2. GRUB_TIMEOUT
自启超时时间。默认值为
5
不等待 | |
-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 | 文本输出 |
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能够识别的设备号,下标从
开始计数。比如表示主硬盘,等价于 linux 的
hd0
/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> …]
3.10. lsmod和insmod
lsmod
insmod <module>