我有一个带有 ubuntu 20.04 和 windows 10 的双启动系统。由于空间不足,我将我的 SSD 升级到 512 GB。我已经启动到实时 ubuntu 驱动器,并备份了每个分区ubuntu、windows、efi也微软保留从之前的 256 SSD 通过DD如下
dd if=/dev/nvme0n1p6 of=/path/to/linux.img
对于 4 个分区中的每一个,依此类推
备份后,我现在已将每个分区恢复到新的 SSD 上,如下所示
dd if=/path/to/linux.img of=/dev/nvme0n1p4
请注意NVME0N1P4这里相比于NVME0N1P6之前(分区名称已更改,可能会弄乱我的 ubuntu 引导加载程序 grub 中的条目)
我对引导加载程序和 grub 条目及其工作原理知之甚少,任何帮助将不胜感激。
现在,当尝试重新启动我的系统时,它显示 Windows 操作系统的错误,说它找不到 Windows 启动文件,而不是在启动时加载 ubuntu grub,这是以前的默认行为,我认为这是由于更改了分区名称所致现在和以前相比。
我应该DD'ed 整个 SSD 而不是单个分区,但其他一些 SO 帖子提到,如果您备份到另一个硬盘驱动器而不是从中进行恢复的硬盘驱动器,则可能会导致问题。
我也尝试过更新 grub 并通过 live cd 安装 grub,但它说无法找到 efi 分区。
我所有与工作相关的资料都在那个 ssd 中,我真的不想再安装 linux,因为它有所有的配置、包、项目和一切。我已经连续两天试图解决这个问题,但无法解决。
任何帮助将非常非常感激!:)
答案1
msftdata
从NTFS 分区上“标志”的存在和/boot/efi
FAT32 分区的存在来看,我看到您正在使用GPT分区并正在启动原生UEFI模式,分别代替传统的 MBR 和 BIOS。这两个信息块有一个主要的影响您必须执行的操作。
如果您的 BIOS 设置包括将系统配置为引导的选项仅 UEFI 模式或者至少与传统模式相比,更喜欢 UEFI,我强烈建议使用这些设置。作为恢复操作或其他操作的一部分,它们应该最大限度地减少意外以错误模式启动的麻烦。
首先,您的/boot/efi
分区没有正确标记为 EFI 系统分区(简称 ESP)。由于您似乎正在使用gparted
,这意味着esp
在该分区上设置标志;该boot
标志也会自动设置。
(对于 GPT 分区,esp
和msftdata
并不是真正的“标志”,而是各种 GPT 分区类型 UUID。gparted
只是将它们表示为标志,这可能有点令人困惑,因为分区只能有一种类型的 UUID,所以大多数“标志” " 实际上是互斥的。对于 GPT,boot
出于兼容性原因,该标志本质上只是一个别名esp
。)
位置、大小和“无”标签/dev/nvme0n1p2
表明这可能是您想要的分区微软保留。如果是这样,您应该msftres
为其设置标志:它只是 Windows 分区前面的空白空间库,以允许将来的文件系统转换和升级。
您唯一剩余的 Linux 分区似乎是/dev/nvme0n1p4
,但它标有安装点/home
- 这是正确的吗?如果是这样,你真正的 Ubuntu 在哪里根文件系统?
下一个问题是,由于您分别对每个分区进行映像并显然重建了分区表,因此存储在每个分区的 GPT 分区表中的唯一 PARTUUID 将有所不同。
Linux和GRUB通常使用文件系统级相反,UUID,因此它们应该或多或少地不受此变化的影响。但UEFI固件很可能使用PARTUUID作为EFI系统分区的主要标识符。这意味着 UEFI NVRAM 启动条目(sudo efibootmgr -v
在 UEFI 模式下启动时可见)将过时。
由于 Windows 已在(可移动媒体/后备启动路径)安装了其启动管理器的第二个副本/boot/efi/EFI/boot/bootx64.efi
,因此它现在是 UEFI 固件无需您进一步输入即可找到的唯一启动加载程序。但显然它要么找不到它的配置文件/boot/efi/EFI/Microsoft/Boot/BCD
,要么它包含的信息因您的更改而无效。
你可以尝试启动在 UEFI 模式下从 Windows 10 安装介质并使用其“修复 Windows”选项。如果它有效的话,这可能是修复 Windows 引导加载程序的最简单方法 - 您应该在尝试修复 Linux 引导加载程序之前执行此操作,因为 Windows 修复过程会自动将 Windows 作为启动顺序中的第一个操作系统(并且可能会覆盖/删除 Linux NVRAM 启动变量)。通过首先修复 Windows,您只需撤消一次。
您可能只需使用命令即可解决此问题efibootmgr
。首先确保/dev/nvme0n1p1
安装在/boot/efi
,然后运行(例如从 Live CD):
sudo efibootmgr -c -L UbuntuNew -d /dev/nvme0n1 -l \\EFI\\ubuntu\\shimx64.efi
(如果您已禁用安全启动且不/boot/efi/EFI/ubuntu/shimx64.efi
存在,请将shimx64.efi
命令中替换为grubx64.efi
。)
这将创建一个新的 UEFI 启动变量,该变量将出现在 BIOS 启动设置中,名称为“UbuntuNew”。您可以将该名称更改为您想要的任何名称,但重新安装 GRUB 可能会恢复旧名称,这可能只是“Ubuntu”。