如何在Windows和Linux的双引导系统上扩大EFI分区?


2

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

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

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

  • 使用systemd-boot

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

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

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

GParted抛出错误

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

有没有人知道扩大EFI分区的必要步骤或可以说是“简单”的序列?

Answers:


1

我可以想办法解决可能有效的问题; 但这两种方法都不完美,也不容易。

方法#1

这个方法非常基本:

  1. 备份ESP。基于文件的备份就足够了。
  2. 卸下ESP。
  3. 键入sgdisk -i 1 /dev/sdaas,找到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(as root)将GUID更改为/dev/sda12C17D5ED-850D-4F76-BA31-47A561740082。
  7. 安装新的ESP
  8. 将备份文件还原到ESP。
  9. 如有必要,编辑/etc/fstab以记录ESP的新“UUID”(实际上是FAT文件系统的磁盘序列号)。您可以使用它blkid来查找新的序列号。

请注意,在操作系统识别对正在使用的磁盘的更改之前,某些分区工具(如gdisksgdisk)可能需要重新引导。因此,您应该使用紧急磁盘引导,目标磁盘上没有安装的分区; 或使用像GParted这样的工具进行分区删除和创建操作。(更改分区的GUID不会进行任何需要重新启动的更改。)

此过程存在一些灾难性故障的风险,特别是如果您对备份文件不小心。此外,如果出现问题,您的计算机将暂时无法启动。在紧急情况下,在USB闪存驱动上拥有我的rEFInd启动管理器副本可能会有所帮助。

方法#2

我没试过这个diskpart,所以我不知道是什么引发了这个警告; 但它可能是一个分区属性(libparted称之为“flags”的两件事之一)。像“系统分区”这样的东西可能会使分区工具拒绝触摸分区。您可以使用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搞砸了,你将不得不从备份中恢复所有内容,而这个过程将最终导致两种方法的最糟糕方面。OTOH,如果GParted成功调整ESP的大小,这种方法可能比前一种方法更简单,风险更小。

进一步评论

当然,如果您尚未安装Windows,则可以更轻松地执行所需操作:安装Windows 之前手动创建ESP 。然后,您可以根据需要制作ESP。

另一种方法是使用systemd-boot以外的东西。该引导管理器非常有限,因为它无法从除了存储它的分区之外的任何东西启动内核或引导加载程序。(至少,我最后一次看到它时这种方式是有限的;你的问题的性质意味着你认为它仍然是如此有限。我最近没有审查它。)GRUB和rEFInd都没有受到影响从这个限制,因此将更容易设置 - 或者至少,既不需要systemd-boot将需要的那种分区操作。


嗨罗德!像往常一样,真正适当的回复。谢谢:)所以...当我最终成功使用GParted时(并没有分享你对GParted调整大小问题的经验),我没有费心去做你的一个方法的一步一步。但是我相信你的一种方式可行,因此我会标记这个帖子。(我必须说,虽然我不同意你对systemd-boot的看法。我重视它的简单性和稳定性。)
亨利于
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.