如何修改GRUB

1. 相关重要文件

要修改grub,请注意以下几个重要档案:

  1. /boot/grub/grub.cfg
    此档案中包含了GRUB选单资讯。
    注意他的开头,说明了这是由/etc/grub.d与/etc/default/grub所生成的,不要自己编辑。这个档案还是唯读属性,就是要避免你直接去编辑。
    若是你修改了这个档案,只要更新核心,或是以指令更新grub选单,之前的修改就会被覆盖掉。所以除非不得已,请不要去动这个档案。要修改,请继续往下看。

  2. /etc/default/grub
    此档案为使用者修改grub设定的主要档案,真的改烂了请不要急,在/usr/share/grub/default/里还有一份,复制回来即可。
    要修改这个档案,请输入
    sudo gedit /etc/default/grub

  3. /etc/grub.d目录
    此目录放置档案,会在sudo update-grub时,合并到/boot/grub/grub.cfg中。
    注意这些档案名称结构,前面都有数字。数字越小的,在合并时放在越前面。常有人问到,grub menu要怎麼更改选项的顺序?就是更改数字的大小。
    此外请你在这目录下输入ls -l,看一下各档案的属性,有没有看到都有x属性(可执行)?变动x属性,可以决定这个选项要不要出现在选单内。

2. grub参数设置

  1. GRUB_DEFAULT - 设定预设选单选项。有以下几种作法。
    GRUB_DEFAULT=0 以位置来设定预设选单选项。第一笔选单选项为 0,第二笔为 1,以此类推。
    GRUB_DEFAULT="xxxx" 在此例中,选单中的位置不会有影响。例如:GRUB_DEFAULT="Ubuntu, Linux 3.11.0-13-generic"。注意要完整全称。
    GRUB_DEFAULT=saved 由储存预设的作业系统开机。可以用grub-reboot和grub-set-default指令来设定预设作业系统。预设作业系统不会由来自选单中的互动式选择而被设定。
    sudo grub-set-default 0 以位置来设定预设选单选项。第一笔选单选项为 0,第二笔为 1,以此类推。
    sudo grub-set-default "xxxx" 以选单名称来设定
    sudo grub-reboot 0 以位置来设定下次重启开机选项。第一笔选单选项为 0,第二笔为 1,以此类推。
    sudo grub-reboot "xxxx" 以选单名称来重启开机

  2. GRUB_HIDDEN_TIMEOUT - 此设定用来决定GRUB选单会有多长时间不被显示。
    GRUB_HIDDEN_TIMEOUT=0 在单一作业系统电脑中,会立刻以预设作业系统开机。在只有一个作业系统状况下,这是预设的设定。假如还是要显示选单,请在这行前加上 # 注销掉,并确认GRUB_TIMEOUT 设定为正整数。
    GRUB_HIDDEN_TIMEOUT=X x为秒数,空白画面几秒后,系统将会依照预设开机,不会出现选单。当萤幕是空白时,使用者可以按下任何键以显示选单。

  3. GRUB_HIDDEN_TIMEOUT_QUIET - 在空白画面时,是否显示倒数计时器
    GRUB_HIDDEN_TIMEOUT_QUIET=true '不'显示计时器
    GRUB_HIDDEN_TIMEOUT_QUIET=fault 显示计时器

  4. GRUB_TIMEOUT - 选单显示多久之后自动以预设作业系统开机
    GRUB_TIMEOUT=10 10秒后以预设系统开机
    GRUB_TIMEOUT=-1 持续显示选单,直到使用者选择

  5. GRUB_GFXMODE - 设定grub选单显示的解析度。一般是注解掉。
    GRUB_GFXMODE=640x480 以640x480模式显示。
    除非开机时选单显示就有问题,不然不要启用这个参数,据说会影响进入grub选单的时间。真的要启用,后面的数值请依照你显卡可以支援的模式填入,如1280x1024x16,800x600x24,640x480

  6. GRUB_DISABLE_LINUX_RECOVERY - 救援模式要不要显示?
    你在选单中是不是都有看到救援模式(recovery mode)?假如你的电脑一向稳定,而且你不太会去动到系统,可以考虑去除 # 注解
    GRUB_DISABLE_LINUX_RECOVERY=true '不' 显示救援模式

  7. GRUB_DISABLE_OS_PROBER - 对其他分割区作业系统的检查
    大家应该都知道sudo update-grub可以找到在其他分割区的作业系统,制成选单。但有时我就是不想要他显示到选单内,那怎麼办?那注销掉这一行就可以不检查其他分割区有没有作业系统。
    GRUB_DISABLE_OS_PROBER=true '不'检查其他作业系统

  8. GRUB_BACKGROUND - 背景影像所在。这个参数,需要自行加入。
    GRUB_BACKGROUND=</usr/share/background/xxx.jpg> 以/usr/share/background/xxx.jpg当作选单背景。可以.png, .jpg, 或.tga等格式

