Grub2中文指南2---设置、自定义

设定 GRUB 2

设定变更通常会修改 /etc/default/grub /etc/grub.d 目录中的自定义档案。/boot/grub/grub.cfg 档不应由使用者直接编辑;此档案由设定稿来变更。

某些最常见的变更,例如默认的操作系统/核心和选单逾时,可以经由一个图形用户界面应用程序「StartUp-Manager」来修改。如何安装及使用此应用程序的相关讯息请参考社群文件 StartUpManager

/etc/default/grub(档案)

·         变更预设设定的主要配置文件。在安装时,以下内容可由使用者变更:

·         GRUB_DEFAULT- 设定默认选单选项。选项可以是数字、完整的选单选项文字或是「saved」。

·          

o    GRUB_DEFAULT=0 以选单位置来设定默认选单选项。如同 GRUB,在 grub.cfg 中的第一笔「选单选项」为 0,第二笔为 1,余类推。

o    GRUB_DEFAULT="xxxx" 一个完全相同的选单条目,包含双引号,也可被使用。在此例中,选单中的位置不会有影响。例如:GRUB_DEFAULT="Ubuntu, Linux 2.6.31-9-generic"

o    GRUB_DEFAULT=saved

o     

§  本段中的信息应用于 GRUB 1.98 及之后版本中。

§  启用「grub-reboot」和「grub-set-default」指令来设定默认操作系统。

§  默认操作系统将不会经由来自选单中的交互式选择而被设定。

§  grub-set-default 设定默认开机选项直到有所变更。

§   

§  格式为 sudo grub-set-default X,此处的 X 代表选单选项的位置(第一笔由 0 开始)或是完全一致的选项字符串。例如:sudo grub-set-default 3 将使用选单选项位置,或是 sudo grub-set-default "Ubuntu, Linux 2.6.32-15-generic" 表示选单选项字符串。

§  欲取得现存的选单选项选择数字(由 0 开始)或是选单选项「字符串」,执行 grep menuentry /boot/grub/grub.cfg

§  grub-reboot 此指令只设定下一次开机时的默认开机选项。指令格式与 grub-set-default 相同(参考上面)。

·         GRUB_SAVEDEFAULT= 若设定为 true 则上次所选择的开机选项将会自动成为下次开机时的默认值。

·          

o    不需要执行指令来设定默认操作系统。

o    任何时间只要手动选择 GRUB 2 选单中的选项,它就会变为默认操作系统。

o    若您的 /boot 目录位于 LVM 分割区或是 RAID 上,此选项会无作用

·         GRUB_HIDDEN_TIMEOUT=0

·          

o    此设定用来决定 GRUB 2 选单会有多长时间不被显示。当屏幕是空白时,用户可以按下任何键以显示选单。

o    默认状态下若只有存在一个操作系统时才会隐藏选单。如果用户只有一个 Ubuntu 想要显示选单,那么在此选项最前方加上一个 # 符号来关闭此隐藏选单功能。

o    GRUB 1.97~beta - Karmic 使用的版本开始,选单能否包含空白屏幕的倒数延迟取决于 GRUB 2 是否找到多重操作系统。
多重操作系统用户注意:若执行 /etc/grub.d/30_os-prober 时,GRUB 2 os-prober 发现额外的操作系统,隐藏选单的 timeout 功能会依照某些条件状况而关闭。这也会同时关闭开机时按住 SHIFT 以显示选单的功能。多重操作系统的用户想要隐藏选单的话,可以在各大论坛中(例如:ubuntuforums)找到如何编辑的文件,以在开机过程中加入隐藏倒数的功能。

o    GRUB_HIDDEN_TIMEOUT=0 在单一操作系统计算机中。

o     

§  不会有选单显示。系统将会立刻以默认操作系统开机。

§  只有一个操作系统识别出来的状况下,这是预设的设定。

§   

§  在此状态下若想显示选单,就在此行最前方加上 # 符号并确认 GRUB_TIMEOUT 设定为正整数。

§  若数值设为 0,会进行一个按键状态检查来确认 SHIFT 键是否被按住。若 GRUB 2 认定在开机过程中 SHIFT 键是被按住的,则选单就会显示出来。这样能让用户有方法在没有显示选单的情形下中断自动开机程序。

