Skip to content

Latest commit

 

History

History
242 lines (172 loc) · 14 KB

19补1、grub 简单配置处理.adoc

File metadata and controls

242 lines (172 loc) · 14 KB

Grub 简单配置处理

Note

本文译自:GNU 关于 GRUB 的官方文档
6.1 Simple configuration handling

大多数情况下,均可使用程序 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_SAVDEFAULTgrub-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 设置的超时后,启动默认条目。按任意键就可中断倒计时。

若该选项设置为 countdownhidden,那么在显示菜单前,GRUB 就会等待 GRUB_TIMEOUT 设置的超时。若按了 ESCF4,或者在此期间按住了 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_INPUTGRUB_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_LINUXGRUB_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_LINUXGRUB_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_PARTUUIDtrue,除非它们被显式地设置为了 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

若设置为 ygrub-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 是特别有用的用于添加完整的自定义菜单条目;仅需在该文件中键入你希望添加的自定义条目,保证至少不要修改前两行。