我一直在绕圈子。我的情况如下:
- 旧磁盘坏了,它是一个启动 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 并使用新值更新 UUID
lsblk
- 编辑 (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 或如何......)