多系统引导 —— rEFInd手动安装记录

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 文件内容解析:

  1. root=/dev/sda1 指定用于启动系统的内核所在的分区。因为 /dev/sda2 挂载在 /boot/efi,而内核文件又放在 /boot 目录下,其中 boot目录是在 / 下,而 /dev/sda1 挂载在 /,所以这里应该设置 root=/dev/sda1

  2. intel-ucode.img 是 针对 Intel的CPU,如果是AMD,则改成 amd-ucode.img

  3. 变量 %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.png

【参考资料】

  • rEFInd 官方手册:The rEFInd Boot Manager: Using rEFInd
  • Arch Linux Wiki:rEFInd
  • rEFInd 主题: ursamajor-rEFInd

你可能感兴趣的:(多系统引导 —— rEFInd手动安装记录)