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/1009236 和 https://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有关文档
- GNU GRUB Manual 2.06 https://www.gnu.org/software/grub/manual/grub/html_node/index.html
- GRUB2配置文件"grub.cfg"详解(GRUB2实战手册)–金步国作品 http://www.jinbuguo.com/linux/grub.cfg.html