933 字
5 分钟
如何给双系统配置rEFInd引导
2025-12-25

启动加载器和启动管理器的区别#

特性启动加载器 (Boot Loader)启动管理器 (Boot Manager)
主要作用加载和启动一个操作系统内核。选择和管理哪个启动加载器或操作系统将被运行。
核心功能1. 初始化硬件。 2. 将操作系统的内核文件加载到内存。 3. 将控制权交给内核,从而启动系统。1. 扫描可用的启动选项(EFI文件)。 2. 呈现一个菜单供用户选择。 3. 将控制权交给选定的启动加载器。
典型代表Windows Boot Manager (仅限加载部分), GRUB 自身 (用来加载 Linux 内核), Linux 内核 (采用 EFI Stub 模式)。rEFInd, systemd-boot, UEFI 固件内置的启动菜单。

在Linux中挂载EFI的基本目录结构#

.
└── /boot/
├── efi/
│ └── 此处用于挂载ESP分区
├── initramrs-linux.img
├── intel-code.img
├── refind_linux.conf
└── vmlinuz-linux

rEFInd安装#

安装步骤#

  1. 首先确认好ESP分区挂载点正确。
  2. sudo pacman -S refind安装 rEFInd。
  3. sudo refind-install把 rEFInd 写入 ESP 分区并添加 UEFI 启动项。
  4. 安装完毕,一些配置比如延迟启动时间等,可以在./boot/efi/EFI/refind/refind.conf中更改。

可能需要的额外工作#

refind_linux.conf文件#

这个文件可以在安装 rEFInd 过程中自动生成,也可以使用sudo mkrlconf命令手动生成。执行这个命令后,会:

  1. 扫描分区: 它会扫描您的系统分区,特别是找到 Linux 的根分区。
  2. 获取参数: 它会提取启动 Linux 内核所需的关键参数,最重要的是 root= 参数,通常使用根分区的 UUID 或 PARTUUID。
  3. 生成文件: 它会在内核所在的目录(通常是 /boot/)下创建一个基本的 refind_linux.conf 文件。

这个文件自动生成的数据可能不正确,需要手动更改。

refind_linux.conf 文件格式如下

Terminal window
"启动 Arch Linux (默认)" "root=UUID=您的UUID rw initrd=/boot/initramfs-linux.img"
"启动 Arch Linux (Fallback)" "root=UUID=您的UUID rw initrd=/boot/initramfs-linux-fallback.img"

其中 UUID 可以更换为 PARTUUID ,他们的值都指向系统根目录,并且第一条为主要启动项,第二条是回退启动项可以不需要。

efibootmgr的使用#

  1. 使用 efibootmgr -v 命令查看当前 efi 启动顺序。
  2. 使用 efibootmgr -o 00xx,00xx,来更改顺序。
Terminal window
比如 efibootmgr -v的输出结果是:
Boot0000* UEFI: USB
Boot0001* Windows Boot Manager
Boot0002* rEFInd
Boot0003* GRUB
但是我想把 rEFInd 放到第一位,USB 放到弟二位
可以使用 efibootmgr -o 0002,0000,0001,0003

UUID和PARTUUID的区别#

UUID 标识文件系统,并储存在文件系统中,PARTUUID 标识磁盘分区存储在分区表(GPT)中。当格式化文件系统时UUID会发生改变,而PARTUUID不会改变。

initramfs和vmlinuz-linux两个文件的区别#

vmlinuz-linux 是 Linux 内核映像,是启动 Linux 操作系统时的核心文件。initramfs-linux 是一个临时的、内存中的文件系统,它在内核启动时加载,这个文件系统用于初始化系统,

启动过程#

  1. 内核 (vmlinuz-linux) 启动后,会加载 initramfs-linux 文件。

  2. initramfs 文件被解压到内存中,并执行其中的启动脚本。

  3. initramfs 脚本会挂载实际的根文件系统(通常是磁盘上的 / 分区),并进行一些其他初始化工作。

  4. 一旦根文件系统挂载完成,initramfs 会将控制权交给实际的根文件系统,操作系统开始进入用户空间。

双系统的时间同步问题#

如果使用Win/Linux双系统,每次开机系统时间可能错乱,因为 Linux 认为硬件时钟应该存储的是 UTC 时间,而Windows认为硬件时钟存储的就是当地时间。建议更改Linux理解硬件时钟的方式使用 sudo timedatectl set-local-rtc 1 --adjust-system-clock

如何给双系统配置rEFInd引导
https://fuwari.vercel.app/posts/如何给双系统配置refind引导/
作者
哈轰轰轰
发布于
2025-12-25
许可协议
CRAZY KF-C-V 5.0