[计算机硬件及网络]GRUB2 中文手册 word 版_第1页
[计算机硬件及网络]GRUB2 中文手册 word 版_第2页
[计算机硬件及网络]GRUB2 中文手册 word 版_第3页
[计算机硬件及网络]GRUB2 中文手册 word 版_第4页
[计算机硬件及网络]GRUB2 中文手册 word 版_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、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

2、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 个镜像成功加载。

3、 1. 准备虚拟机。如果你发现鼠标消失了,按下 右 ctrl 。 从 /wiki/linux_downloads 下载 virtualbox 4.2.2 。我选择 的是 all distributions 。 80m 左右的体积。 新建一个虚拟机,操作简单直接下一步下一步。设置为使用 128m 内存,使用虚拟硬盘文 件,512m 硬盘。显存 23m 。不要启动虚拟机,完成下面的步骤。 2. 准备 memdisk 使用 syslinux 是因为实验中的实例需要 memdisk,它是包括在 syslinux 中的。可以用来 加载一些 win 下的

4、img 镜像,比如: ghost82.img maxdos.img 读者可到网 下载这 两个文件。 从 /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

5、 的文件。这个文件可以在 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 /

6、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. 创

7、建 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 如果你没

8、有出错且幸运的话,虚拟机 应该能够得到 图。尝试前两个选项,她们应该能够正确运行。 1.1 概论 简而言之:grub 是一个引导加载器,即计算机系统启动时第一个运行的程序。它是为了加载操作系统和 转移控制权给操作系统内核。内核再继续启动完整的操作系统。 gnu grub 是一个非常强大的引导加载器,它可以加载种类繁多的操作系统。还支持链式加载chain- loading 。 grub 最大的特性就是可扩展性。grub 支持文件系统和内核可执行格式,因此你可以用很多方式加载 你的 os,而不用记录下 os 在磁盘 的物理地址。比如使用分区名,路径和文件名指定文件。 当 grub 加载系统时,可以

9、使用命令行交互模式,也可以使用菜单选择模式。使用命令行模式你需要指 定内核的文件名和分区名。在菜单模式下,你只需要移动箭头来选择一个菜单然后按下 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-mkconfi

10、g 命令产生。它方便升级内核版本。 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 中读取文

11、件。 10. 支持图形终端和菜单系统。 11. grub2 交互界面可以被翻译,包括菜单项的名字。 12. 镜像文件,发生变化。 13. grub2 有动态加载的模块可用于支持更多的文件系统和其他功能。 2 加载器的作用 引用自 gordon matzigkeit,grub 爱好者: 大多数人在谈论电脑的时候总是讨论操作系统和内核。因此她们总是说gnu/linux 或者gnu/hurd 。 其他多数人认为内核是系统中最重要的部分,因此他们把 gnu os 称作 linux 系统。 我个人认为那种看法是非常片面的,因为启动加载器才是所有软件最重要的。我过去常常把以上的系统称 1 作:lilo 和

12、 grub 系统 可惜的是没人支持我的见解,因此我现在只用 gnu 指代 grub。 因此如果你听到有人说 gnu 系统,那你一定要想到那其实是围绕这 grub 展开的。 作为 grub 的维护者,我们并不支持 gordon 这种程度的发烧友。但是他的话可以帮助理解 grub 的 作用。 2.1 命名规范 grub 为用的设备语法相对与以前发生了重要变化。 (fd0) 首先 grub 需要设备名称被扩在圆括号内,fd 表示软盘,数字 0 表示编号为 0 的设备(第一个软盘设 备),编号从零开始计数。 (hd0,msdos2) hd 意思是硬盘,数字 0 代表设备号,意味着是第一块硬盘。msdo

13、s 指出了分区类型,数字 2 代表分区编 号。分区编号从 1 开始计数,而不是 0 。因此 面的代码指定了第一个硬盘的第二个分区为 msdos 格式。 当你选择了分区时 grub 会尝试解析文件系统,并从分区中读取资料。 1 4 lilo , linux loader ,一个很多人使用但是很少有人喜欢的加载器。 (hd0,msdos5) 这指定了第一个硬盘的第一个扩展分区。由于主分区最多为 4,所以扩展分区从 5 开始编号。 (hd1,msdos1,bsd1) 第 2 块硬盘 的第一个 bsd slice (bsd 使用 slice 管理磁盘,概念类似于主分区)。 想让 grub 真实的访问磁

