使用加密系统分区从 MBR 迁移到 UEFI

使用加密系统分区从 MBR 迁移到 UEFI

我有一个想法,将正在运行的 openSUSE 安装从 MBR 转换为 GPT/UEFI。我遵循了本教程并成功转换了磁盘,保留了分区和相关数据。我最初的设置如下:

/dev/sda1 ext4 /boot
/dev/sda2 LVM
    /dev/root/root ext4 /
    /dev/root/home ext4 /home

将磁盘转换为 GPT 后,正如我所料,Linux 无法启动。BIOS 没有向我显示 MBR 启动 Linux 的选项,该选项现在位于 GPT 磁盘上。好的,是时候设置了grub2-efi

我需要安装grub2efi/dev/sda的 EFI 分区上,该分区大小为 156MB。首先,我已/boot按照 EFI 的要求将文件(即“备份、格式化和恢复的文件”)转换为 VFAT。我还仔细检查了分区类型是否为 EFI Boot。我运行了 Live openSUSE 来挂载并 chroot 到根分区

# cryptsetup luksOpen /dev/sda2 root
# vgchange -a y suse
# mkdir /mnt/suse
# mount /dev/suse/root /mnt/suse
# mount /dev/suse/home /mnt/suse/home
# mount /dev/sda1 /mnt/suse/boot
# for i in /dev /dev/pts /sys /proc; do mount -B $i /mnt/suse$i; done
# chroot /mnt/suse

我尝试使用 YaST Boot Loader 配置,后来又尝试使用,grub2-efi-install但结果始终如下:当我通过 EFI 启动到 Linux 时,我得到了 GRUB 的救援控制台,并出现错误“未知文件系统”。

我当前的分区设置如下

/dev/sda1 vfat /boot #only this changed
/dev/sda2 LVM
    /dev/root/root ext4 /
    /dev/root/home ext4 /home

问题很简单:如何让 grub 启动加密的系统分区?

答案1

找到解决方案:一分为/boot

  1. 备份所有/boot文件
  2. 删除/dev/sda1分区(我的情况是 156MB)
  3. 创建了一个新的较小的/dev/sda1分区,分区类型为 EFI-boot,格式化为 VFAT,挂载到 /boot/efi,我的情况下大小为 50MB
  4. 在刚刚创建的分区和系统分区之间创建了一个新/dev/sda5分区(YaST 为我分配了这个号码,它应该是 sda2) ,并将其挂载为ext4 并格式化/boot/efi/boot
  5. /boot从备份中恢复文件
  6. 配置 grub 以从中恢复,sda5而不是sda2
  7. mkinitrdgrub2-efi-install
  8. 重新启动

现在我有一台几乎完美运行的全 UEFI 笔记本电脑(Windows 已从 UEFI 启动)。几乎是因为 grub 缺少主题。

解释:为什么要分开分区?

UEFI 和 GRUB 非常严格:需要 EFI 未加密分区才能将 GRUB(引导加载程序)加载到内存中。

如果我没有加密的系统卷,我可以轻松跳过第二部分。但 EFI 分区只保存引导加载程序,这与核心为了加载内核,我们需要一个未加密的、另一个未加密的分区来保存initrdgrub 加载的文件。

这个概念很简单:grub 从 EFI 分区启动,并立即在/boot分区中寻找 initrd,最终发现系统卷已加密并要求输入密钥

相关内容