计算机硬件及网络GRUB2 中文手册 word 版.doc
GNU GRUB 中文手册 修订次数:1 不保证含义准确仅供参考。若发现有谬误之处可发送邮件到:grub2_cn_manual 邮件主题必须以 grub2: 开始,否则系统不接收。 针对 grub 版本 v1.99 info 手册翻译,并且添加插图和注解。 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections. 译者:三寸断梁 1 grub 前言 搭建 GRUB2 LINUX 实验环境。由于 GRUB 是启动加载器,因此你修改配置文件后需要重启电脑才 能看到改变,为了避免反复重启。在这里推荐使用 VirtualBox 虚拟机。 本人实验配置是:Fedora 16-i386-DVD 完全安装,VirtualBox 4.2.2 for linux 。Grub 1.99 。 syslinux 4.05 ,你的 linux 主机应该安装有 grub2 。下文所述,在我的机器 3 个镜像成功加载。 1. 准备虚拟机。如果你发现鼠标消失了,按下 右 ctrl 。 从 https:/www.virtualbox.org/wiki/Linux_Downloads 下载 VirtualBox 4.2.2 。我选择 的是 All distributions 。 80M 左右的体积。 新建一个虚拟机,操作简单直接下一步下一步。设置为使用 128M 内存,使用虚拟硬盘文 件,512M 硬盘。显存 23M 。不要启动虚拟机,完成下面的步骤。 2. 准备 memdisk 使用 syslinux 是因为实验中的实例需要 memdisk,它是包括在 syslinux 中的。可以用来 加载一些 Win 下的 img 镜像,比如: Ghost82.img MaxDOS.img 读者可到网 下载这 两个文件。 从 ftp:/ftp.kernel.org/pub/linux/utils/boot/syslinux/ 下载 syslinux-4.05.tar.gz 它是 syslinux 源代码。新版本 syslinux 中的 memdisk 能自动计算镜像文件的 c h s 参数。解压 源代码到某个路径例如 主目录 编译 memdisk(我们只需要 memdisk)。编译需要 nasm 编译器,执行如下命令: cd /syslinux-4.05/memdisk make 1 它会生成名为 memdisk 的文件。这个文件可以在 GRUB2 中使用 linux16 加载。 3. 准备用来创建光盘镜像的 iso 目录 mkdir -p /iso/boot/grub,2 在 /iso/boot/grub 下建立配置文件 grub.cfg 内容如下: set root="(cd)" menuentry 'Ghost82.img' linux16 /boot/memdisk initrd16 /Ghost82.img menuentry 'MaxDos.img' linux16 /boot/memdisk initrd16 /MaxDOS.img menuentry 'win7pe-cn.iso' linux16 /boot/memdisk iso initrd16 /Win7PE-CN.iso #你需要自己准备一个 Win iso,使用 memdisk 在虚拟机中加载 ISO 需要等待较长时间。而且需要大量内 存。我们最初设置的 128M 不够用。所以正文没有提及。 set timeout=-1 复制 Ghost82.img MaxDOS.img 到/iso ;复制 /syslinux-4.05/memdisk/memdisk 到 /iso/boot/;复制所有 GRUB2 模块到/iso/boot/grub2 。GRUB2 模块在 i386 /usr/lib/grub2/i386-pc/ 。 4. 创建 grub.iso ,这个文件将用虚拟机加载。 在主目录下执行命令:grub2-mkrescue -o grub.iso iso 应该在: 因为当前处在主目录下,命令中的 iso 就指向 /iso 目录。创建的 grub.iso 光盘,包含: /iso/* 下的所有文件,并且包含有 GUB2 启动区块。这个 iso 可以写入 CD。如果希望写入 U 盘需要使用 grub2-install 命令。 5. 在虚拟机的镜像列表中添加 grub.iso,然后启动虚拟机。 当你修改了 iso/boot/grub/grub.cfg 配置文件,重新执行第四步,然后重启虚拟机就看以看到 改变。 2 如果你没有出错且幸运的话,虚拟机 应该能够得到 图。尝试前两个选项,她们应该能够正确运行。 1.1 概论 简而言之:grub 是一个引导加载器,即计算机系统启动时第一个运行的程序。它是为了加载操作系统和 转移控制权给操作系统内核。内核再继续启动完整的操作系统。 GNU GRUB 是一个非常强大的引导加载器,它可以加载种类繁多的操作系统。还支持链式加载"chain- loading" 。 GRUB 最大的特性就是可扩展性。GRUB 支持文件系统和内核可执行格式,因此你可以用很多方式加载 你的 OS,而不用记录下 OS 在磁盘 的物理地址。比如使用分区名,路径和文件名指定文件。 当 GRUB 加载系统时,可以使用命令行交互模式,也可以使用菜单选择模式。使用命令行模式你需要指 定内核的文件名和分区名。在菜单模式下,你只需要移动箭头来选择一个菜单然后按下 enter。菜单使用 一个配置文件来说明。 1.2 GRUB 的历史 略 1.3 与以前版本的不同点 GRUB2 是重写 GRUB 后的升级版本。二者有很多相同的特性。但是也有很多地方发生了改变。 1. 新的配置文件名:/boot/grub/grub.cfg 而不是/boot/grub/menu.lst or grub.conf ,配置文件有新 的语法。因此不能直接使用 grub1 的配置文件。 2. grub.cfg 由 grub2-mkconfig 命令产生。它方便升级内核版本。 3. 分区编号从 1 开始,而不是 0. 3 4. 配置文件现在是一个完整的脚本语言,它支持:变量,条件,循环。 5. save_env 和 load_env 支持对启动状态的本地保存。 6. GRUB2 拥有更加聪明的算法用来找寻它所需要的文件。使用 search 命令你可以通过卷标或者 UUID 来选择磁盘。 7. GRUB2 支持多找其他类型的系统:PC EFI,PC coreboot,PowerPC,SPARC,MIPS ¼. 8. 支持多种文件系统,不仅仅限于:ext4,HFS+,NTFS 9. GRUB2 可以直接从 LVM 和 RAID 中读取文件。 10. 支持图形终端和菜单系统。 11. GRUB2 交互界面可以被翻译,包括菜单项的名字。 12. 镜像文件,发生变化。 13. GRUB2 有动态加载的模块可用于支持更多的文件系统和其他功能。 2 加载器的作用 引用自 Gordon Matzigkeit,GRUB 爱好者: 大多数人在谈论电脑的时候总是讨论操作系统和内核。因此她们总是说"GNU/linux" 或者"GNU/Hurd" 。 其他多数人认为内核是系统中最重要的部分,因此他们把 GNU OS 称作 Linux 系统。 我个人认为那种看法是非常片面的,因为启动加载器才是所有软件最重要的。我过去常常把以上的系统称 1 作:"LILO" 和 GRUB 系统 可惜的是没人支持我的见解,因此我现在只用 GNU 指代 GRUB。 因此如果你听到有人说 GNU 系统,那你一定要想到那其实是围绕这 GRUB 展开的。 作为 GRUB 的维护者,我们并不支持 Gordon 这种程度的发烧友。但是他的话可以帮助理解 GRUB 的 作用。 2.1 命名规范 GRUB 为用的设备语法相对与以前发生了重要变化。 (fd0) 首先 GRUB 需要设备名称被扩在圆括号内,fd 表示软盘,数字 0 表示编号为 0 的设备(第一个软盘设 备),编号从零开始计数。 (hd0,msdos2) hd 意思是硬盘,数字 0 代表设备号,意味着是第一块硬盘。Msdos 指出了分区类型,数字 2 代表分区编 号。分区编号从 1 开始计数,而不是 0 。因此 面的代码指定了第一个硬盘的第二个分区为 msdos 格式。 当你选择了分区时 GRUB 会尝试解析文件系统,并从分区中读取资料。 1 4 LILO , LInux LOader ,一个很多人使用但是很少有人喜欢的加载器。 (hd0,msdos5) 这指定了第一个硬盘的第一个扩展分区。由于主分区最多为 4,所以扩展分区从 5 开始编号。 (hd1,msdos1,bsd1) 第 2 块硬盘 的第一个 BSD slice (BSD 使用 slice 管理磁盘,概念类似于主分区)。 想让 GRUB 真实的访问磁盘和分区,你需要在命令行中按照 述语法指定分区。例如: set root=(fd0) parttool (hd0,msdos3) hidden- 如果你不知道磁盘中的分区方法,可以使用 grub 的补全功能。只输入 set root=( 然后按下 tab 键,GRUB 会自动显示设备列表,分区名,文件名。 注意 GRUB 不从 SCSI 识别 IDE,它简单的从 0 开始给设备编号,而忽略设备类型。同差 IDE 设备的编 号小于 SCSI 设备。如果你在 BIOS 中改变了 IDE 和 SCSI 的引导顺序,那编号大小就说不准了。 现在考虑一个问题,如何指定一个文件 (hd0,msdos1)/vmlinuz 它在指定分区 指定文件 vmlinuz。依次类推,可以指定任意路径。 3 安装 GRUB 在类 unix 系统中安装 GRUB 请在 root 权限调用 grub2-install 程序。 命令参数比较简单,只需要指定目标磁盘设备文件名。 # grub2-install /dev/hda 在 GNU/hurd 系统下使用这个命令 # grub2-install /dev/hd0 面的两个命令会把 GRUB 镜像放置到/boot 文件夹。如果你希望它把文件放到其他文件夹需要指定 -boot-directory 参数。这里有个创造软盘启动的实例。 # mke2fs /dev/fd0 # mount -t ext2 /dev/fd0 /mnt # mkdir /mnt/boot # grub2-install -boot-directory=/mnt/boot /dev/fd0 # umount /mnt 有些 BIOS 在使用 USB 设备的第一个分区作为软盘时有 bug。此时把 USB 设备当作硬盘来启动。俗称: USB-FDD 启动。这种情况下你需要这样安装 GRUB。: # losetup /dev/loop0 /dev/sdb1 # mount /dev/loop0 /mnt/usb # grub2-install -boot-directory=/mnt/usb/bugbios -force -allow-floppy /dev/loop0 这个安装方法不和标准方法冲突。因为她们被安装到其他文件夹里。 目前 grub2-install 只是一个 shell 脚本。脚本调用了 grub2-mkimage 和 grub2-setup 。你也可以直接使 用这两个命令。不建议这样做,非常熟悉 grub 者除外。安装引导加载器到正在运行的 OS 中可能导致严 重错误。 5 3.1 创建 GRUB 引导的 CD-ROM GRUB 支持 El Torito 1非仿真模式。这也意味着你可以直接从 cd-rom 中使用 GRUB 启动,而不需要创 建启动软盘和硬盘镜像(它们可能导致启动失败)。 CD-ROM 启动 GRUB 使用一个称作 cdboot.img 的镜像。此镜像被 core.img 包含 。core.img 镜像也 必须包含 iso9660 和 biosdisk 模块。CD-ROM 启动也需要包含 grub.cfg 和 相关 grub 模块。 创建一个简单通用的 GRUB 救援光盘,你需要使用 grub2-mkrescue 程序: # grub2-mkrescue -o grub.iso 你还需要在 iso 中包括其他的有用的文件。只需要在 iso 文件夹内放置你需要的文件即可。 # mkdir iso # mkdir -p iso/boot/grub 你也许需要在 boot/grub 文件 下包含 grub.cfg 用来提供启动菜单。把其他所有你需要的文件复制到 iso 文 件 里面,你可以随意创建目录结构。 最后使用命令: # grub2-mkrescue -o grub.iso iso 它会产生名为 grub.iso 的文件。它可以直接刻录到 CD 或者 DVD 光碟内。 根设备在进入 grub.cfg 之前自动设置,你可以在 grub.cfg 脚本中直接引用文件的路径,不需要指定设备 名。自动设置 root 设备,可以工作在光驱和 USB 储存设备。 实际 很多盗版系统光碟的启动菜单就是使用 grub 的。 El Torito 是可引导 CD 的技术标准,它用于 BIOS。 3.2 映射 BIOS 设备和 OS 设备 grub2-mkdevicemap 程序用来创建设备映射文件。它通常由某些工具在没有找到设备映射文件时自动 调用,例如 grub2-install。默认设备映射文件在/boot/grub2/device.map 如果设备映射文件存在,GRUB 工具集读取它并且映射 BIOS 驱动器到 OS 设备。这个文件内容如下: # this device map was generated by anaconda #DEVICE FILE (hd0) /dev/sda (hd0,3) /dev/sda3 DEVICE 是 grub 语法表示的磁盘设备,FILE 是操作系统的设备文件。 映射文件的作用是:GRUB 在配置文件中使用的设备名指代的设备 (hd0) 是根据 BIOS 的设备号得到的。 如果 BIOS 设置变化而发生变化。如果你在 BIOS 中交换了 IDE 和 SCSI 设备的启动顺序 GRUB 会得到 错误的设备号。 不幸的是此时 OS 设备名也不恒定。多启动的情况下:不同的 Linux 内核 可能使用不同的顺序加载设备 驱动以及使用不同的设备名(/dev/hd* 和 /dev/sd* )。因此你可能需要频繁的更新设备映射文件。 1 所有的启动光盘都遵循 El Torito 这种格式,这是启动光盘的国际标准。 6 GRUB 为了避免这个问题,在 grub.cfg 文件使用 UUID 或者文件系统卷标来指定分区。我们建议你自 己手写的 grub.cfg 也使用 UUID 或者卷标。如果设备映射文件不存在,grub 工具集会设想一个临时的 映射文件。在单磁盘系统中它工作良好。 自动产生的设备映射文件也不总是合适的,某些情况下需要设备映射文件。如果 grub2-mkdevicemap 命令产生错误,你可以手动建立 映射文件。在映射文件中#开始的行被作为注释。 3.3 BIOS 安装 3.3.1 MBR 在 PC BIOS 平台 ,使用的分区表格式通常称作 MBR 格式(主引导记录)。这个格式最多允许 4 个主 分区,和若干逻辑分区。在这种格式下有两种方法安装 GRUB: 1. 嵌入到 MBR 和第一个分区中,这个可嵌入区域它有多个名字:MBR ,引导区,嵌入区它至少 要有 31KiB 的容量。 2. grub 核心镜像可以被安装到文件系统中,GRUB 启动程序被写入到第一个磁盘的第一个区块中。 这两个方法都有缺点。没有办法在尽量安全时在嵌入区域中保留空间。并且已知某些软件会使用这个区 域保留版权信息。磁盘在分区的时也可能在第一个分区前面没有保留足够的空间。另一方面,安装到文 件系统里意味着 GRUB 很脆弱。因为某些文件系统存在 tail paking 特性,会导致 GRUB 的区块发生移 动,导致 MBR 内的 GRUB 加载器无法找到 GRUB 核心镜像。使用这种方法,最好是/boot 目录和 BIOS 引导的设备是同一个磁盘。GRUB 不用去猜测设备号。 GRUB 开发者建议在第一个分区前嵌入 GRUB。除非你有特殊需求。你必须保证第一个分区前存在至少 31KiB(63 区块)的空间。在现代的磁盘中空间不再吃紧,因此最好分区时在第一个分区前保留 1MiB 的空间。 3.3.2 GPT 一些新的系统使用 GUID 分区表(GPT)格式。这是 EFI 的一个特殊部分,如果你的软件支持,GPT 也可以在 BIOS 中使用。例如:GRUB 和 GNU/linux 可以用在这种情况。在 GPT 格式下可以为 GRUB 准备单独的分区,被称作 BIOS 引导分区。GRUB 可以被嵌入到那个专用分区中,从而避免被其 他软件意外覆盖和文件系统导致的区块移动。 在 GPT 创建引导分区时,你需要确认分区至少有 31KiB。GPT 格式的磁盘通常不应该有这么小容量 的分区,所以我们建议你的引导分区容量大一点,比如 1MiB,用来提供 GRUB 可能的扩展。你必须确 定 boot 分区有合适的类型。使用 GNU parted 程序: # parted /dev/DISK set PARTITION-NUMBER bios_grub on 如果你使用 gdisk 程序,请将分区类型设置为:0xEF02 。 警告:对将要操作的分区要多加小心!当 GRUB 在安装时使用了 BIOS 引导分区时,它会自动格式化整 个引导分区,并且把 GRUB 安装进去。请保证分区内不包含其他数据。 7 4 引导过程 GRUB 可以用恰当的方式 加载 多重引导 1兼容内核(Multiboot-compliant kernel)。但是对于某些特 殊 OS,你需要使用 特殊的方式。 4.1 OS 如何引导 GRUB 有两种引导方法。第一个是直接加载 OS。另一个使用链式加载(chain-load ),它可以加载其 他的引导加载器。通常而言,GRUB 有足够的能力从任何一块磁盘的任意分区 加载 OS。但对于某些 操作系统必须使用 OS 自身的加载器(最常见的是 windows xp)。 4.1.1 如何直接引导 OS 多重引导是 GRUB 天生的功能。它支持:Linux FreeBSD NetBSD OpenBSD。如果你希望加载其他 操作系统你需要使用链式加载。 对于 DOS 和 Windows 有一些特殊缘故,你需要特殊方法才能成功引导,这种情况称作系统特异性 2。 参见下文。 4.1.2 链式加载 OS OS 不支持多重启动,或者 GRUB 不能直接引导它时,你就需要使用 chain-load 链式加载。它用来调用 OS 自带的加载器。 chainloader 命令用来运行链式加载。它通常需要某些 GRUB 模块,并且正确设置根设备(root)。你 可以把这些指令放到一个菜单项里面。 menuentry "Windows" insmod chain insmod ntfs set root=(hd0,1) chainloader +1 如果你有多个硬盘,你可能需要使用更多的命令设置更多东西。 链式加载只支持 PC BIOS 系统和 EFI 平台。 1 2 8 多重引导,也称作多启动。 系统特异性,不同的操作系统使用不同的引导方法,称作系统特异性。 4.2 特异性加载可能出现的问题 4.2.1 GNU/Hurd GNU/Hurd 是多重引导兼容的,因此很容易加载它。但是别忘了在引导之前需要正确设置根设备为内核 所在分区。 1. 设置 GRUB 根设备到 GNU/Hurd 的某个分区。search -file -set /boot/gnumach.gz 命令很有 用。它会自动搜索 /boot/gnumach.gz 文件,并把存在此文件的分区设置为根设备。 2. 加载内核和内核模块: grub> multiboot /boot/gnumach.gz root=device:hd0s1 grub> module /hurd/ext2fs.static ext2fs -readonly -multiboot-command-line='$kernel-command-line' -host-priv-port='$host-port' -device-master-port='$device-port' -exec-server-task='$exec-task' -T typed '$root' '$(task-create)' '$(task-resume)' grub> module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)' 3. 执行 boot 指令 4.2.2 GNU/Linux 用 GRUB 引导 linux 相对比较容易。因为它也是多重引导兼容的 OS。 1. 设置根设备到包含 Linux 内核的分区。search -file -set /boot/vmlinuz 对你有用。 2. 使用 linux 命令加载内核: grub> linux /vmlinuz root=/dev/sda1 linux 命令用来加载 linux 内核,并且设置根分区 1。/vmlinuz 用来在根设备中指定文件。 如果你希望添加内核参数直接把参数写到命令后面: grub> linux /vmlinuz root=/dev/sda1 acpi=off 得到所有可用的内核参数,你需要查看内核源代码树。 3. 如果你使用 initrd 2还需要执行 initrd 命令。 grub> initrd /initrd 如果你使用 linux16,你需要使用 initrd16 命令 grub> initrd16 /initrd 4. 最后运行 boot 命令。 警告:如果你使用 initrd 指令,并且使用了 mem=内核参数设置了小于实际的内存容量。你需要在 GRUB 中设置相同的数值。在载入 linux 内核前,使用 uppermem 命令指定内存容量。 1 2 根分区和根设备不是一个含义,根分区是指文件系统根目录所在的分区。根设备是指 GRUB 加载 OS 内核 时。一个名为 root 的选项值,它指向内核所在分区的设备名。set root=(hd0,1) Linux 初始 RAM 磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段 的引导过程。initrd 文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然 后再将这个 initrd RAM 磁盘卸载,并释放内存。在很多嵌入式 Linux 系统中,initrd 就是最终的根文 件系统。 9 4.2.3 DOS/Windows GRUB 不能直接引导 DOS 和 WINDOWS。你必须使用 chainloader 命令。这是由于 DOS 和 Win- dows 内置加载器有严重缺陷。导致这些 OS 不能从非第一块硬盘里启动。如果你把 DOS 或者 WIN 安 装到非第一块硬盘,你需要使用磁盘交换技术。drivemap 命令。 drivemap -s (hd0) (hd1) 这个命令对你的第一和第二块硬盘执行了虚拟交换。 警告:虚拟交换只在 OS 使用 BIOS 访问磁盘时有效。如果它们使用自己的驱动程序访问磁盘则虚拟交 换不影响 OS。 如果你安装了很多 DOS/win 到同一个磁盘里也可能发生问题。因为如果磁盘里有多个主分区,它们可能 会混淆。你应该避免安装多份 DOS/win 到同一个磁盘里。如果你确实遇到这种情况 GRUB 也提供了解 决办法。使用分区隐藏技术。 GRUB 隐藏一个 DOS/win 分区时,DOS/win 会忽略哪个分区。当 GRUB 取消隐藏 某个 DOS/win 分 区时,DOS/win OS 会识别哪个分区。假设你安装了 win 在第一个硬盘的第一个分区和第二个分区你希 望加载第 1 个分区内的 OS,执行如下命令: parttool (hd0,1) hidden- parttool (hd0,2) hidden+ set root=(hd0,1) chainloader +1 parttool $root boot+ boot 5 编写配置文件 5.1 简单的配置文件 grub2-mkconfig 用来产生 grub.cfg 文件。它可以用来升级你的配置文件,它可以自动检测可用的内核, 并且产生对应的菜单项。 grub2-mkconfig 有一些限制。当你希望在菜单项列表后面添加新的项目时你应该修改/etc/grub.d/ 40_custom 文件,或者创建 /boot/grub2/custom.cfg 文件。修改菜单项的顺序,需要修改/etc/grub.d/内 的文件的前缀的数字。与/etc/init.d 下面的脚本类似。数字决定运行的顺序,数字小的出现在前面。 rootlocalhost 0 /etc/grub.d # ll 总用量 48 -rwxr-xr-x. 1 root root 6709 5 月 7 21:50 00_header -rwxr-xr-x. 1 root root 5959 5 月 7 21:50 10_linux -rwxr-xr-x. 1 root root 5875 5 月 7 21:50 20_linux_xen -rwxr-xr-x. 1 root root 5963 5 月 7 21:50 30_os-prober -rwxr-xr-x. 1 root root 214 5 月 7 21:50 40_custom -rwxr-xr-x. 1 root root 95 5 月 7 21:50 41_custom -rwxr-xr-x. 1 root root 1259 5 月 7 21:50 90_persistent -rw-r-r-. 1 root root 483 5 月 7 21:50 README /etc/grub.d/下面的文件都是 shell 脚本。使用脚本机制是为了普通用户能够简单的管理菜单项。如果你能 够自己写 grub.cfg 那么你可以不使用 grub2-mkconfig. 10 文件 /etc/default/grub 控制 grub2-mkconfig 的行为。它也是 shell 脚本,所以应该使用 POSIX shell 语法。通常,文件内只是定义了一系列的 shell 变量: rootlocalhost 0 /etc/grub.d # cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="Fedora" GRUB_DEFAULT=saved GRUB_CMDLINE_LINUX="rd.md=0 rd.lvm=0 rd.dm=0 KEYTABLE=us quiet rhgb LANG=zh_CN.UTF-8 rd.luks=0" 可用的变量为: GRUB_DEFAULT 默认菜单项的编号或者标题。编号从 0 开始。变量值为 saved 有特殊含义。当菜单启动时,光标会定位 到变量所指定的菜单项中。当输入等待超时时,自动进入所指定的菜单项。 实例: 假设你有一个菜单项: menuentry 'Example GNU/Linux distribution' -class gnu-linux . 使用这个命令设置为默认: GRUB_DEFAULT='Example GNU/Linux distribution' GRUB_DEFAULT 值为 saved,那么默认菜单项为 GRUB_SAVEDEFAULT 和 grub2-set-default 或者 grub2-reboot。 默认值为 0 可用的变量: GRUB_SAVEDEFAULT 如果此选项值为"true" ,且 GRUB_DEFAULT ="saved"时,那么手动进入一个菜单项后自动把它设置为下 一次启动时的默认菜单项。 GRUB_DEFAULT ="saved"命令不一定必须 GRUB_SAVEDEFAULT="true" 。也可以和 grub2-set- default 或者 grub2-reboot 命令连用。 GRUB_TIMEOUT 值为一个数值,表示时间秒。显示菜单后,等待键盘输入。如果指定时间内没有键盘操作,那么自动加载 GRUB_DEFAULT 变量所指定的菜单项。默认是 5 。 如果值为 0 那么直接加载默认菜单项而不显示菜单。 如果为-1 那么 永远等待输入,不自动加载。 GRUB_HIDDEN_TIMEOUT 值为一个数值,表示时间秒。在显示菜单之前等待键盘输入,如果指定时间内没有键盘操作,那么自动加载 GRUB_DEFAULT 变量所指定的菜单项。无默认值。 GRUB_HIDDEN_TIMEOUT_QUIET 与 GRUB_HIDDEN_TIMEOUT 连用。如果设置为"true" 那么不显示倒计时。无默认值。 GRUB_DEFAULT_BUTTON' GRUB_TIMEOUT_BUTTON' GRUB_HIDDEN_TIMEOUT_BUTTON' GRUB_BUTTON_CMOS_ADDRESS' 11 与没有_BUTTON 后缀的变量对应,用来支持电源键。 GRUB_DISTRIBUTOR' 由 GRUB 的发布者设置,用来鉴别 GRUB。 GRUB_TERMINAL_INPUT' 选择终端输入设备。变量值可以是用空格隔开的多个设备名。可用的名称依赖与你的硬件平台。可用名包括 console (PC BIOS 和 EFI 控制台),serial (串行终端),ofconsole (open firmware 控制台),at_keyboard ( PC AT 键盘,对 Coreboot 1 也有用),usb_keyboard (使用 HID 启动协议的 USB 键盘)。默认值是当前平 台 的终端输入设备。 GRUB_TERMINAL_OUTPUT' 选择输出终端。变量值可以是用空格隔开的多个设备名。可用名包括:console (PC BIOS 和 EFI 控制台), serial (串行终端),gfxterm (图形模式输出),ofconsole (open firmware 控制台),ga_text (VGA 文本模式 输出,对 Coreboot 有用)。默认值是当前平台 的终端输出设备。 GRUB_TERMINAL 如果设置了这个选项,会把GRUB_TERMINAL_INPUT' 和GRUB_TERMINAL_OUTPUT' 设置为相同 值。 GRUB_SERIAL_COMMAND' 这个命令配置串行终端的端口。 GRUB_CMDLINE_LINUX' 对于 linux 内核添加的命令行参数。 GRUB_CMDLINE_LINUX_DEFAULT' 除非 GRUB_DISABLE_RECOVERY 设置为 true,否则为每个 linux 内核产生两个菜单项,一个是普通模 式,一个是救援模式。在普通模式下 linux 内核参数会跟 GRUB_CMDLINE_LINUX' 的值后再跟 GRUB_CMDLINE_LINUX_DEFAULT 的值。 GRUB_CMDLINE_NETBSD' GRUB_CMDLINE_NETBSD_DEFAULT' 类似与 GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX_DEFAULT,只不过用于 NetBSD. GRUB_CMDLINE_XEN' GRUB_CMDLINE_XEN_DEFAULT'