我有一个想法,将正在运行的 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
二
- 备份所有
/boot
文件 - 删除
/dev/sda1
分区(我的情况是 156MB) - 创建了一个新的较小的
/dev/sda1
分区,分区类型为 EFI-boot,格式化为 VFAT,挂载到 /boot/efi,我的情况下大小为 50MB - 在刚刚创建的分区和系统分区之间创建了一个新
/dev/sda5
分区(YaST 为我分配了这个号码,它应该是 sda2) ,并将其挂载为ext4 并格式化/boot/efi
/boot
/boot
从备份中恢复文件- 配置 grub 以从中恢复,
sda5
而不是sda2
- 跑
mkinitrd
了grub2-efi-install
- 重新启动
现在我有一台几乎完美运行的全 UEFI 笔记本电脑(Windows 已从 UEFI 启动)。几乎是因为 grub 缺少主题。
解释:为什么要分开分区?
UEFI 和 GRUB 非常严格:需要 EFI 未加密分区才能将 GRUB(引导加载程序)加载到内存中。
如果我没有加密的系统卷,我可以轻松跳过第二部分。但 EFI 分区只保存引导加载程序,这与核心为了加载内核,我们需要一个未加密的、另一个未加密的分区来保存initrd
grub 加载的文件。
这个概念很简单:grub 从 EFI 分区启动,并立即在/boot
分区中寻找 initrd,最终发现系统卷已加密并要求输入密钥