我可以想办法解决可能有效的问题; 但这两种方法都不完美,也不容易。
方法#1
这个方法非常基本:
- 备份ESP。基于文件的备份就足够了。
- 卸下ESP。
- 键入
sgdisk -i 1 /dev/sda
as,找到ESP的GUID root
。(此示例假定ESP是第一个磁盘上的第一个分区 - /dev/sda1
。如果它是另一个分区,则必须进行-i 1
适当更改。如果它位于除磁盘之外的其他磁盘上/dev/sda
,则必须更改该部分。)此命令显示各种信息,包括一行确定为Partition unique GUID
。保存这个价值。(请注意,记录和重新创建GUID值是为了计算机的内置启动管理器的好处。如果您愿意使用efibootmgr
重新创建启动管理器条目,则可以放弃此步骤和步骤#6 ,下面。)
- 删除ESP。
- 创建一个所需大小的新ESP。请注意,这意味着ESP和新的文件系统。
- 使用
gdisk
或sgdisk
更改新ESP的GUID。例如,sgdisk -u 1:2C17D5ED-850D-4F76-BA31-47A561740082 /dev/sda
(as root
)将GUID更改为/dev/sda1
2C17D5ED-850D-4F76-BA31-47A561740082。
- 安装新的ESP
- 将备份文件还原到ESP。
- 如有必要,编辑
/etc/fstab
以记录ESP的新“UUID”(实际上是FAT文件系统的磁盘序列号)。您可以使用它blkid
来查找新的序列号。
请注意,在操作系统识别对正在使用的磁盘的更改之前,某些分区工具(如gdisk
和sgdisk
)可能需要重新引导。因此,您应该使用紧急磁盘引导,目标磁盘上没有安装的分区; 或使用像GParted这样的工具进行分区删除和创建操作。(更改分区的GUID不会进行任何需要重新启动的更改。)
此过程存在一些灾难性故障的风险,特别是如果您对备份文件不小心。此外,如果出现问题,您的计算机将暂时无法启动。在紧急情况下,在USB闪存驱动器上拥有我的rEFInd启动管理器副本可能会有所帮助。
方法#2
我没试过这个diskpart
,所以我不知道是什么引发了这个警告; 但它可能是一个分区属性(libparted称之为“flags”的两件事之一)。像“系统分区”这样的东西可能会使分区工具拒绝触摸分区。您可以使用parted
或GParted来查找这些标志; 但是,我不确定他们会展示所有旗帜。如果分区具有除“boot”之外的标志(和“esp”,具有较新版本的libparted),则可以考虑删除附加内容。或者,您可以使用gdisk
,它将显示所有属性:
- 键入
gdisk /dev/sda
(或磁盘的ID)root
。
- 键入
p
以查看分区表。
- 键入
i
以查看有关分区的详细信息。系统会要求您指定分区号。将显示几行有关分区的详细信息。
- 寻找
Attribute flags
线。如果没有标志,则该行将显示值0000000000000000
。如果是这样,您可以gdisk
通过键入退出q
。如果它显示属性并且您想要删除它们,请继续....
- 键入
x
进入专家菜单。
- 输入
a
以修改属性。系统会要求您输入分区号码。输入它。
- 您将看到一个包含六个已知属性的列表以及已设置的属性的摘要。输入要更改的字段的编号。
- 上一步将自动重复,直到您按Enter键而没有值作为停止编辑的信号。
- 键入
w
退出并保存更改。(如果您认为已经搞砸了,请键入q
退出而不保存更改; gdisk
保留内存中的更改,直到您告诉它将其写入磁盘w
,这样您就可以轻松中止大多数操作。)
- 为安全起见,重启。
- 备份你的ESP。
- 使用GParted调整ESP的大小。
这种方法比第一种方法更不可能工作,因为问题可能不是分区属性,因为根据我的经验,GParted在调整大小时经常会破坏FAT文件系统。最后一点不应低估; 如果GParted搞砸了,你将不得不从备份中恢复所有内容,而这个过程将最终导致两种方法的最糟糕方面。OTOH,如果GParted成功调整ESP的大小,这种方法可能比前一种方法更简单,风险更小。
进一步评论
当然,如果您尚未安装Windows,则可以更轻松地执行所需操作:在安装Windows 之前手动创建ESP 。然后,您可以根据需要制作ESP。
另一种方法是使用systemd-boot以外的东西。该引导管理器非常有限,因为它无法从除了存储它的分区之外的任何东西启动内核或引导加载程序。(至少,我最后一次看到它时这种方式是有限的;你的问题的性质意味着你认为它仍然是如此有限。我最近没有审查它。)GRUB和rEFInd都没有受到影响从这个限制,因此将更容易设置 - 或者至少,既不需要systemd-boot将需要的那种分区操作。