o    GRUB_HIDDEN_TIMEOUT=X

o     

§  X 为一正整数(例如 1510 等等)

§  开机程序将会暂停并显示空白画面或是已设定的开机影像 X 秒钟。在时间结束后,系统将会开机。不会有选单显示。

§  GRUB_HIDDEN_TIMEOUT 启用时,可以按下任何键以显示选单。

o    GRUB_HIDDEN_TIMEOUT=

o     

§  符号后没有输入任何数值

§  选单将会依据 GRUB_TIMEOUT 设定的数值作为显示的秒数。

·         GRUB_HIDDEN_TIMEOUT_QUIET=true

·          

o    true 不显示倒数。屏幕将会是空白的。

o    false GRUB_HIDDEN_TIMEOUT 中设定的时间内,空白屏幕上会显示一个倒数定时器。

·         GRUB_TIMEOUT=10

·          

o    此指令将推迟 GRUB_HIDDEN_TIMEOUT 设定,除非 GRUB_HIDDEN_TIMEOUT 被批注掉(#)。若 GRUB_HIDDEN_TIMEOUT 启用,则当选单显示时,GRUB_TIMEOUT 将会只运作一次。

o    设定此值为 -1 将会导致选单持续显示,直到用户进行选择。

o    GRUB 2 选单预设为隐藏,除非其他操作系统被系统侦测到。若没有其他操作系统,此行将会被批注掉,除非使用者改变之。为了在每次开机时显示选单,去掉此行的批注并使用 1 或更大的值。

·         GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian

·          

o    取得选单选项中的描述名称。(Ubuntu, Xubuntu, Debian 等等。)

·         GRUB_CMDLINE_LINUX

·          

o    若存在,无论在一般或是救援模式,此行将汇入任何在 'linux' 批注行中的项目(传统 GRUB 的「kernel」行)。类似于 menu.lst 中的「altoptions」行。

·         GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

·          

o    此行将汇入任何在 'linux' 行中的项目(传统 GRUB 的「kernel」行)。此选项只会附加于一般模式的最后方。类似于 menu.lst 中的「defoptions」行。欲显示黑色屏幕以及开机行程文字,移除「quiet splash」。若想看到 grub 开机影像及简短的文字输出,使用「splash」。选项「acpi=off」,若有需要的话,也可以输入在此行。

·         #GRUB_TERMINAL=console

·          

o    移除批注以停用图形化终端机(只限 grub-pc

·         #GRUB_DISABLE_LINUX_UUID="true"

·          

o    若您不想让 GRUB 传递「root=UUID=xxx」参数给 Linux 时,移除此批注。

o    这里有一个 bug,若使用者移除最前面的批注符号,则 true 必须要有双引号包起来以使得此选项生效。双引号预设并没有出现,使用者必须手动加入。

·         #GRUB_GFXMODE=640x480

·          

o    您可移除 # 符号来启用此行。此选项会设定图形化选单的分辨率(选单文字大小)。它将提供用户的显示适配器所支持的分辨率(例如 640x480, 800x600, 1280x1024 等等)。此设定只套用于开机选单显示,而不是完成开机后的操作系统分辨率。

o     

§  小技巧:在 GRUB 2 中设定与操作系统相同的分辨率将会稍微减少开机所需时间。

o    虽然并不是必要,使用者可以指定颜色深度,附加在分辨率设定之后。一个例子像是 1280x1024x24 640x480x32

o    用户可以加入多个分辨率。若 GRUB 2 无法使用第一个选项,它会试着使用下一个设定。设定由逗号分开。例如:1280x1024x16,800x600x24,640x480

o    若有使用开机影像,请确定分辨率设定和开机影像大小兼容。

o    若使用的选项导致在执行 update-grub 时有「无法找到 (not found)」讯息,试着加上或变更颜色深度设定。

o    能够在 GRUB 2 中使用的分辨率可透过在 GRUB 2 命令行模式下键入 vbeinfo 得知。此命令行模式可在 GRUB 2 选单画面显示时按下「c」键进入。

o    若此行被批注掉(#)或是分辨率无法使用,GRUB 2 将使用由 /etc/grub.d/00_header 中的预设设定。

o    欲参考关于使用开机影像时改变分辨率的指南请参考开机影像和主题小节。

·         GRUB_DISABLE_LINUX_RECOVERY=true

·          

o    加上或移除此行批注来防止「救援」模式核心选项显示在选单中。若您只想要在其中一个核心有「救援」选项,在 /etc/grub/40_custom 中制作一个特殊选项。

·         GRUB_INIT_TUNE="480 440 1"

·          

o    当移除批注时,会在 Grub 2 选单显示前播放一次哔声。

o    格式为节奏 [音调1 持续时间1][音调2 持续时间2]...

o     

§  节奏只需设定一次,应用于所有持续时间设定。

§  持续时间 60/节奏的结果,当持续时间 1 节奏 60 时,会产生一个长度为一秒钟的哔声。持续时间 1 节奏 480 时会产生长度为 0.125 秒的哔声。

o    警告:选单会在声音播放完毕后才显示。制作一个冗长的旋律将会让选单显示延迟。

o    在终端机中可以输入 info grub --index-search play 来读取联机帮助文件。此份文件会说明使用 play file 指令来播放 little-endian 格式制作的旋律。

·         额外可能包含的指令:

·          

o    GRUB_DISABLE_OS_PROBER=true

o     

§  启用/停用 os-prober 对其他分割区操作系统的检查,包括 Windows, Linux, OSX Hurd

开机显示行为

GRUB 2 会在任何操作系统前加载。它的模块化组件将在依需求的情形下被加载。选单显示行为基本上由 /etc/default/grub 来决定。特定选项和格式化指引请参考「设定 GRUB 2」小节。

初始化默认值

·         若没有侦测到其他操作系统,GRUB 2 将会直接开机至默认的操作系统中。不会显示选单。若侦测到其他操作系统,GRUB 2 选单将会显示。

逾时显示

·         选单将会在预定的秒数中显示。默认选项会以高亮度表示,使用者可以在逾时时间到期前选择其他选项。预设的逾时时间为 3 秒。定时器会在任何按键被按下前或是按下 ENTER 选定高亮度标明的选项前持续计时。若使用者未进行输入则 GRUB 2 将会在逾时时间到期时以默认选项开机。

·         当按下任何按键时,逾时将会失效,且使用者必须手动进行选择。

·         默认选项由 /etc/default/grub 中的 DEFAULT= 来设定;第一笔「选单选项」的值为「0」。

隐藏

·         不显示选单选项。若有设定开机影像,将会显示开机影像。

·         使用者可以藉由按住 SHIFT 键直到选单显示,以此来中断开机程序并显示选单。

·          

o    GRUB 2 会在开机过程中搜寻 SHIFT 键按下的讯号。若此键按下或是 GRUB 2 无法确认此键的状态,选单将会显示。

·         屏幕保持空白但允许显示选单的时间是由 /etc/default/grub 中的设定来决定。

·         GRUB 2 可以显示一个倒数定时器以提供剩余时间的视觉回馈,直到默认的选项被选定。此逾时设定在 /etc/default/grub 中。

·         在逾时时间结束时,在 /etc/default/grub 中所设定的默认选项将会被选定。

储存

·         若在 /etc/default/grub 设定为 DEFAULT=saved,则可以执行 sudo grub-set-default 指令来储存默认的操作系统。当 /etc/default/grub 设定为 SAVEDEFAULT=true 时也可储存。在此情况下,默认的操作系统将会保持设定,直到从 GRUB 2 选单中手动选择新的操作系统或是执行了 grub-set-default 指令。

上次开机失败或开机至恢复模式

若上次开机失败或开机至恢复模式后,选单将会显示出来直到用户作出选择。此情况下在 /etc/default/grub 的倒数时间设定将不会生效。若想改变此特性,必须要修改 /etc/grub.d/00_header(在测试 recordfail 状态的 if 叙述中,位于 00_header 的末端)。

 

自定义选单项目

GRUB 2 允许用户建立自定义选单选项,在执行 sudo update-grub 时此选项将会自动加入主选单中。在 /etc/grub.d/ 中有一个空的 40_custom 档可以使用,或是以其当作建立其他自定义选单的模板。这里有一些自定义选单需要考虑的地方:

·         档案的名称将会决定选项在选单中的排序。数字文件名会在前先执行,跟着是文本文件名。

·          

o    10_linux 选项会出现在 30_os-prober 选项之前,然后跟着是 40_custom 选项,最后是 my.custom.entries

o    用户欲将自定义选项排在主选单第一位,可以将档案命名为 06_xxx 如此一来它将会是选单中的第一笔选项。

·         档案必须有可执行权限:sudo chmod +x /etc/grub.d/filename

·         update-grub 指令未执行前,grub.cfg 的内容不会加入新增变更部份。

·         不像 grub.cfg,自定义档案可以在任何时间编辑,不是只读权限,而且若想要的话可以以使用者为档案拥有者。

·         自定义档案是静态的。当新的核心加入或移除时其内容将不会被变更(除非内容受使用者加入的命令稿影响)。

若自定义档案将 menuentry 放在 grub.cfg 的最上方,使用者也许想要在执行 update-grub 后确认 /etc/default/grub DEFAULT= 设定状态。确保它依然指到想要的选单选项上。在计数时,/etc/default/grub 第一笔「选单选项」为 0

建立自定义选单

使用者可选择由预设的 /etc/grub.d/40_custom 档来修改或是建立一个新档。建立一个新自定义选单最简单的方法为从 /boot/grub/grub.cfg 复制一份使用中的选项。复制之后,在 40_custom 中的内容可剪裁为用户想要的样式。

·         根据默认的范例自定义文件(/etc/grub.d/40_custom)在 /etc/grub.d 中任何自定义档的头两行应该是:

#!/bin/sh
exec tail -n +3 $0

·         使用者可从 /boot/grub/grub.cfg 或是从传统 GRUB 档中复制已存在的选单选项。若使用者想从传统 GRUB menu.lst 中复制:

·          

o    若使用者从 GRUB 升级至 GRUB 2 则也许可找到一份备份文件在 /boot/grub 目录下。

o    以下来自 GRUB 选单中的项目必须修改才能作用:

o     

§  title 更改为 menuentry。此行必须由 { 作为结束

§  root 更改为 set root=

§  kernel 必须改为 linux

§  任何 partition 命名(sda4, sdb6)必须修改,因为 GRUB GRUB 2 的分割区计数方式不同。GRUB 2 中的第一个分割区为 1,不是 0。装置依然由 0 开始计数。

§  仔细检视任何作用中的 GRUB 2 menulist 条目格式以确保使用正确的格式。

·         一般 menuentry 建构规则:

·          

o    第一行一定由 menuentry 开头,并以 { 结束

o    大括号之间的区域就是会出现在 GRUB 2 的内容。依照需求编辑。

o    menuentry 最后一行一定是 }

o    每行最后面不要留下空白

o    set root= 行应该指到 GRUB 2 /boot 地址(sdXY

o    linux 行中的 root 应指向系统分割区。

o     

§  GRUB 2 无法找到指定的核心,试试看以装置名称来取代 UUID(例如:/dev/sda6)。

·         一份从 grub.cfg 复制来由用户修改过的选项范例可能会看起来像这样:

menuentry "My Default Karmic" {
set root=(hd0,1)
search --no-floppy --fs-uuid --set cb201140-52f8-4449-9a95-749b27b58ce8
linux /boot/vmlinuz-2.6.31-11-generic root=UUID=cb201140-52f8-4449-9a95-749b27b58ce8 ro quiet splash
initrd /boot/initrd.img-2.6.31-11-generic
}

·         一份由网站上的指令将系统还原光盘(SystemRescueCD)安装为硬盘版(在 sda8 上)的选项范例:

menuentry "System Rescue CD" {
set root=(hd0,8)
linux /sysrcd/rescuecd subdir=sysrcd setkmap=us
initrd /sysrcd/initram.igz
}

·         一份连锁加载另一个 GRUB 启动加载程序的选项范例:

menuentry "Grub 1 Bootloader" {
set root=(hd0.8)
chainloader +1
}

Grub 2 可以被设定为若默认选单项目因某些原因而开机失败时,退回至先前成功开机的选单项目。这个网页(德文)可以找到一个范例稿以达成此目的。

posted @ 2013-07-22 20:25  李庆喜  阅读(1773)  评论(0编辑  收藏  举报