GRUB启动项个人配置记录

本文基于arch社区文档GRUB配置文档GRUB/技巧与提示. 提取出个人需要的部分做配置记录

1. 系统硬盘情况

Tip

说明:在多硬盘多系统环境下,GRUB 推荐安装在 Linux 系统所在硬盘的 EFI 分区或者 MBR 上,以便管理所有系统启动项。

2. GRUB 配置文件

2.1 主要文件位置

2.3 编辑配置文件

基本配置

在 /etc/default/grub 中设置默认启动选项, 等待时间:

GRUB_DEFAULT=saved      # 上一次启动的系统
GRUB_SAVEDEFAULT=true   # 自动保存最后一次启动项
GRUB_TIMEOUT=3         # 等待 3 秒
GRUB_TIMEOUT_STYLE=menu # 显示菜单

可选配置

设置主题, 可以去Gnome-look获取GRUB主题, 根据主题项目说明, 一般会写明安装流程, 以下以 Elegant-forest 主题为例

# 解压下载好的主题文件
tar -xvf Elegant-forest-window-grub-themes.tar.xz

选择一个喜欢的主题, 进入目录会有 install.sh 安装文件, 执行安装即可

sudo sh ./install.sh

一般带安装脚本的主题会自动更新 GRUB, 只需要重启就能生效, 就不需要进行手动更新了

2.3 更新 GRUB

sudo grub-mkconfig -o /boot/grub/grub.cfg
reboot # 可选, 立即重启生效

3. 常见问题

Note

更新 GRUB后无问题, 下文可选择性阅读

3.1 重复启动项

ls -ll /etc/grub.d/ # 查看这个目录下有没有什么eos前缀的脚本
....
-rw-r--r-x 1 root root   286 11月 3日 10:11 45_eos_windows # 可以发现这个脚本可执行, 禁用之
sudo chmod -x /etc/grub.d/45_eos_windows
ls -ll /etc/grub.d/
....
-rw-r--r-- 1 root root   286 11月 3日 10:11 45_eos_windows # 再次查看, 确保已禁用

3.2 配置完不生效

确保已更新 GRUB

确保os-prober已安装

# 输出非`error: package 'os-prober' was not found`字样, 而是软件包信息则表示已安装
pacman -Qi os-prober

/etc/default/grub保证以下行启用(没有被注释)

GRUB_DISABLE_OS_PROBER=false

尝试编辑40_custom, 文件末尾添加

menuentry <你的系统在GRUB显示的名字, 例如Windows Boot Manager (Custom)> --class windows --class os {
    savedefault
    insmod part_gpt
    insmod fat
    search --no-floppy --fs-uuid --set=root <你的Windows分区UUID>
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

可以通过以下命令查询Windows分区UUID, 例如

lsblk -f

输出以下内容, 其中nvme1n1p1是我安装Windows的硬盘, 对应的分区UUID为BC83-5841

NAME        FSTYPE FSVER LABEL       UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1                                                                                  
├─nvme0n1p1 vfat   FAT32             BFE4-72E8                                 2G     0% /boot/efi
└─nvme0n1p2 ext4   1.0   endeavouros 881aa179-db4f-4240-b151-ac67f02dbb47  413.7G     4% /
nvme1n1                                                                                  
├─nvme1n1p1 vfat   FAT32             BC83-5841                                           
├─nvme1n1p2                                                                              
├─nvme1n1p3 ntfs                     C05884BF5884B5A6                                    
└─nvme1n1p4 ntfs                     F29CA6EF9CA6AD93