恢复/复制 GPT+EFI 磁盘备份到新磁盘并使其可启动

恢复/复制 GPT+EFI 磁盘备份到新磁盘并使其可启动

我一直在绕圈子。我的情况如下:

  • 旧磁盘坏了,它是一个启动 EFI 的 GPT 磁盘,有 3 个分区,sda1=fat32(标记为 esp、boot 并包含 /boot 和 /EFI),sda2=etx4(包含其余部分,以及典型的 /boot),sda3=swap(linuxswap);
  • 我有以下备份(使用 rsync -aAXH 制作)内容sda1 和 sda2
  • 我有一张新磁盘和一个可启动的 Ubuntu 20.04.3 USB 棒

我想将备份恢复到新磁盘并使其可启动。

我尝试过(但没有成功):

  • 从 USB 启动,对 sda 进行 gparted 并将其设为 GPT,然后重新创建相同的 3 个分区,sda1=fat32 并将其标记为 esp、boot、sda2=ext4、sda3=swap
  • 将旧 sda1 备份中的所有内容恢复到新 sda1,并将旧 sda2 备份中的所有内容恢复到新 sda2
  • 编辑 (sda2)/etc/fstab 并使用新值更新 UUIDlsblk
  • 编辑 (sda1)/EFI/ubuntu/grub.cfg 并更新 search.fs_uuid 行的 UUID
  • 安装了 grub-efi-amd64 并尝试grub-install /dev/sda

最后一行失败:

Installing for x86_64-efi platform
grub-install: error: cannot find EFI directory

显然,忽略这一点并重新启动确实会显示 grub 菜单,但一旦我选择一个条目,实际上并没有启动。我认为唯一缺少的步骤是更新 (sda2)/boot/grub/grub.cfg 中的 UUID,因为那里的 UUID 仍然是旧的。如果我没记错的话,这通常是用 update-grub 完成的 (?)。

有人能帮我列出步骤和命令吗?我遗漏了什么?

全面披露:我首先在 VMware 虚拟机中尝试此操作,其 .vmx 已修改为使用 UEFI 固件(firmware = "efi"在 .vmx 中添加)。据我所知,这完全模拟了 UEFI 机器。

答案1

回答我自己的问题,但我还没有接受它作为答案,因为我仍然对一组明确的步骤来手动修复它感兴趣。

使用上面评论中@oldfred 的指针,我boot-repair一次性修复了它。

boot-repair从 Live CD 启动后使用 ppa 进行安装(和不是ISO,显然是有缺陷的),即

sudo apt-add-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair
sudo boot-repair

然后选择应用所有默认修复,这对我来说是有效的(请注意,我有备份并且在虚拟机中,所以我可以冒险)。

最后看来它确实做了我所怀疑的事情:更新了 grub.cfg 中的 UUID,如果手动执行的话会有点麻烦,所以我确实很接近了。

答案2

你需要像:

pacstrap /mnt base linux linux-firmware
pacstrap /mnt grub-bios

启动 PC 时也将 BIOS 配置为安全启动中的 BIOS(不是 EFI 或如何......)

相关内容