14、盘和分区,你需要在命令行中按照 述语法指定分区。例如: set root=(fd0) parttool (hd0,msdos3) hidden- 如果你不知道磁盘中的分区方法,可以使用 grub 的补全功能。只输入 set root=( 然后按下 tab 键,grub 会自动显示设备列表,分区名,文件名。 注意 grub 不从 scsi 识别 ide,它简单的从 0 开始给设备编号,而忽略设备类型。同差 ide 设备的编 号小于 scsi 设备。如果你在 bios 中改变了 ide 和 scsi 的引导顺序,那编号大小就说不准了。 现在考虑一个问题,如何指定一个文件 (hd0,msdos1)/

15、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

16、 # 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/us

17、b/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 启动,而不需要创 建启动软盘和硬盘镜

18、像(它们可能导致启动失败)。 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

19、/grub 你也许需要在 boot/grub 文件 下包含 grub.cfg 用来提供启动菜单。把其他所有你需要的文件复制到 iso 文 件 里面,你可以随意创建目录结构。 最后使用命令: # grub2-mkrescue -o grub.iso iso 它会产生名为 grub.iso 的文件。它可以直接刻录到 cd 或者 dvd 光碟内。 根设备在进入 grub.cfg 之前自动设置,你可以在 grub.cfg 脚本中直接引用文件的路径,不需要指定设备 名。自动设置 root 设备,可以工作在光驱和 usb 储存设备。 实际 很多盗版系统光碟的启动菜单就是使用 grub 的。 el tori

20、to 是可引导 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 de

21、vice 是 grub 语法表示的磁盘设备,file 是操作系统的设备文件。 映射文件的作用是:grub 在配置文件中使用的设备名指代的设备 (hd0) 是根据 bios 的设备号得到的。 如果 bios 设置变化而发生变化。如果你在 bios 中交换了 ide 和 scsi 设备的启动顺序 grub 会得到 错误的设备号。 不幸的是此时 os 设备名也不恒定。多启动的情况下:不同的 linux 内核 可能使用不同的顺序加载设备 驱动以及使用不同的设备名(/dev/hd* 和 /dev/sd* )。因此你可能需要频繁的更新设备映射文件。 1 所有的启动光盘都遵循 el torito 这种格式,

22、这是启动光盘的国际标准。 6 grub 为了避免这个问题,在 grub.cfg 文件使用 uuid 或者文件系统卷标来指定分区。我们建议你自 己手写的 grub.cfg 也使用 uuid 或者卷标。如果设备映射文件不存在,grub 工具集会设想一个临时的 映射文件。在单磁盘系统中它工作良好。 自动产生的设备映射文件也不总是合适的,某些情况下需要设备映射文件。如果 grub2-mkdevicemap 命令产生错误,你可以手动建立 映射文件。在映射文件中#开始的行被作为注释。 3.3 bios 安装 3.3.1 mbr 在 pc bios 平台 ,使用的分区表格式通常称作 mbr 格式(主引导记录

23、)。这个格式最多允许 4 个主 分区,和若干逻辑分区。在这种格式下有两种方法安装 grub: 1. 嵌入到 mbr 和第一个分区中,这个可嵌入区域它有多个名字:mbr ,引导区,嵌入区它至少 要有 31kib 的容量。 2. grub 核心镜像可以被安装到文件系统中,grub 启动程序被写入到第一个磁盘的第一个区块中。 这两个方法都有缺点。没有办法在尽量安全时在嵌入区域中保留空间。并且已知某些软件会使用这个区 域保留版权信息。磁盘在分区的时也可能在第一个分区前面没有保留足够的空间。另一方面,安装到文 件系统里意味着 grub 很脆弱。因为某些文件系统存在 tail paking 特性,会导致

24、grub 的区块发生移 动,导致 mbr 内的 grub 加载器无法找到 grub 核心镜像。使用这种方法,最好是/boot 目录和 bios 引导的设备是同一个磁盘。grub 不用去猜测设备号。 grub 开发者建议在第一个分区前嵌入 grub。除非你有特殊需求。你必须保证第一个分区前存在至少 31kib(63 区块)的空间。在现代的磁盘中空间不再吃紧,因此最好分区时在第一个分区前保留 1mib 的空间。 3.3.2 gpt 一些新的系统使用 guid 分区表(gpt)格式。这是 efi 的一个特殊部分,如果你的软件支持,gpt 也可以在 bios 中使用。例如:grub 和 gnu/lin

25、ux 可以用在这种情况。在 gpt 格式下可以为 grub 准备单独的分区,被称作 bios 引导分区。grub 可以被嵌入到那个专用分区中,从而避免被其 他软件意外覆盖和文件系统导致的区块移动。 在 gpt 创建引导分区时,你需要确认分区至少有 31kib。gpt 格式的磁盘通常不应该有这么小容量 的分区,所以我们建议你的引导分区容量大一点,比如 1mib,用来提供 grub 可能的扩展。你必须确 定 boot 分区有合适的类型。使用 gnu parted 程序: # parted /dev/disk set partition-number bios_grub on 如果你使用 gdisk

