Note
|
本文译自:GNU 关于 GRUB 的官方文档 |
大多数情况下,均可使用程序 grub-mkconfig
(参见 Invoking grub-mkconfig)生成 grub.cfg
。它适用于升级一个分发版的情况,它会自动发现可用的内核,并尝试为它们生成菜单条目。
grub-mkconfig
的确有些限制。虽然可以通过编辑 /etc/grub.d/40_custom
或创建 /etc/grub/custom.cfg
向列表追加额外的自定义菜单条目,若要修改菜单条目的顺序,或者修改它们的标题则可能需要对 /etc/grub.d
下的脚本文件进行复杂的修改。这可能在未来有所改变。在目前的情况下,我们鼓励那些认为直接书写 grub.cfg
更简单的人按照他们的意思去做(参见 Booting 以及 Shell-like scripting),此时也要同时禁用任何分发版本提供的系统自动运行 grub-mkconfig
。
文件 /etc/default/grub
控制 grub-mkconfig
的操作。它源于一个 shell 脚本,因此它必须是一个有效的 POSIX shell 输入;通常,它仅为一系列 KEY=value
行,但如果值包含空格或其它特殊字符,则它必须被引号包裹。举例来说:
GRUB_TERMINAL_INPUT="console serial"
/etc/default/grub
中有效的键如下所示:
- GRUB_DEFAULT
-
默认的菜单条目。它可以为一个数字,此时它指向生成的菜单条目的地 N 个条目(以 0 开头的),或者菜单条目的标题,或者特殊字符串
saved
。若你希望指定在不少菜单条目之后的一个为默认条目,那么 id 值就比较有用。举例来说,如果你有:
menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux { ... }
那么你可以这样使它变为默认:
GRUB_DEFAULT=example-gnu-linux
以前它的文档被记录为使用条目标题。虽然它依旧可用,但是它不被推荐,这是由于标题通常包含不稳定的设备名,且可能被翻译过。
若将该值设置为
saved
,那么默认菜单条目将来自GRUB_SAVDEFAULT
或grub-set-default
所保存的值。它依赖于环境块,可能不适用于全部的环境下(参见 Environment block)。默认值为
0
。 - GRUB_SAVEDEFAULT
-
若该选项设置为
true
,那么在选择了一个条目之后,将它作为下次运行 GRUB 时的新默认值。仅在设置了GRUB_DEFAULT=saved
时有用;它会单独作为一个选项,是因为GRUB_DEFAULT=saved
在不与该选项连用、与grub-set-default
连用时也十分有用。默认情况下不做设置。它依赖于环境块,可能不适用于全部的环境下(参见 Environment block)。 - GRUB_TIMEOUT
-
在显示菜单后的指定秒数之后,启动默认的条目,除非接收到任意按键。默认值为
5
。设置为0
则立即执行启动,而不显示菜单,设置为-1
则永久等待。若
GRUB_TIMEOUT_STYLE
设置为countdown
或者hidden
,则在显示菜单前倒数。 - GRUB_TIMEOUT_STYLE
-
若该值未设置或设置为
menu
,那么 GRUB 将显示菜单,接着等待GRUB_TIMEOUT
设置的超时后,启动默认条目。按任意键就可中断倒计时。若该选项设置为
countdown
或hidden
,那么在显示菜单前,GRUB 就会等待GRUB_TIMEOUT
设置的超时。若按了 ESC 或 F4,或者在此期间按住了 Shift,则会显示菜单,并等待输入。若按下了与某个菜单条目关联的快捷键,则会立刻启动该条目。若超时结束之前未发生上述任何情况,则启动默认条目。在countdown
条件下,它将会显示一个单行提示来显示剩余的时间。 - GRUB_DEFAULT_BUTTON
- GRUB_TIMEOUT_BUTTON
- GRUB_TIMEOUT_STYLE_BUTTON
- GRUB_BUTTON_CMOS_ADDRESS
-
不含
_BUTTON
后缀的变量的变体,用于支持特定制造商的电源按钮。参见 Vendor power-on keys - GRUB_DISTRIBUTOR
-
由 GRUB 的分发者设置他们的识别名。它用于生成更加详细的菜单条目标题。
- GRUB_TERMINAL_INPUT
-
选择终端输入设备。此处你可以选择多个设备,以空格分开。
有效的终端输入名称依平台不同而不同,但可以包括
console
(原生平台控制台)、serial
(串行终端)、serial_<port>
(显式指定端口的串行终端)、at_keyboard
(PC AT 键盘)、usb_keyboard
(使用 HID Boot Protocol 的 USB 键盘,当固件不处理它们时使用)。默认为使用平台的原生终端输入。
- GRUB_TERMINAL_OUTPUT
-
选择终端输出设备。此处你可以选择多个设备,以逗号分开。
有效的终端输出名依平台不同而不同,但可以包括
console
(原生平台控制台)、serial
(串行终端)、serial_<port>
(显式指定端口的串行终端)gfxterm
(图形模式输出)、vga_text
(VGA 文字输出)、mda_text
(MDA 文字输出)、morse
(使用系统蜂鸣器的摩尔斯电码)、spkmodem
(使用系统蜂鸣器的简单数据协议)。当没有串行端口可用时,
spkmodem
就十分有用。连接发送端系统(也就是 GRUB 运行的系统)的输出至接收系统(通常为开发者的机器)的线路输入。在接收系统上从util/spkmodem-recv.c
编译出spkmodem-recv
并运行:parecord --channels=1 --rate=48000 --format=s16le | ./spkmodem-recv
默认为使用平台的原生终端输出。
- GRUB_TERMINAL
-
若设置了该选项,则覆盖
GRUB_TERMINAL_INPUT
和GRUB_TERMINAL_OUTPUT
至相同的值。 - GRUB_SERIAL_COMMAND
-
当使用串行控制台时用于配置串行端口的命令。参见 serial。默认值为
serial
。 - GRUB_CMDLINE_LINUX
-
要向菜单条目的 Linux 内核传递的命令行参数。
- GRUB_CMDLINE_LINUX_DEFAULT
-
除非
GRUB_DISABLE_RECOVERY
设置为true
,否则每个 Linux 内核都会生成两个菜单条目:一个默认的条目和一个恢复模式的条目。该选项罗列了仅赋予默认菜单条目的命令行参数,它们会被追加至GRUB_CMDLINE_LINUX
之后。 - GRUB_CMDLINE_NETBSD
- GRUB_CMDLINE_NETBSD_DEFAULT
-
同
GRUB_CMDLINE_LINUX
和GRUB_CMDLINE_LINUX_DEFAULT
,但针对 NetBSD。 - GRUB_CMDLINE_GNUMACH
-
同
GRUB_CMDLINE_LINUX
,但针对 Mach。 - GRUB_CMDLINE_XEN
- GRUB_CMDLINE_XEN_DEFAULT
-
对于全部的对应的常规条目,这些选项的值将传递给 Xen hypervisor Xen 菜单条目。
- GRUB_CMDLINE_LINUX_XEN_REPLACE
- GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT
-
对于 Linux 和 Xen 菜单条目,这些选项的值将替换
GRUB_CMDLINE_LINUX
和GRUB_CMDLINE_LINUX_DEFAULT
。 - GRUB_EARLY_INITRD_LINUX_CUSTOM
- GRUB_EARLY_INITRD_LINUX_STOCK
-
空格分隔的要从
/boot
读取的早期 initrd 镜像的列表。它包含了诸如 CPU 微码、固件、ACPI 表、加密密钥等等。这些早期镜像会按照声明的顺序载入,且这些镜像会在实际工作的 initrd 镜像之前载入。GRUB_EARLY_INITRD_LINUX_STOCK
用于你的分发版本声明由分发版本声明的镜像。它不应该在不清楚后果的情况下进行修改。它们将会首先被载入。GRUB_EARLY_INITRD_LINUX_CUSTOM
用于你自定义创建的镜像。默认的附带镜像如下所示,虽然它们也会被你的分发版本覆盖:
intel-uc.img intel-ucode.img amd-uc.img amd-ucode.img early_ucode.cpio microcode.cpio
- GRUB_DISABLE_LINUX_UUID
-
通常情况下,
grub-mkconfig
将生成使用 Linux 内核的根文件系统的 UUID 的菜单条目,使用root=UUID=…
内核参数。这通常更可靠,但有些时候却不适用。要禁用 UUID,设置该值为true
。 - GRUB_DISABLE_LINUX_PARTUUID
-
若
grub-mkconfig
不能通过它的 UUID 确定根文件系统,grub-mkconfig
可以使用包含了文件系统的分区的 UUID 确定 Linux 内核的根文件系统,使用root=PARTUUID=…
内核参数。它的可靠性低于使用文件系统的 UUID,但高于使用 Linux 设备名。当
GRUB_DISABLE_LINUX_PARTUUID
设置为false
,Linux 内核版本必须设置为 2.6.37(对于使用 MSDOC 分区的系统则为 3.10)或更新的版本。该选项默认为true
。要启用分区 UUID 的使用,将该选项设置为false
。 - GRUB_DISABLE_RECOVERY
-
若该选项设置为
true
,禁用生成恢复模式的菜单条目。 - GRUB_DISBALE_UUID
-
通常情况下,
grub-mkconfig
将会生成使用 UUID 来确定各类文件系统以查找文件的菜单条目。这通常更可靠,但有些情况下不适用。要关闭 UUID 的适用,设置该选项至true
。设置该选项为true
,会同时设置GRUB_DISABLE_LINUX_UUID
以及GRUB_DISABLE_LINUX_PARTUUID
至true
,除非它们被显式地设置为了false
。 - GRUB_VIDEO_BACKEND
-
若要求了图形化视频的支持,要么是由于使用了
gfxterm
图形化终端,或者设置了GRUB_GFXPAYLOAD_LINUX
,那么grub-mkconfig
通常会载入全部可用的 GRUB 视频驱动,并使用最适合于你硬件的那一个。若由于某种原因你需要覆盖该它,则你可以设置该选项。在
grub-install
运行后,可用的视频驱动均会罗列在/boot/grub/video.lst
。 - GRUB_GFXMODE
-
设置
gfxterm
图形终端的分辨率。注意,你仅能使用你显卡通过 VESA BIOS Extensions(VBE)支持的模式,因此举例来说,原生 LCD 面板的分辨率可能并不可用。默认值为auto
,它会尝试选择一个偏好的分辨率。参见 gfxmode。 - GRUB_BACKGROUND
-
为
gfxterm
图形终端设置一个要使用的背景图片。该选项的值必须为在启动时 GRUB 就可以读取的一个文件,且必须以.png
、.tga
、.jpg
或.jpeg
结尾。若必须则将图片缩放以适应屏幕。 - GRUB_THEME
-
设置
gfxterm
图形终端要使用的主题。 - GRUB_GFXPAYLOAD_LINUX
-
设置为
text
强制 Linux 内核以通常的文字模式启动,设置为keep
则保留GRUB_GFXMODE
设置的图形模式,设置为widthxheight[xdepth]
则指定为特定的图形模式,或者由逗号或分号分隔的这些值组成的列表,以逐一尝试它们。参见 gfxpayload。鉴于你的内核、你的分发版本、你的图形卡以及月相,注意使用该选项可能会导致 GNU/Linux 经受各种显示问题,特别是在启动序列的前期。若你遇到问题,将该选项设置为
text
,GRUB 会告诉 Linux 以普通文字模式启动。 - GRUB_DISABLE_OS_PROBER
-
grub-mkconfig
有一个特性,是使用外的os-prober
程序去发现安装在相同机器上的其它操作系统,并为它们生成合适的菜单条目。该选项默认关闭,因为自动且无声的执行os-prober
,并基于该数据生成启动条目,是潜在地攻击向量(attack vector)。设置该选项至false
来启动grub-mkconfig
命令的该特性。 - GRUB_OS_PROBER_SKIP_LIST
-
由一系列空格分隔的文件系统的 FS UUID 组成的列表,在该列表中的文件系统均会从 os-prober 的输出中忽略。对于 EFI chainloader,它为 <UUID>@<EFI FILE>。
- GRUB_DISABLE_SUBMENU
-
通常情况下,
grub-mkconfig
会为最高版本数的内核生成顶级菜单条目,并将其它找到的内核和额外的恢复模式菜单条目放置在次级菜单中。对于os-prober
返回的条目,首个条目将会放置在顶级,而其它的则放置在次级菜单中。若该选项设置为true
,将转而生成所有条目均在顶层的平铺菜单。修改该选项将同时要求修改以存在的GRUB_DEFAULT
值、fallback
(参见 fallback) 以及default
(参见 default) 环境变量,以及使用grub-set-default
保存的默认条目,和与grub-reboot
连用的值。 - GRUB_ENABLE_CRYPTODISK
-
若设置为
y
,grub-mkconfig
以及grub-install
将会检查加密盘,并为了在启动时能访问它们而生成额外的命令。注意在这种情况下,无人值守的启动是不可能的,因为 GRUB 会等待用于解锁加密容器的密码。 - GRUB_INIT_TUNE
-
当 GRUB 启动时,在喇叭中播放一个声音。它在用户无法看到屏幕时十分有用。该选项的值会直接传递给 play。
- GRUB_BADRAM
-
若设置了该选项,GRUB 会触发 badram 命令来过滤特 RAM 中的特定部分。
- GRUB_PRELOAD_MODULES
-
该选项可以设置为一系列空格分隔的 GRUB 模块名的列表。在
grub.cfg
的起始处,每个模块会尽可能早地载入。
下面的选项出于已有配置的兼容性考虑而仍被接受,但有更好的替代:
- GRUB_HIDDEN_TIMEOUT
-
略
- GRUB_HIDDEN_TIMEOUT_QUIT
-
略
- GRUB_HIDDEN_TIMEOUT_BUTTON
-
略
对于更详细的自定义 grub-mkconfig
的输出,你可以直接编辑 /etc/grub.d
的脚本。/etc/grub.d/40_custom
是特别有用的用于添加完整的自定义菜单条目;仅需在该文件中键入你希望添加的自定义条目,保证至少不要修改前两行。