如何在 Windows 和 Linux 双启动系统上扩大 EFI 分区?

如何在 Windows 和 Linux 双启动系统上扩大 EFI 分区?

我打算在以 UEFI 模式启动的系统上安装 Windows 和 Linux。

对于Linux,我打算做以下事情:

  • 安装 LTS 内核以及主线带来的任何当前版本

  • 使用 systemd-boot

因此,最终,在安装 Windows 时创建的 EFI 分区的默认大小(100 MB)会变得非常拥挤(大约 94 MB 被使用)。因此,我想扩大该分区。磁盘布局的标准建议是将 MSR 分区放在 EFI 分区之后,我删除了 MSR 分区。然后 Win 10 无法启动,而 Win 10 USB 驱动器中的启动修复程序能够修复启动问题。

但核心问题是我无法扩大 EFI 分区,无论是使用diskpart还是使用 GParted(在 Xubuntu 16.04.1 USB 驱动器上)。当我extend size=100在 diskpart 中运行时,它显示:

您不能缩小 oem esp 或恢复分区。选定的卷 [等等]...

GParted 抛出错误

gnu parted 无法将此分区调整为该大小。我们正在努力解决

是否有人知道扩大 EFI 分区所需的步骤或可以说是“简单”的顺序?

答案1

我能想到两种可能解决这个问题的方法;但是这两种方法都不是完美的,也不是那么容易。

方法#1

这个方法很简单:

  1. 备份 ESP。基于文件的备份就足够了。
  2. 卸载 ESP。
  3. sgdisk -i 1 /dev/sda通过键入来查找 ESP 的 GUID root。(此示例假设 ESP 是第一个磁盘上的第一个分区—— /dev/sda1。如果是另一个分区,则必须进行-i 1相应更改。如果它位于 以外的磁盘上/dev/sda,则也必须更改该部分。)此命令显示各种信息,包括一行标识为Partition unique GUID。保存该值。(请注意,记录和重新创建 GUID 值是为了计算机内置的启动管理器的利益。如果您愿意使用efibootmgr重新创建启动管理器条目,则可以放弃此步骤和下面的步骤 6。)
  4. 删除 ESP。
  5. 创建所需大小的新 ESP。请注意,这意味着 ESP 和其上的新文件系统。
  6. 使用gdisksgdisk更改新 ESP 的 GUID。例如,sgdisk -u 1:2C17D5ED-850D-4F76-BA31-47A561740082 /dev/sda(如root)将 的 GUID 更改/dev/sda1为 2C17D5ED-850D-4F76-BA31-47A561740082。
  7. 安装新的 ESP
  8. 将备份文件恢复到 ESP。
  9. 如果需要,请编辑/etc/fstab以记录 ESP 的新“UUID”(对于 FAT 文件系统来说,实际上是磁盘序列号)。您可以使用它blkid来查找新序列号。

请注意,某些分区工具(例如gdisksgdisk)可能需要重新启动,操作系统才能识别正在使用的磁盘的更改。因此,您应该使用紧急磁盘启动,目标磁盘上没有挂载分区;或者使用 GParted 等工具执行分区删除和创建操作。(更改分区的 GUID 不会进行任何需要重新启动的更改。)

此过程存在一些灾难性失败的风险,特别是如果你对备份文件不小心。此外,如果出现问题,你的计算机将暂时无法启动。拥有我的rEFInd 启动管理器在发生这种紧急情况时,USB 闪存驱动器上的信息会很有帮助。

方法 #2

我还没有尝试过diskpart,所以我不知道是什么触发了这个警告;但它可能是分区属性(libparted 称之为“标志”的两个事物之一)。诸如“系统分区”之类的东西可能会导致分区工具拒绝接触分区。您可以使用parted或 GParted 来查找这些标志;但是,我不确定它们是否会显示全部标志。如果分区有除“boot”(和“esp”,使用较新版本的 libparted)以外的标志,您可以考虑删除额外的标志。或者,您可以使用gdisk,它将显示全部属性:

  1. 输入gdisk /dev/sda(或任何磁盘的 ID) 作为root
  2. 键入p以查看分区表。
  3. 键入i以查看分区的详细信息。系统会要求您指定分区号。将出现几行有关分区的详细信息。
  4. 查找该Attribute flags行。如果没有标志,该行将显示值0000000000000000。如果是这样,您可以gdisk键入退出q。但是,如果它显示属性并且您想删除它们,请继续....
  5. 键入x以进入专家菜单。
  6. 键入a以修改属性。系统会要求您输入分区号。输入它。
  7. 您将看到六个已知属性的列表以及已设置属性的摘要。输入要更改的字段的编号。
  8. 上述步骤将自动重复,直到您按下 Enter 键(无值)作为停止编辑的信号。
  9. 键入w退出并保存更改。(如果您认为搞砸了,请键入q退出而不保存更改;gdisk将更改保留在内存中,直到您使用 告诉它将它们写入磁盘w,这样您就可以轻松中止大多数操作。)
  10. 为了安全起见,请重新启动。
  11. 备份您的 ESP。
  12. 使用 GParted 调整 ESP 的大小。

这种方法不太可能像第一种方法那样奏效,因为问题可能不是分区属性,而且根据我的经验,GParted 在调整 FAT 文件系统大小时经常会损坏它们。最后一点不应低估;如果 GParted 搞砸了,您将不得不从备份中恢复所有内容,而这个过程将最终产生两种方法中最糟糕的方面。另一方面,如果 GParted 成功调整了您的 ESP 大小,这种方法可能比前一种方法稍微简单一些,风险也更小。

进一步评论

当然,如果你还没有安装 Windows,还有一种更简单的方法可以实现你的目标:手动创建 ESP安装 Windows。然后,您可以根据需要将 ESP 设置为任意大小。

另一种方法是使用 systemd-boot 以外的其他程序。该启动管理器非常有限,因为它无法从存储它的分区以外的任何分区启动内核或启动加载程序。(至少,上次我查看它时,它有这样的限制;而你的问题的性质意味着你认为它仍然有这样的限制。不过,我最近没有查看它。)GRUB 和 rEFInd 都没有这种限制,因此更容易设置——或者至少,两者都不需要 systemd-boot 所需的分区操作。

相关内容