0x00 前言
rEFInd对于UEFI下的多系统引导非常有优势,可以自动的识别所有不同系统下的引导文件,并生成启动条目。
rEFInd有多种安装方式,其中比较方便的是使用自带的脚本命令refind-install
即可一键安装。也可以使用手动方式一步步安装所需文件,本文采用手动安装方式。
谨以此文作为个人安装笔记方便以后查阅。
-
本文所使用的环境:
VMware: Workstation 16 Pro & 16.2.0 build-18760230
host: Windows 11 Pro & 22000.282
guest: Windows10 && ArchLinux 5.15.2-arch1-1
guest 中的分区情况:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 300G 0 disk
├─sda1 8:1 0 100G 0 part /
├─sda2 8:2 0 300M 0 part /boot/efi
├─sda3 8:3 0 190G 0 part /home
└─sda4 8:4 0 9.7G 0 part [SWAP]
nvme0n1 259:0 0 200G 0 disk
├─nvme0n1p1 259:1 0 529M 0 part
├─nvme0n1p2 259:2 0 99M 0 part
├─nvme0n1p3 259:3 0 16M 0 part
└─nvme0n1p4 259:4 0 199.4G 0 part
注意:nvme0n1p1 是 Win10 的EFI分区,虚拟机系统引导类型:UEFI,磁盘分区表:GPT
0x01 安装rEFInd
rEFInd需要配合 efibootmgr 创建一个引导入口,因此安装时需要一同安装:
pacman -S refind efibootmgr
EFI 分区下创建 refind 目录,并将 efi 引导文件复制到EFI分区下
mkdir -p /boot/efi/EFI/refind
cp /usr/share/refind/refind_x64.efi /boot/efi/EFI/refind/
然后使用efibootmgr在UEFI NVRAM中创建一个引导条目,其中 /dev/sda --part 2 是指EFI系统分区所在的磁盘与分区号(即 refind_x64.efi
引导文件所在的磁盘与分区号)。
efibootmgr --create --disk /dev/sda --part 2 --loader /EFI/refind/refind_x64.efi --label "rEFInd Boot Manager" --verbose
将支持其它系统的相关 efi 引导文件复制到EFI系统分区中的rEFInd安装目录下的 drivers_x64 文件夹中
mkdir /boot/efi/EFI/refind/drivers_x64
cp /usr/share/refind/drivers_x64/* /boot/efi/EFI/refind/drivers_x64/
复制 rEFInd 的配置文件、图标文件、字体文件到EFI系统分区中的rEFInd安装目
cp /usr/share/refind/refind.conf-sample /boot/efi/EFI/refind/refind.conf
cp -r /usr/share/refind/icons /boot/efi/EFI/refind/
cp -r /usr/share/refind/ifonts /boot/efi/EFI/refind/
0x02 配置rEFInd
以root用户运行 mkrlconf
。它会尝试在 /boot
中找到你的内核,并自动生成 refind_linux.conf
mkrlconf
运行之后会在 /boot
下自动生成的引导配置文件 refind_linux.conf
"Boot with standard options" "archisobasedir=arch archisolabel=Arch_20211101"
"Boot to single-user mode" "archisobasedir=arch archisolabel=Arch_20211101 single"
"Boot with minimal options" "ro root=/dev/sda1"
注意:
- 如果是以启动盘或者挂载镜像文件来安装的系统,那么此时
mkrlconf
找到的内核是启动盘或者挂载镜像文件的内核,一旦移除启动盘或者挂载镜像文件之后,除了最后一行外,其余引导将不起作用。
因此我们应该手动地修改引导参数,并且传递相关的参数给内核;
修改后的引导文件 /boot/refind_linux.conf
如下
"Boot using default options" "root=/dev/sda1 rw add_efi_memmap initrd=\boot\intel-ucode.img initrd=\boot\initramfs-%v.img"
"Boot using fallback initramfs" "root=/dev/sda1 rw add_efi_memmap initrd=\boot\intel-ucode.img initrd=\boot\initramfs-%v-fallback.img"
"Boot to terminal" "root=/dev/sda1 rw add_efi_memmap initrd=\boot\intel-ucode.img initrd=\boot\initramfs-%v.img systemd.unit=multi-user.target"
refind_linux.conf
文件内容解析:
root=/dev/sda1
指定用于启动系统的内核所在的分区。因为/dev/sda2
挂载在/boot/efi
,而内核文件又放在/boot
目录下,其中boot
目录是在/
下,而/dev/sda1
挂载在/
,所以这里应该设置root=/dev/sda1
intel-ucode.img
是 针对 Intel的CPU,如果是AMD,则改成amd-ucode.img
变量
%v
需要在/boot/efi/EFI/refind/refind.conf
中取消extra_kernel_version_strings
的注释,否则会引导失败(如果不使用变量%v
可以直接改成具体的文件名)。
0x03 使用主题
rEFInd的主题文件一般都放在/boot/efi/EFI/refind/themes
目录下
mkdir -p /boot/efi/EFI/refind/themes
cd themes
git clone https://github.com/kgoettler/ursamajor-rEFInd.git
在rEFInd 配置文件 refind.conf
最末尾添加一行包含主题参数文件的命令
echo "include themes/ursamajor-rEFInd/theme.conf" >> /boot/efi/EFI/refind/refind.conf
附上一张效果图
【参考资料】
- rEFInd 官方手册:The rEFInd Boot Manager: Using rEFInd
- Arch Linux Wiki:rEFInd
- rEFInd 主题: ursamajor-rEFInd