现在的位置: 首页 > 综合 > 正文

GRUB手册(3)

2013年09月10日 ⁄ 综合 ⁄ 共 11826字 ⁄ 字号 评论关闭
文章目录

7.       从网络启动GRUB

以下命令仅在PCBIOS系统上工作,在那里Preboot eXecution环境(PXE)可用。

网络产生一个PXE启动映像,运行:

grub-mkimage --format=i386-pc-pxe --output=grub.pxe --prefix=’(pxe)/boot/grub’pxe pxe

拷贝‘grub.pxe’,‘/boot/grub/*.mod’,及‘/boot/grub/*.lst’到PXE(TFTP)服务器,确保从TFTP服务器根目录,通过‘/boot/grub/’可以访问‘*.mod’及‘*.lst’。设置DHCP服务器配置把‘grub.pxe’作为启动文件(在ISC dhcpd中的‘filename’选项)。

你也可以使用实用程序grub-mknetdir来产生一个映像以及一个GRUB目录树,而不是手动地把文件拷来拷去。

在GRUB启动后,TFTP服务器上的文件将可以通过‘(pxe)’设备访问。

服务器及网关的IP地址可以通过把‘(pxe)’设备名改为‘(pxe:server-ip)’或‘(pxe:server-ip:gateway-ip)’来控制。注意在配置文件里,要同时修改前缀中及任意引用里的该设备名。

GRUB提供了几个环境变量,它们可被用于检查或改变PXE设备的行为:

net_pxe_ip            机器的IP地址。只读。

net_pxe_mac 网络接口的MAC地址。只读。

net_pxe_hostname       由DHCP提供的客户端主机名。只读。

net_pxe_domain   由DHCP提供的客户端的域名。只读。

net_pxe_rootpath  由DHCP提供的到客户端根硬盘的路径。只读。

net_pxe_extensionspath     由DHCP提供的到额外的DHCP厂商扩展的路径。只读。

net_pxe_boot_file       由DHCP提供的启动文件名。只读。

net_pxe_dhcp_server_name      负责这些启动参数的DHCP服务器名。只读。

pxe_blksize          PXE 传输块大小,缺省为512。

pxe_default_server      默认PXE服务器。读写,虽然设置它仅在打开一个PXE设备前有用

pxe_default_gateway         当联系PXE服务器时,所使用的默认网关。读写,虽然设置它仅在打开一个PXE设备前有用。

8.       通过串行线使用GRUB

本章描述如何使用GRUB中支持的串行终端。

如果你有许多计算机,或没有显示器/键盘的计算机,通过串行通信来控制计算机就十分有用。要通过一根串行线把一台计算机连到另一台计算机,你需要准备一根零调制解调(null-modem)(交叉)串行电缆,并且你需要多串口卡,如果你的计算机没有额外的串行口。另外,还需要一个终端仿真器,例如minicom。更多信息参考你的操作系统手册。

至于GRUB,建立一个串行终端的指令相当简单。这里是一个例子:

grub> serial --unit=0 --speed=9600

grub> terminal_input serial;terminal_output serial

命令serial以9600bps速率初始化串行单元0。串行单元0通过被称为‘COM1’,因此,如果你希望使用COM2,你必须指定‘--unit=1’。这个命令接受许多其它选项,因此更多细节请参考14.2.1节【串行】,52页。

命令terminal_input(参考14.2.2节【terminal_input】,37页)及terminal_output(参考14.2.3节【terminal_output】,37页)选择你希望使用的终端类型。在上面的情形中,终端将是一个串行终端,不过你还可以把console传给这个命令,如‘terminal_input serial console’。在这个情形下,你按下任意键的终端将被选定为一个GRUB终端。在上面的例子中, 注意你需要要把这两个命令放在同一行,因为在第一个命令后,你就不能在控制台输入命令了。

不过,注意,GRUB默认地假设你的终端模拟器与VT100兼容,你应该在命令中传入选项‘--dumb’,如果你的终端模拟器不是VT100兼容的,或实现了很少VT100的转义序列。如果你指定了这个选项,那么GRUB会提供另一个菜单接口,因为普通的菜单要求你的终端几个有趣的特性。

9.       利用厂商电源按钮使用GRUB

某些笔记本厂商提供一个额外的电源按钮来启动另外的OS。GRUB利用在default/grub(参考5.1节【简单配置】,11页)里的变量:GRUB_HIDDEN_TIMEOUT_BUTTON,GRUB_DEFAULT_BUTTON, GRUB_BUTTON_CMOS_ADDRESS,及GRUB_TIMEOUT_BUTTON,来支持这样的按钮。当使用这个特殊按钮启动时,使用GRUB_TIMEOUT_BUTTON,GRUB_DEFAULT_BUTTON及GRUB_HIDDEN_TIMEOUT_BUTTON,而不是对应的不带‘_BUTTON’后缀的变量。GRUB_BUTTON_CMOS_ADDRESS是厂商特定的,并且部分特定于型号。GRUB开放团队已经知道的值有:

DELL XPS M1530        85:3

ASUS EEEPC 1005PE         84:1(未确认)

为了充分利用这个功能,把GRUB安装入MBR(参考3.1节【使用grub-install安装GRUB】,6页)。

如果你有一台有类似特性,并且不在上面列表中的笔记本,怎样计算地址并贡献之?按下面那样做来发现地址:

  • 正常启动

sudo modprobe nvram

sudo cat /dev/nvram | xxd >normal_button.txt

  • 使用厂商按钮启动

sudo modprobe nvram

sudo cat /dev/nvram | xxd >normal_vendor.txt

然后比较这两个文本文件,看在哪里切换了一个比特。即,对于Dell XPS它是:

byte 0x47: 20 --> 28

从下面的表看到它是第3位比特:

0       01

1       02

2       04

3       08

4       10

5       20

6       40

7       80

0x47是十进制71。Linux nvram实现截去CMOS的前14个字节。因此在CMOS中的真正的字节地址是71+14=85,因此完整的地址是85:3

10.   GRUB映像文件

GRUB包含了几个映像:用于以各种方式启动GRUB的各个引导映像,一个内核映像,及一组与内核映像组合构成一个core映像的模块。这里是它们的一个简短的概括。

boot.img

在PC BIOS系统上,这个映像是首先要启动的GRUB的部分。它被写入一个主启动记录(MBR)或一个分区的启动扇区。因为一个PC启动扇区是512字节,这个映像的大小正好是512字节。‘boot.img’的唯一功能是从一个本地硬盘读入core映像的第一个扇区,并跳转到那里。因为大小的限制,‘boot.img’不能理解任何文件系统,因此在安装GRUB的时候,grub-setup把core映像第一个扇区的位置硬编码(hardcode)入‘boot.img’。

diskboot.img

当从一个硬盘上启动时,这个映像被用作core映像的第一个扇区。它把core映像的余下部分读入内存,并启动内核。因为此时文件系统的处理仍不可用,它使用一个块列表格式来对core映像位置进行编码。

cdboot.img

当从一个CD-ROM驱动器启动时,这个映像被用作core映像的第一个扇区。它提供与‘diskboot.img’类似的功能。

pxeboot.img

当使用PXE从网络启动时,这个映像被用作core映像的起点。参考第7章【网络】,24页。

lnxboot.img

为了使GRUB足够像一个Linux内核,以便它可以被LILO使用一个‘image=’ 选项启动,这个映像可能被放置在core映像的开头。

kernel.img

这个映像包含了GRUB基本的运行时设施:设备框架及文件处理,环境变量,救援模式命令行解析器,等等。它很少被直接使用,而是被构建入所有的core映像。

core.img

这是GRUB的核心(core)映像。它由grub-mkimage程序从内核映像及一组任意的模块动态构建。通常,它包含足够的模块来访问‘/boot/grub’,并在运行时从文件系统载入所有的东西(包括菜单处理,载入目标操作系统的能力,等等)。模块化设计使得这个核心映像保持小的尺寸,因为它所必须安装的硬盘区域通常只有32KB。

核心映像可以被安装在PC系统的何处的细节,参考3.4节【BIOS安装】,8页。

*.mod

GRUB留在动态可载入模块中的部分。这些通常会自动载入,或者构建入core映像如果它们是必要的,不过也可以通过使用insmod命令(参考14.3.22节【insmod]】,41页)来手动载入。

对于GRUB Legacy的用户

GRUB 2与GRUBLegacy有不同的设计,因此对应它所使用的映像并不确切。不过,GRUB Legacy用户经常以他们熟悉的术语来提问,因此在这里有一个简短的指引,关于GRUB 2的映像如何与之相关。

stage1

来自GRUB Legacy的stage 1非常类似于GRUB2中的‘boot.img’,并且它们提供相同的功能。

*_stage1_5

在GRUB Legacy中,Stage 1.5的功能是包含足够的文件系统代码,以从普通的文件系统读入大得多的Stage 2。在这方面,其功能类似于GRUB 2中的‘core.img’。不过,‘core.img’比Stage 1.5能干多的;因为它提供了一个救援的shell,如果不能载入其它模块,比如分区号被改变了,有时能恢复。‘core.img’以更灵活的方式构建,允许GRUB 2为从更先进的硬盘类型,比如LVM及RAID读入模块,提供支持。

在某些有限制的配置中,GRUB Legacy只能运行Stage 1与Stage 2,而GRUB 2要求‘core.img’,没有它就不能工作。

stage2

GRUB 2没有单独的Stage 2映像。取而代之,在运行时,它从‘/boot/grub’载入模块。

stage2_eltorito

在GRUB 2中,用于从CD-ROM驱动启动的映像现在是使用‘cdboot.img’及‘core.img’来构建,确保核心映像包含‘iso9660’模块。通常最好使用grub-mkrescue程序。

nbgrub

到目前为止,‘nbgrub’在GRUB 2里没有对应物;它被Etherboot及其它网络启动载入器所使用。

pxegrub

在GRUB 2中,用于PXE网络启动的映像现在使用‘pxeboot.img’及‘core.img’来构建,确保核心映像包含‘pxe’及‘pxecmd’模块。参考第7章【网络】,24页。

11.   文件系统词法及语义

GRUB使用特殊的词法来描述可被BIOS访问的硬盘驱动器。由于BIOS的局限,GRUB不能区分IDE,ESDI,SCSI,及其它。你自己必须知道哪个BIOS设备是哪个OS设备。通常,如果你看到一个设备中的文件,或使用search(参考14.3.40节【搜索】,44页),就会清楚。

11.1.  如何描述设备

描述设备的词法就像这样:

(device[,part-num][,bsd-subpart-letter])

‘[]’表示该参数是可选的。Device应该是‘fd’或‘hd’,后跟一个数字,如‘fd0’。不过你也可以把设备设置为一个BIOS设备号,因此以下是等效的:

(hd0)

(0x80)

(128)

part-num代表设备的分区号,对主分区从1开始,对于扩展分区从5开始,而bsd-subpart-letter代表BSD硬盘标签子分区,比如‘a’或‘e’。

一个用于描述BSDsubpartitions的捷径是(device,bsd-subpart-letter),在这个情形里, GRUB查找包含一个BSD盘符的第一个PC分区,然后找到子分区bsd-subpart-letter。这里是一个例子:

(hd0,a)

语法 ‘(hd0)’表示使用整个硬盘(或当安装GRUB时,MBR),而语法‘(hd0,1)’表示使用该硬盘的第一个分区(或当安装GRUB时,该分区的启动扇区)。

如果你激活了网络支持,特殊设备‘(pxe)’同样可用。在使用网络驱动器之前,你必须初始化网络。更多信息,参考第7章【网络】,24页。

如果你从一个CD-ROM启动GRBU,可以使用‘(cd)’。细节参考3.2节【制作一个GRUB可启动的CD-ROM】,7页。

11.2.  如何描述文件

有两个方式来描述文件,通过绝对文件名及通过块列表。

一个绝对文件名类似一个Unix绝对文件名,把‘/’用作目录分隔符(不是DOS中的‘\’)。一个例子是‘(hd0,1)/boot/grub/grub.cfg’。这表示文件‘/boot/grub/grub.cfg’在第一个硬盘的第一个分区。如果你在一个绝对文件名中忽略了设备名,GRUB隐含地使用GRUB的启动设备。因此如果你设置了启动设备,比如,通过命令‘set root=(hd1,1)’设置了‘(hd1,1)’(参考14.3.42节【set】,47页),那么/boot/kernel就与 (hd1,1)/boot/kernel相同。

11.3.  如何描述块列表

一个块列表用于描述一个不出现在文件系统中的文件,比如一个链式载入器。其语法是 [offset]+length[,[offset]+length].... 这里是一个例子:

0+100,200+1,300+300

这表示GRUB应该读入从0到99的块,块200,及从300到599的块。如果你忽略了偏移,那么GRUB假定偏移是0。

类似文件名语法(参考11.2节【文件名语法】,28页),如果一个块列表不包含一个设备名,那么GRUB就使用GRUB的启动设备。因此 当启动设备是‘(hd0,2)’时,(hd0,2)+1就相当于+1。

12.   GRUB用户接口

GRUB有一个简单菜单接口用于从一个配置文件选择预设项,及一个高度灵活的命令行来执行任意期望的启动命令组合。

一旦载入,GRUB就查找其配置文件。如果找到一个,那么使用在这个文件中发现的项的完整菜单接口就被激活。如果你选择命令行菜单选项,或如果没有找到配置文件,那么GRUB跑到命令行接口。

12.1.  灵活命令行接口

命令行接口通过一个提示符,其后是一个非常类似于Unix或DOS命令行的可编辑文本区。每个命令在键入后立即执行(不过,这个行为在未来的版本中就被改变,以用户可见的方式)。这些命令(参考14.3节【命令行及菜单项命令】,37页)是配置文件中可用命令的子集,使用几乎相同的语法。

光标移动及行上编辑文本可以通过Bash shell中可用功能子集完成:

C-F

PC RIGHT KEY   向前移动一个字符。

C-B

PC LEFT KEY      向后移动一个字符。

C-A

HOME          移到行开头。

C-E

END              移到行结尾。

C-D

DEL              删除光标下的字符。

C-H

BS                 删除光标左边的字符。

C-K               删除光标到行尾的文本。

C-U               删除光标到行开头的文本。

C-Y               在光标处恢复删除的文本。

C-P

PC UP KEY   在历史命令列表中上移一个记录。

C-N

PC DOWN KEY   在历史命令列表中下移一个记录。

当交换第键入命令时,如果光标位于命令行上第一个字之前或之内,按下TAB键(或C-I)将显示可用命令列表,而如果光标在第一个字之后,TAB将根据上下文,提供一个硬盘,分区,及文件名的完整列表 。注意为了得到一个驱动器列表,必须使用一个括号,如root (。

注意在TFTP文件系统中你不能使用完整的功能。这是因为出于安全原因TFTP不支持文件名列表。

12.2.  简单菜单接口

菜单接口相当容易使用。其命令既合理直观,又在屏幕上得到描述。

基本上,菜单接口提供了一列启动项来给用户选择。使用箭头键来选择选定的项,如何按下RET来运行之。可用一个可选的超时来启动默认项(如果没有设定,第一项),按下任意键将中断超时启动。

按下C进入一个命令行,可使用命令(其操作非常类似没有配置文件的GRUB,不过允许通过按下ESC返回菜单);或按下E来编辑任意启动项。

如果你使用一个password来保护菜单接口(参见第15章,55页),你所能做的就是通过按下RET选定一个项,或按下P来输入password。

12.3.  编辑一个菜单项

菜单项编辑器看起来很像主菜单接口,不过在其菜单里是选定项的命令,而不是项名字。

如果在编辑器中按下ESC,会放弃对项配置的所有改变,并返回到主菜单接口。

在菜单项里的每一行都可以自由编辑,通过在一行末尾按下RET,你可以添加新行。按下CTRL-X,启动编辑后的项。

虽然很不幸GRUB不支持取消(undo),但通过使用ESC返回主菜单,你可以做几乎完全相同的事。

13.   GRUB环境变量

GRUB支持类似于所有类Unix系统所提供的环境变量。环境变量有一个名字,它必须是唯一的,通常是一个短标识符,及一个值,它是一个任意字符串。它们可能被设置(参见14.3.42节【set】,47页),取消设置(unset)(参考14.3.44节【unset】,47页),或按名查找(参考5.2节【 [类Shell脚本],15页】。

对于GRUB不同的部分,一些环境变量由特殊的含义。其它可以被自由用在GRUB的配置文件里。

13.1.  特殊环境变量

这些环境变量对于GRUB有特殊含义。

13.1.1.     biosnum

当链式载入另一个启动载入器(参考4.1.2节【链式载入】,9页),GRUB可能需要知道哪个BIOS驱动号对应于根设备(参考13.1.29节【root】,34页)以便它可以正确地设立寄存器。如果设置了变量biosnum,它将覆盖GRUB本身对此猜测的结果。

至于另一个也会为链式载入系统改变BIOS驱动器映射的途径,参考14.3.12节【drivemap】,35页。

13.1.2.     chosen

当执行一个菜单项时,GRUB把变量chosen设置为将要执行项的标题。

如果该菜单项在一个或多个子菜单里,那么chosen被设置为从顶层开始的子菜单标题,后跟这个菜单项标题,标题由‘>’分隔。

13.1.3.     color_highlight

这个变量包含终端的“highlight”(高亮)前景、背景色,由反斜杠(‘/’)分隔。设置该变量来改变这些颜色。至于可用的颜色名,参见13.1.4节【color_normal】,32页。

缺省值是‘black/white’。

13.1.4.     color_normal

这个变量包含终端的“normal”(普通)前景、背景色,由斜杠(‘/’)。设置该变量来改变这些颜色。颜色必须是下面列表中的一个名字:

  • black
  • blue
  • green
  • cyan
  • red
  • magenta
  • brown
  • light-gray
  • dark-gray
  • light-blue
  • light-green
  • light-cyan
  • light-red
  • light-magenta
  • yellow
  • white

缺省值是‘white/black’。

13.1.5.     debug

这个变量可能被设置来使能GRUB各个组件的调试输出。其值是一组由‘,’分隔的调试设施名,或‘all’来使能所有可用的调试输出。

13.1.6.     default

如果设置了这个变量,它标记应该被默认选中的一个菜单项,或许在一个超时后(参考13.1.32【timeout】35页。该菜单想可能通过号码或标题来识别。

如果该项在一个子菜单中,那么它必须使用从顶层开始的子菜单标题,后跟这个菜单项的号码或标题,标题间以‘>’分隔,来识别。例如,以下菜单结构为例:

Submenu 1

Menu Entry 1

Menu Entry 2

Submenu 2

Submenu 3

Menu Entry 3

Menu Entry 4

Menu Entry 5

“MenuEntry 3”应被识别作‘Submenu 2>Submenu 3>MenuEntry 3’。

这个变量经常为‘GRUB_DEFAULT’(参考5.1节【简单配置】,11页),grub-set-default,或 grub-reboot所设置。

13.1.7.     fallback

如果设置了这个变量,它标识了一个菜单项,如果默认菜单项启动失败,就应该被选中。项以与‘default’(参考13.1.6节【default】,32页)相同的方式来识别。

13.1.8.     gfxmode

如果设置了这个变量,它设置了‘gfxterm’图形化终端所使用的分辨率。注意你可以只能使用你的显卡通过VESA BIOS扩展(VBE)所支持的模式,因此例如LCD面板原始分辨率可能不可用。缺省值是‘auto’,它选择一个特定于平台的看上去合理的缺省值。

分辨率可能被指定为一组由逗号或分号分隔的一个或多个模式;它们将被依次尝试,直到找出一个。每个模式应该是‘auto’,‘widthxheight’,或 ‘widthxheightxdepth’。

13.1.9.     gfxpayload

如果设置了这个变量,它控制Linux内核启动所在的视频模式,替代启动选项‘vga=’(参考14.3.24节【linux】,41页)。它可以被设置为‘text’来强制Linux内核以普通文本模式启动,‘keep’来保留由‘gfxmode’设置的图形模式,或其它‘gfxmode’所允许的值来设定特定的图形模式(参考13.1.8节【gfxmode】,32页)。

依赖于你的内核,你的发布版本,你的显卡,及月相(the phase of the moon),注意使用这个选项可能导致GNU/Linux遭遇各种显示问题,尤其在启动的早期。如果你有这样的问题,把这个变量设为‘text’,GRUB将告知Linux以普通文本模式启动。

其默认值是平台特定的。在具有一个纯文本模式的平台上(比如PC BIOS平台),缺省值是‘text’。否则缺省值可能是‘auto’或特定的视频模式。

这个变量通常为‘GRUB_GFXPAYLOAD_LINUX’(参考5.1节【简单配置】, 11页)所设置。

13.1.10.   gfxterm_font

如果设置了这个变量,它命名了在图形化终端里文本所使用的字体。否则,‘gfxterm’可能使用其它可用字体。

13.1.11.   icondir

如果设置了这个变量,它命名了一个目录, GRUB的图形化菜单,在查找了主题的‘icon’目录后,在其中查找图标。参考第6章【主题文件格式】,18页。

13.1.12.   lang

如果设置了这个变量,它给出了gettext 命令(参考14.3.16节【gettext 】,40页)用来翻译字符串的语言编码。例如,法语应该被命名为‘fr’,而简体中文为‘zh_CN’。

grub-mkconfig(参考5.1节【简单配置】,11页)将尝试基于系统的地点(locale )设置合理的缺省值。

13.1.13.   locale_dir

如果设置了这个变量,它命名了可用找出翻译文件的目录(参考14.3.16节【gettext】,56页),通常是‘boot/grub/locale’。否则, 禁止国际化。

如果国际化是需要的,并且翻译文件可用,grub-mkconfig(参考5.1节【简单配置】,11页)将为这个变量设置合理的缺省值。

13.1.14.   menu_color_highlight

这个变量包含了用于高亮菜单项的前景及背景颜色,由斜线(‘/’)分隔。设置这个变量会改变这些颜色。至于可用颜色名,参考13.1.4节【color_normal】,31页。

缺省值是‘color_highlight’的值(参考13.1.3节【color_highlight】,31页)。

13.1.15.   menu_color_normal

这个变量包含了用于非高亮菜单项的前景及背景颜色,由斜线分隔(‘/’)。设置这个变量会改变这些颜色。至于可用颜色名,参考13.1.4节【color_normal】,31页。

缺省值是‘color_normal’的值(参考13.1.4节【color_normal】,31页)。

13.1.16.   net_pxe_boot_file

参考第7章【网络】,24页。

13.1.17.   net_pxe_dhcp_servername

参考第7章【网络】,24页。

13.1.18.   net_pxe_domain

参考第7章【网络】,24页。

13.1.19.   net_pxe_extensionspath

参考第7章【网络】,24页。

13.1.20.   net_pxe_hostname

参考第7章【网络】,24页。

13.1.21.   net_pxe_ip

参考第7章【网络】,24页。

13.1.22.   net_pxe_mac

参考第7章【网络】,24页。

13.1.23.   net_pxe_rootpath

参考第7章【网络】,24页。

13.1.24.   pager

如果设置为‘1’,每一满屏后暂停输出,等待键盘输入。缺省是不暂停输出。

13.1.25.   prefix

以一个绝对文件名(参考11.2节【文件名语法】,28页)形式的‘/boot/grub’目录位置。这通常由GRUB,在启动时,根据grub-install提供的信息设置。从这个目录,GRUB模块被动态载入,因此要使GRUB工作,它必须被正确设置。

13.1.26.   pxe_blksize

参考第7章【网络】,24页。

13.1.27.   pxe_default_gateway

参考第7章【网络】,24页。

13.1.28.   pxe_default_server

参考第7章【网络】,24页。

13.1.29.   root

根设备名(参考11.1节【设备语法】,28页)。任意不显示一个明显设备名的文件名从这个设备读入。缺省值通常由GRUB,在启动时,根据‘prefix’(参考13.1.25节【prefix】,34页)的值设置。

例如,如果GRUB被安装在第一个硬盘的第一个分区上,那么‘prefix’可能被设置为 ‘(hd0,msdos1)/boot/grub’,而‘root’为‘hd0,msdos1’。

13.1.30.   superusers

这个变量可能被设置为一组超级用户名来使能鉴权支持。参考第15章【安全】,48页。

13.1.31.   theme

这个变量可能被设置为一个包含一个GRUB图形化菜单主题的目录。参考第6章【主题文件格式】,18页。

这个变量通常由‘GRUB_THEME’参考5.1节【简单配置】,11页)来设置。

13.1.32.   timeout

如果设置了这个变量,它指定了,在启动默认菜单项前,等待键盘输入的秒数。一个为0的timeout表示不显示菜单直接启动默认菜单项;一个为-1(或取消设置)的timeout表示永久等待。

这个变量通常由‘GRUB_TIMEOUT’或‘GRUB_HIDDEN_TIMEOUT’(参考5.1节【Simple configuration】,11页)来设置。

13.2.  GRUB环境块

从一次启动到下一次启动,能记住少量消息,这通常是有用的。例如,你可能希望基于上一次选择的结果设定缺省菜单项。GRUB,经过深思熟虑,为了尽量减少启动载入器导致文件系统崩溃的可能性,不实现写入文件的支持,因此一个GRUB配置文件不能以通常的方式曾经一个文件。不过,GRUB提供一个可用于保存少量状态的“环境块”(environment block)。

环境块是一个预分配1024字节的文件,它通常在‘/boot/grub/grubenv’(虽然你不应该这样假定)里。在启动时刻,load_env命令(参考14.3.27节【load_env】,42页)从它载入环境变量,而save_env(参考14.3.39节【save_env】,44页)命令向它保存环境变量。从一个正在运行的系统,实用程序grub-editenv可以被用于编辑环境块。

出于安全原因,只有安装在一个纯硬盘(不是LVM或RAID)上,使用一个非校验(不是ZFS)文件系统,并使用BIOS或EFI功能(非ATA,USB或IEEE1275)时,这个存储才可用。

grub-mkconfig使用这个设施来实现‘GRUB_SAVEDEFAULT’参考5.1节【假定配置】,11页)。

 

抱歉!评论已关闭.