933 字
5 分钟
如何给双系统配置rEFInd引导
启动加载器和启动管理器的区别
| 特性 | 启动加载器 (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-linuxrEFInd安装
安装步骤
- 首先确认好ESP分区挂载点正确。
sudo pacman -S refind安装 rEFInd。sudo refind-install把 rEFInd 写入 ESP 分区并添加 UEFI 启动项。- 安装完毕,一些配置比如延迟启动时间等,可以在
./boot/efi/EFI/refind/refind.conf中更改。
可能需要的额外工作
refind_linux.conf文件
这个文件可以在安装 rEFInd 过程中自动生成,也可以使用sudo mkrlconf命令手动生成。执行这个命令后,会:
- 扫描分区: 它会扫描您的系统分区,特别是找到 Linux 的根分区。
- 获取参数: 它会提取启动 Linux 内核所需的关键参数,最重要的是 root= 参数,通常使用根分区的 UUID 或 PARTUUID。
- 生成文件: 它会在内核所在的目录(通常是
/boot/)下创建一个基本的 refind_linux.conf 文件。
这个文件自动生成的数据可能不正确,需要手动更改。
refind_linux.conf 文件格式如下
"启动 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的使用
- 使用
efibootmgr -v命令查看当前 efi 启动顺序。 - 使用
efibootmgr -o 00xx,00xx,来更改顺序。
比如 efibootmgr -v的输出结果是:Boot0000* UEFI: USBBoot0001* Windows Boot ManagerBoot0002* rEFIndBoot0003* GRUB
但是我想把 rEFInd 放到第一位,USB 放到弟二位可以使用 efibootmgr -o 0002,0000,0001,0003UUID和PARTUUID的区别
UUID 标识文件系统,并储存在文件系统中,PARTUUID 标识磁盘分区存储在分区表(GPT)中。当格式化文件系统时UUID会发生改变,而PARTUUID不会改变。
initramfs和vmlinuz-linux两个文件的区别
vmlinuz-linux 是 Linux 内核映像,是启动 Linux 操作系统时的核心文件。initramfs-linux 是一个临时的、内存中的文件系统,它在内核启动时加载,这个文件系统用于初始化系统,
启动过程
-
内核 (vmlinuz-linux) 启动后,会加载 initramfs-linux 文件。
-
initramfs 文件被解压到内存中,并执行其中的启动脚本。
-
initramfs 脚本会挂载实际的根文件系统(通常是磁盘上的 / 分区),并进行一些其他初始化工作。
-
一旦根文件系统挂载完成,initramfs 会将控制权交给实际的根文件系统,操作系统开始进入用户空间。
双系统的时间同步问题
如果使用Win/Linux双系统,每次开机系统时间可能错乱,因为 Linux 认为硬件时钟应该存储的是 UTC 时间,而Windows认为硬件时钟存储的就是当地时间。建议更改Linux理解硬件时钟的方式使用 sudo timedatectl set-local-rtc 1 --adjust-system-clock。
如何给双系统配置rEFInd引导
https://fuwari.vercel.app/posts/如何给双系统配置refind引导/