Linux系统的开机管理程序 (Boot Loader)有grub1,grub2,LILO,这里说的grub指的是grub2。

一、grub 有关配置文件

1./etc/default/grub

GRUB 的一个简单选项的配置文件,可以改变引导菜单外观。在执行 sudo grub-update 后使新配置生效。

配置文件内有关代码的含义:

GRUB_DEFAULT=0
#属性:默认启动项
#参数:可以是数字:从0开始(按照开机选择界面的顺序对应);也可以是saved或者是某一个菜单条目的标题(查专业手册)

#GRUB_HIDDEN_TIMEOUT=0
#属性:是否隐藏菜单(grub2不再使用)
#参数:0:不隐藏,1:隐藏

GRUB_HIDDEN_TIMEOUT_QUIET=true
#属性:是否显示等待倒计时
#参数:true:不显示,false:显示

GRUB_TIMEOUT=0
#属性:进入默认启动项的等候时间
#参数:单位:秒,默认0,-1表示一直等待

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#属性:由 GRUB 的分发者设置为他们的标识名称。这用于生成更多信息性的菜单条目标题。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
#属性:内核启动参数的默认值
#参数:quiet splash为不显示启动信息,安静的启动,如值为空则显示启动信息
#说明:除非 GRUB_DISABLE_RECOVERY 被设置为 true,否则每个 Linux 内核将生成两个菜单项: 一个默认条目和一个恢复模式条目。此选项列出命令行参数,仅添加到默认菜单条目中,位于 GRUB_CMDLINE_LINUX 中列出的参数之后。

GRUB_CMDLINE_LINUX=""
#属性:手动添加内核启动参数
#参数:默认为空,可以添加你需要的参数,以 “name=value” 的格式添加,多个参数用空格隔开

#GRUB_TERMINAL=console
#属性:是否使用控制终端(仅限grub-pc)
#参数:默认使用图像界面,去掉前面的“#”则使用控制台终端

#GRUB_GFXMODE=640x480
#属性:图形界面分辨率
#参数:“宽x高”或者“宽x高x深”,只能使用图形卡通过 VESA BIOS 扩展 (VBE) 支持的模式,因此可能无法提供本地 LCD 面板分辨率。可以通过 GRUB 中的"videoinfo"命令"列出。
#说明:分辨率可以指定为一种或多个模式的序列,按逗号(,)或分号(;)分开,依次尝试,直到找到一个。

#GRUB_DISABLE_LINUX_UUID=true
#属性:是否允许GRUB将“root=UUID=xxx”参数传递给Linux
#参数:true:允许,注释表示不允许

#GRUB_DISABLE_RECOVERY="true"
#属性:是否禁用恢复模式菜单项的生成
#参数:true:禁用,,注释表示不禁用

#GRUB_INIT_TUNE="480 440 1"
#属性:取消注释可以在grub启动时收到嘟嘟声

GRUB_DISABLE_OS_PROBER=false
#属性:这个属性非常重要,因为它允许扫描磁盘发现其他系统,并添加到启动项中,是安装多系统的重要属性,ubuntu 系统默认没有这个选项。
#参数:false:允许扫描

grub-update 的实际作用就是将相应的修改写入到 /boot/grub/grub.cfg 文件中,因此作为用户是无需直接修改 /boot/grub/grub.cfg 进行个性化配置的。

2./usr/share/grub/default/grub

示例配置文件,当 /etc/default/grub 配置发生错误时,可以通过它来帮助你恢复初始配置。

3./etc/grub.d

/etc/grub.d 目录下包含了很多用来配置 GRUB 的 shell 脚本,这些配置可以在 /etc/default/grub 配置的基础上进行的更复杂的配置。同样需通过执行 sudo grub-update 使新配置生效。

4./boot/grub/grub.cfg

当对 /etc/default/grub 配置文件 和 /etc/grub.d 目录内复杂的配置文件进行修改并 grub-update 后,生成的文件就是 /boot/grub/grub.cfg,这也是 GRUB 实际使用到的配置文件。

5./boot/grub.cfg

即使是 root 也不要编辑它,它同样在每次 update-grub 后自动生成。

二、个性化设置引导界面

1.启动菜单背景图

引导菜单界面将自动搜索 /boot/grub/,并将找到的的第一张图片作为引导菜单背景图。
如需要使用背景图,建议背景图分辨率和 GRUB_GFXMODE 保持一致。

2.添加GRUB主题

1)下载主题包

GRUB主题下载网址:https://www.gnome-look.org/browse?cat=109&ord=latest

两个优秀的GRUB主题:https://www.gnome-look.org/p/1009236https://www.gnome-look.org/p/1414997

2)解压主题包到指定目录

$ xz -d Vimix-1080p.tar.xz 
$ sudo mkdir /boot/grub/themes
$ sudo tar -xvf Vimix-1080p.tar -C /boot/grub/themes

3)修改/etc/default/grub配置文件

$ sudo vim /etc/default/grub

### 注意以下参数
# GRUB_TIMEOUT_STYLE=hidden                                 #注释掉,不然不会出现引导菜单
GRUB_TIMEOUT=3                                              #不能为0,否则引导菜单还没出现就跳过了
GRUB_GFXMODE="1920x1080"                                    #请将分辨率和图像大小设置一致
GRUB_THEME=/boot/grub/themes/Vimix-1080p/Vimix/theme.txt    #添加此代码,注意参数应设置主题文件theme.txt的路径

4) 执行 sudo update-grub

$ sudo update-grub

注意:优麒麟GRUB主题这样设置是无效的

原因分析:优麒麟添加了自定义的主题,配置文件存放在 /etc/grub.d/06_ubuntukylin_theme 文件

解决办法:打开该文件,找到 GRUB_THEME 这一行,将其注释并改成你自己的主题路径。执行 sudo update-grub 生效

$ sudo vim /etc/grub.d/06_ubuntukylin_theme

...省去上文...
#GRUB_THEME=/usr/share/grub/themes/UKUI/theme.txt
GRUB_THEME=/boot/grub/themes/Vimix-1080p/Vimix/theme.txt
...省去下文...

三、GRUB2引导修复

当遇上 GRUB2 引导被破坏,启动时出现 GRUB> 的时候,可试着通过 GRUB2 一些命令来修复引导。

1.指定启动分区

GRUB>set root=(hd0,gpt1)  #注意这里的root是指定启动分区为 (hd0,gpt1) 的意思,并不是指的 root 用户。

辅助命令:

GRUB>cat (hd0,gpt4)/etc/fstab  #查看系统挂载信息,这里(hd0,gpt4)是我所安装系统的根分区。

2.指定grub启动路径和该grub引导的系统根目录所在分区,加载内核

GRUB>set prefix=(hd0,gpt1)/grub
GRUB>linux /vmlinuz root=/dev/sda4  #加载linux内核,这里的root是系统根目录所在分区,那为什么要指定root?因为加载内核过程需要动态调用root分区中/lib/modules/目录内的核心模块。

3.加载linux虚拟文件系统

GRUB>initrd /initrd.img-XXX  #加载linux虚拟文件系统,通过仿真系统目录从而实现linux内核加载。有兴趣的可通过命令 lsinitramfs initrd.img-XXX 来查看其中的内容。
GRUB>boot   #通过linux虚拟文件系统引导linux内核

4.重启

GRUB>reboot

5.更新修复引导

进入系统后,修复引导,防止重启系统后问题再次出现。

$ sudo grub-install /dev/sda

四、GRUB有关文档