还有其他参数,若有兴趣请参照
https://help.ubuntu.com/community/Grub2/Setup#Editing_grub.cfg_directly

3. /etc/grub.d目录下的档案

以下介绍/etc/grub.d目录下的档案。这些档案内都有很清楚的注解,但都是英文的,不过不需要很强的英文能力。难的是你必须要有撰写修改scripts的能力。基本上,这些档案大多都不需要去修改。

  1. 00_header - 设定初始显示项目
    前一段介绍了/etc/default/grub的设定,就是由这一部份来负责,所以你不需要更动这个档案。

  2. 05_debian_theme - 布景主题
    设定开机影像、文字颜色、高亮度选项及布景主题。在没有开机影像的情况下,此档案会设定一个单色的布景主题来显示初始选单画面。在之前/etc/default/grub已经介绍过GRUB_BACKGROUND参数,若有设定,则在00_header就已经先载入了,所以优先性高於在此设定。
    个人有点小看法,开机越快越好,在这个选单背景下功夫,不如想办法加快流程。而且这个步骤停留时间不长,实在吸引不了什麼目光...

  3. 10_linux - 指定目前使用中的Linux作业系统核心位置
    用来建立这些linux不同核心显示在选单中的名称。若您不想要所有的旧核心版本全都显示在选单中,请移除旧核心。

  4. 20_memtest86+ - 搜寻 /boot/memtest86+.bin
    memtest86+ 主要是进行记忆体测试。你会常用到吗?假如用不到,不用移除,只要拿掉x属性即可不再出现在选单当中。请输入:
    sudo chmod -x /etc/grub.d/20_memtest86+

  5. 30_os-prober - 此档案使用 os-prober 来搜寻其他分割区的作业系统。结果将会依据此档案中的内容而放至 grub.cfg 中
    此档案被划分成四个段落,代表四种作业系统类型:Windows, Linux, OSX 和 Hurd。假如你要去修改这个档案了,那你必须熟悉scripts的撰写。

  6. 40_costom - 用来加入自订选单选项的样板
    会在执行 update-grub 时,嵌入至 grub.cfg 中。

既然不怎麼需要作修改,那知道这个目录有什麼用?就像最早简介中所述:更改数字,可以改变顺序,小的在前面,大的在后面;更改x属性,可以决定要不要在选单中出现。
如,你想要windows系统出现在前面,你可以把os-prober的数字改成07,他就会出现在现有的linux前面。如,你不想要出现memtest86+,就把x属性拿掉。

再一个更复杂的状况,除了现有的ubuntu外,你还有fedora与windows7在其他分割区,而你希望出现的顺序为windows7, fedora, ubuntu,你可以把os-prober的数字改成07,并且把里面关於windows的scripts放在前面。

4. 注意事项

所有对於/etc/default/grub与/etc/grub.d的更改,必须以下列的指令来生效
sudo update-grub

这个指令会重新做出/boot/grub/grub.cfg,下次开机时,就会呈现出新的选单。
若想了解更多,请参阅以下参考资料:
https://help.ubuntu.com/community/Grub2
https://help.ubuntu.com/community/Grub2/Setup


转自如何修改GRUB - 简单版

推荐阅读更多精彩内容