26、 程序,请将分区类型设置为:0xef02 。 警告:对将要操作的分区要多加小心!当 grub 在安装时使用了 bios 引导分区时,它会自动格式化整 个引导分区,并且把 grub 安装进去。请保证分区内不包含其他数据。 7 4 引导过程 grub 可以用恰当的方式 加载 多重引导 1兼容内核(multiboot-compliant kernel)。但是对于某些特 殊 os,你需要使用 特殊的方式。 4.1 os 如何引导 grub 有两种引导方法。第一个是直接加载 os。另一个使用链式加载(chain-load ),它可以加载其 他的引导加载器。通常而言,grub 有足够的能力从任何一块磁盘的

27、任意分区 加载 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

28、命令用来运行链式加载。它通常需要某些 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 是多重引导兼容的,因此很容

29、易加载它。但是别忘了在引导之前需要正确设置根设备为内核 所在分区。 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-com

30、mand-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 内核

31、的分区。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 如果

32、你使用 linux16,你需要使用 initrd16 命令 grub initrd16 /initrd 4. 最后运行 boot 命令。 警告:如果你使用 initrd 指令,并且使用了 mem=内核参数设置了小于实际的内存容量。你需要在 grub 中设置相同的数值。在载入 linux 内核前,使用 uppermem 命令指定内存容量。 1 2 根分区和根设备不是一个含义,根分区是指文件系统根目录所在的分区。根设备是指 grub 加载 os 内核 时。一个名为 root 的选项值,它指向内核所在分区的设备名。set root=(hd0,1) linux 初始 ram 磁盘(initrd)是在系

33、统引导过程中挂载的一个临时根文件系统,用来支持两阶段 的引导过程。initrd 文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然 后再将这个 initrd ram 磁盘卸载,并释放内存。在很多嵌入式 linux 系统中,initrd 就是最终的根文 件系统。 9 4.2.3 dos/windows grub 不能直接引导 dos 和 windows。你必须使用 chainloader 命令。这是由于 dos 和 win- dows 内置加载器有严重缺陷。导致这些 os 不能从非第一块硬盘里启动。如果你把 dos 或者 win 安 装到非第一块硬盘,你需要使用磁盘交换技

34、术。drivemap 命令。 drivemap -s (hd0) (hd1) 这个命令对你的第一和第二块硬盘执行了虚拟交换。 警告:虚拟交换只在 os 使用 bios 访问磁盘时有效。如果它们使用自己的驱动程序访问磁盘则虚拟交 换不影响 os。 如果你安装了很多 dos/win 到同一个磁盘里也可能发生问题。因为如果磁盘里有多个主分区,它们可能 会混淆。你应该避免安装多份 dos/win 到同一个磁盘里。如果你确实遇到这种情况 grub 也提供了解 决办法。使用分区隐藏技术。 grub 隐藏一个 dos/win 分区时,dos/win 会忽略哪个分区。当 grub 取消隐藏 某个 dos/wi

35、n 分 区时,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 有一

36、些限制。当你希望在菜单项列表后面添加新的项目时你应该修改/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_l

37、inux -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 2

38、1: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=

39、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

40、. 使用这个命令设置为默认: 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 。也可以和

41、grub2-set- default 或者 grub2-reboot 命令连用。 grub_timeout 值为一个数值,表示时间秒。显示菜单后,等待键盘输入。如果指定时间内没有键盘操作,那么自动加载 grub_default 变量所指定的菜单项。默认是 5 。 如果值为 0 那么直接加载默认菜单项而不显示菜单。 如果为-1 那么 永远等待输入,不自动加载。 grub_hidden_timeout 值为一个数值,表示时间秒。在显示菜单之前等待键盘输入,如果指定时间内没有键盘操作,那么自动加载 grub_default 变量所指定的菜单项。无默认值。 grub_hidden_timeout_qu

42、iet 与 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 b

43、ios 和 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_t

