您当前的位置:首页 > 计算机 > 系统应用 > Linux

Linux GRUB配置

时间:07-30来源:作者:点击数:
CDSY,CDSY.XYZ

Linux GRUB配置

环境以Ubuntu 22.04为实验环境,其他版本比如fedora系列的可能会有所出入

基本概念

相关重要文件

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

  1. /boot/grub/grub.cfg
    该配置文件中包含了grub的最终设置。
    注意他的开头:
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

说明了这是由/etc/grub.d/etc/default/grub所生成的,不要自己编辑。这个档案还是只读属性,就是要避免你直接去编辑。如果修改了这个档案,只要更新grub,之前的修改就会被覆盖掉。

2. /etc/default/grub

该文件是用来配置grub的主要文件,在/usr/share/grub/default/里还有一份,复制回来即可。

3. /etc/grub.d

此目录中的配置文件会在sudo update-grub时,合并到/boot/grub/grub.cfg中。注意这些配置文件的名称结构,前面都有数字。数字越小的,在合并时放在越前面。

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等格式
  9. 如果想显示倒计时, timeout_style=menu改为timeout_style=ountdown*

配置文件详解: /etc/default/grub

# 设定默认启动项,推荐使用数字
GRUB_DEFAULT=0

# 注释掉下面这行将会显示引导菜单
#GRUB_HIDDEN_TIMEOUT=0

# 黑屏,并且不显示GRUB_HIDDEN_TIMEOUT过程中的倒计时
GRUB_HIDDEN_TIMEOUT_QUIET=true

# 设定超时时间,默认为10秒
# 设定为-1取消倒计时
GRUB_TIMEOUT=10

# 获得发行版名称(比如Ubuntu, Debian)
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

# 将会导入到每个启动项(包括recovery mode启动项)的'linux'命令行
GRUB_CMDLINE_LINUX=""

# 同上,但是只会添加到 normal mode 的启动项
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

# 取消注释以允许图形终端(只适合grub-pc)
#GRUB_TERMINAL=console

# 分辨率设定,否则采用默认值
#GRUB_GFXMODE=640x480

# 取消注释以阻止GRUB将传递参数 "root=UUID=xxx" 传递给 Linux
#GRUB_DISABLE_LINUX_UUID=true

# 取消启动菜单中的“Recovery Mode”选项
#GRUB_DISABLE_LINUX_RECOVERY="true"

# 当GRUB菜单出现时发出鸣音提醒
#GRUB_INIT_TUNE="480 440 1"

其他参数,可以参考Ubuntu官方文档:https://help.ubuntu.com/community/Grub2/Setup

/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放在前面。

注意事项

所有对于/etc/default/grub/etc/grub.d的更改,必须以下列的指令来生效

sudo update-grub

这个指令会重新做出/boot/grub/grub.cfg,下次开机时,就会呈现出新的选单。

更改GRUB2背景

这通常是所有人首先会遇到的一个问题,在哪里设置?有很多方法来查找 GRUB 设置。每个人都可能有自己的方法,但我发现 update-grub 是最简单的。如果在 VMWare 或 VirtualBox 中执行 update-grub,你将看到如下所示的内容:

ubuntu@ubuntu-vm:~$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found background: /usr/share/backgrounds/grub_bcakground.jpg
Found background image: /usr/share/backgrounds/grub_bcakground.jpg
Found linux image: /boot/vmlinuz-5.15.0-46-generic
Found initrd image: /boot/initrd.img-5.15.0-46-generic
Found linux image: /boot/vmlinuz-5.4.0-42-generic
Found initrd image: /boot/initrd.img-5.4.0-42-generic
Adding boot menu entry for UEFI Firmware Settings
done

我们可以看到下面这句,默认系统是没有背景的,只有设置了才会出现

Found background image: /usr/share/backgrounds/grub_bcakground.jpg

GRUB 启动图像搜索顺序

在 grub2 中,对基于 Debian 的系统来说,它将按照以下顺序搜索启动背景:

  1. /etc/default/grub 里的 GRUB_BACKGROUND 行
  2. 在 /boot/grub/ 里找到的第一个图像(如果发现多张,将以字母顺序排序)
  3. 在 /usr/share/desktop-base/grub_background.sh 中指定的
  4. 在 /etc/grub.d/05_debian_theme 里 WALLPAPER 行列出的

现在将此信息留在这里,我们会尽快重新检查它。

GRUB 背景图像属性

可以使用 PNG, JPG/JPEG 以及 TGA 类型的图像文件作为 GRUB 2 的背景。必须符合以下规范:

  • JPG/JPEG 图像必须是 8-bit (256 色)
  • 图像应该是非索引的,RGB

如果图像格式不符合,那么是无法生效的

方式 1:替换图像

现在我们只需简单的用新文件将 /usr/share/images/desktop-base/grub_background.png 替换掉。值得注意这是最简单的方法,不需要修改 grub-config 文件。 如果你对 GRUB 很熟,建议你简单的修改 GRUB 的默认配置文件,然后执行 update-grub。

在这里插入图片描述

方式 2:在 GRUB_BACKGROUND 中定义图像路径

所以你可以根据上述的查找优先级使用上述任一项,将 GRUB 背景图像改为自己的。以下是我自己系统上 /etc/default/grub 的内容。

ubuntu@ubuntu-vm:~$ sudo vim /etc/default/grub

按照 GRUB_BACKGROUND=/usr/share/backgrounds/grub_bcakground.jpg的格式添加一行,其中 grub_bcakground.jpg 是你要作为 GRUB 背景的图像文件。

执行 update-grub ,现在重启机器,你会在 GRUB 看到自定义的图像。

方式 3:把图像文件放到 /boot/grub/ 文件夹

如果没有在 /etc/default/grub 文件中指定 GRUB_BACKGROUND 项,理论上 GRUB 应当使用在 /boot/grub/ 文件夹找到的第一个图像文件作为背景。如果 GRUB 在 /boot/grub/ 找到多个图像文件,它会按字母排序并使用第一个图像文件。

方式 4:在 grub_background.sh 指定图像路径

如果没有在 /etc/default/grub 文件中指定 GRUB_BACKGROUND 项,而且 /boot/grub/ 目录下没有图像文件,GRUB 将会开始在 /usr/share/desktop-base/grub_background.sh 文件中指定的图像路径中搜索。Kali Linux 是在这里指定的。每个 Linux 发行版都有自己的特色。

方式 5:在 /etc/grub.d/05_debian_theme 文件的 WALLPAPER 一行指定图像

这是 GRUB 搜寻背景图像的最后一个位置。如果在其他部分都没有找到,它将会在这里查找。

结论

这篇文章较长,但我想介绍一些基础但很重要的东西。如果你有仔细阅读,你会理解如何在 Kali Linux 上来回跟踪符号链接。当你需要在一些 Linux 系统上查找 GRUB 背景图像的位置时,你会感到得心应手。只要再多阅读一点来理解 GRUB 颜色的工作方式,你就是行家了。

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