44、ext (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 内核产生两个菜单项,一个是普通模 式,一个是救援模

45、式。在普通模式下 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 类似与 grub_cmdline_linux grub_cmdline_linux_default,只不过用于 linux 和 xen。

46、 grub_disable_linux_uuid 通常 grub2-mkconfig 使用 root=uuid=xxx 内核参数,用 uuid 表示根文件系统。如果你希望关闭它设 置这个选项值为true grub_disable_recovery 如果此选项值为 true,那么不自动产生救援模式菜单。 grub_video_backend 如果图形卡支持,并且正在使用 gfxterm 图形终端,或者设置了 grub_gfxpayload_linux 变量。 纳克 grub2-mkconfig 会加载所有可用的 greb 图形驱动,然后使用最合适的那个。如果你希望改变这个行 1coreboot

47、是一个以 linux 为基础的开源韧体,它的开发目的在于取代目前市售计算机 都会看到的 bios,而 且它可以只在开机时运行特定的程序,从而节省系统资源。 12 为,你可以设置这个变量。在 grub2-install 执行后,可用的图形驱动名被放置到 /boot/grub2/video.ist grub_gfxmode 设置 gfxterm 图形终端的分辨率。如果你的图形卡支持 vbe(vesa bios extensions)你可以使用这个模 式。本地 lcd 面板分辨率可能无效。默认是 640x480 grub_background 设置 gfxterm 的背景图片。它的值必须是在 gru

48、b 启动时就能够读取到的文件。类型可以是.png .tga .jpg .jpeg.(需要载入对应的 png jpg tga 模块)图像会被缩放到匹配屏幕分辨率。 grub_theme 设置 gfxterm 图形终端的主题文件。 grub_gfxpayload_linux 1. 设置为text,强制 linux 内核以文本模式启动; 2. keep 保持图形模式,使用 grub_gfxmode , widthxheightxdepth 的设置孤行模式相关参 数; 3. 设置为逗号或者分号分割的列表,用来选择图形模式。 根据你的内核、发行版、你的显卡还有概率性问题,使用这个选项可能导致 linux

49、 产生很多显示问题,特别 是在引导早期。如果你启动出了问题,请设置为 text。 grub_disable_os_prober 通常 grub2-mkconfig 会使用外部程序 os-prober 。这个程序会发现电脑 安装的其他系统。并且产生合适 的菜单项。设置此选项值为 true可以关闭这个选项。 grub_init_tune 在 grub 启动时同步的在扬声器 播放声音。这对于没有显示器的人有用。选项的值被直接传递到 play 命 令。 grub_badram 如果开启了这个选项,grub 会使用 badram 命令过滤掉错误的内存区域。 grub_preload_modules 选项

50、值为用空格分割的一系列 grub 模块名。这些模块会在 grub.cfg 加载之前加载。 你可以从 grub2-mkconfig 的输出中看到更多信息。你可以修改 /etc/grub.d 目录下的脚本, /etc/grub.d/40_custom 通常用来添加某些菜单项。你可以把改动写到/etc/grub.d 下的任意的脚本里,通 常使用 40_custom 来添加某些菜单项,请不要修改这个文件内的头两行。 5.2 完整的配置文件 grub.cfg 的文件内容使用 grub 内置的脚本语言。它的语法类似与 bash 。 单词 words word 定义为一个连续的字符集合。一行字符串被元字符分

51、割成若干 word。元字符是在脚本中有特殊含 义的符号。元字符包括 空格、tab、换行 还有: | & $ ; 双引号和单引号扩住的字符串可以包含元字符。 保留字 13 保留字是在 grub 中有特殊含义的 word1。以下 word 被识别为保留字: ! case do done elif else esac fi for function if in menuentry select then time until while 并不是所有保留字目前都有作用,它们中的某些为未来的扩展而保留。 引号 引号用来移除元字符 和保留字 的特殊含义,把它们变成普通字符。 有 3 种引用机制:转义序列,

52、单引号 ,双引号 未被引号扩住的反斜线 是转义序列,它让下一个字符成为普通字符而不是元字符。它后面也可以直接 是换行字符。 单引号字符串,保持在引号内的所有字符都是普通字符,而不是元字符。字符串中出现单引号需要被转 义。除了单引号和反斜线自身,单引号字符串内不接受其他的转义序列。 双引号字符串,在字符串内可以使用 转义序列,可以使用$ 变量扩展。如果需要 $ 以普通字符出现, 需要将她们转义。反斜线紧接着换行,会当作续行符,它在进行语法解析前会从输入流中删除。例如: line=ok _line2 会产生字符串 ok_line2 ,续行符只是让脚本格式更好。 变量扩展 美元符号 $ 用来做变量扩

53、展。变量名可以被扩在花括号内,也可以省略。 var=_med_ pre=p suf=s echo $p$varil$suf 输出 p_med_ils,如果你不使用花括号$varil,而是使用$varil,那么系统会扩展搜索名为 varil 的变量, 由于这个变量不存在因此会被扩展为空。 位置变量代指名为数字的变量。它们用来代指函数输入参数。例如:$1 代表函数第一个参数,$2 代表第 二个参数,等等。 $? 用来代指 一个命令的退出状态。 $ 代指所有的位置变量,扩展成这样:$1 $2 $3 . . $* 代指所有的位置变量,扩展成这样:$1 $2 $3 . . $# 代指有效的位置变量的总数。 注释 以 #开始的 word 到行尾都被当作是注释,直接被忽略。#出现在字符串里或者被转义时除外。 简单命令 1word 被识别为保留字,前提是这个 word 没有被引号扩住,且出现在脚本语法可以出现保留字的地方 比如命令的第一个 word,for 语句的第 3 个 word。 14 一个简单命令是指一个 word 序列。其中第一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论