如何调整 EFI 系统分区的大小?

use*_*297 9 linux partitioning arch-linux uefi windows-10

我想将 EFI 系统分区的大小增加到 750MiB,这样我就可以将 Arch Linux 与 Windows 10 一起安装,因为 Windows 给我的 EFI 系统分区只有 100MiB 太小了。Arch Linux 建议您将 ESP 挂载到/boot而不是/boot/efi100MiB 对于/boot. 我不想碰恢复分区。

Vla*_*eev 14

这个问题是 Google 上“如何调整 EFI 系统分区的大小”的最佳结果之一(这并不奇怪,因为这是问题标题),但是这里的当前答案虽然包含对 OP 情况的良好建议和一般有用的信息,但没有实际上试图回答那个问题。我以前相当简洁(现已删除)回答这个问题的尝试被否决了,所以这里有一个更彻底的。

您很有可能正在阅读这篇文章,因为您已经尝试了显而易见的事情(使用 gparted)并收到错误消息“GNU Parted 无法将此分区调整到此大小。我们正在努力!”。您可能也尝试在 Windows 中执行此操作(使用磁盘管理),结果发现 Windows 根本拒绝使用 ESP 执行任何操作。

好吧,实际调整分区大小的下一个最好的方法是重新创建它。以下是执行此操作的详细步骤:

  1. 如果您要调整正在启动的磁盘的 ESP 大小,请确保手头有一些可启动的应急媒体,可用于在出现问题时修复系统。在执行任何磁盘分区操作之前备份数据通常是一个好主意。

  2. 如果您要扩大 ESP,请使用您最喜欢的分区工具(例如 gparted)移动或调整紧随其后的任何分区来腾出空间。

  3. 安装 ESP,如果尚未安装:

     # mount /dev/sdx1 /mnt # replace sdx1 with ESP
    
    Run Code Online (Sandbox Code Playgroud)
  4. 备份其内容:

     # mkdir ~/esp
     # rsync -av /mnt/ ~/esp/
    
    Run Code Online (Sandbox Code Playgroud)
  5. 卸载 ESP:

     # umount /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  6. 删除并重新创建 ESP:

     # gdisk /dev/sdx # replace sdx with disk containing ESP
     p (list partitions)
     (ensure the ESP is the first partition)
     d (delete partition)
     1 (select first partition)
     n (create partition)
     Enter (use default partition number, should be 1)
     Enter (use default first sector, should be 2048)
     Enter (use default last sector, should be all available space)
     EF00 (hex code for EFI system partition)
     w (write changes to disk and exit)
    
    Run Code Online (Sandbox Code Playgroud)
  7. 格式化ESP:

     # partprobe /dev/sdx
     # mkfs.fat -F32 /dev/sdx1
    
    Run Code Online (Sandbox Code Playgroud)
  8. 恢复 ESP 的内容:

     # mount /dev/sdx1 /mnt
     # rsync -av ~/esp/ /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  9. 更新 /etc/fstab 中的 EFI 条目

     # blkid | grep EFI
     # nano /etc/fstab
     UUID=XXXX-XXXX /boot vfat umask=0077 0 2 # Replace with UUID from blkid
    
    Run Code Online (Sandbox Code Playgroud)

那应该就是一切。我已成功使用上述过程为 ESP 太小 (50 MB) 的 Windows 安装调整 ESP 的大小,以允许 Windows 升级到 Fall Creators' Update(在调整 ESP 大小之前,Windows Update 失败,错误为 0x8E5E03FB,并且使用错误 0xc1900200 更新助手)。

  • 它有效,在我的情况下,我还需要更新 /etc/fstab 上引导分区的 UUID (2认同)
  • 好吧,现在我可以报告 **它适用于 `/dev/nvme0n1` 和 `/dev/nvme0n1p1` 而不是 `/dev/sda` 和 `/dev/sda1`。现在,我可以从之前使用新的 512 MB fat32 ESP 而不是 100 MB fat16 的 grub 菜单启动现有的 Windows 和 Linux。需要采取一些额外的措施来解决某些时候发生的问题。由于评论字符数和格式限制,我将在后续评论中描述它们。 (2认同)

Rod*_*ith 7

Arch 社区非常重视 Freedesktop.org 引导加载程序规范。AFAIK、Arch 及其衍生版本是唯一可以做到这一点的发行版,即使在 Arch 中,它也不是必需的。引导加载程序规范建议使用共享 FAT 分区(例如 ESP)作为存储 Linux 内核的位置,以及将一个发行版的内核与该分区上的另一个内核隔离并管理内核的引导加载程序配置的系统。

Boot Loader 规范试图解决 Linux 发行版在多引导计算机上共存的一些实际问题;然而,因为它只被一个主要发行版采用,即使在存在几年之后,它也没有提供任何实际好处。此外,引导加载程序规范与 systemd-boot 引导管理器密切相关,除了 Arch 社区外,它相当不受欢迎。尽管 systemd-boot 有一些优点,除非您足够熟悉该领域以了解这些优点并知道您需要它们,否则您可能不想以奇怪的方式开始设置(例如将 ESP 安装在/boot)只是为了启用使用 systemd-boot。更重要的是,systemd-boot 有一个巨大的缺点:它只能从它自己启动的分区启动后续启动程序(包括 Linux 内核)。这反过来意味着,如果您使用 systemd-boot,您几乎致力于将 systemd-boot、您的 Linux 内核以及其他操作系统(如 Windows)的引导加载程序存储在一个分区(ESP)上。这符合引导加载程序规范的愿景,但它会产生自己的问题。

也就是说,如果您想放大 ESP,您可以使用各种工具来实现;但是,这意味着您需要从其起点缩小以下分区。这比从末尾缩小分区风险更大,也更耗时,所以我强烈建议建议备份以下分区。此外,在 Windows 计算机上,ESP 后面的分区很可能是 Microsoft 保留分区,它基本上只是 Windows 用作暂存空间的空分区。它通常没有文件系统,所以大多数分区工具不会让你缩小它——Windows 喜欢它是一个特定的大小(100 MiB 或 128 MiB,IIRC)。您可能需要缩小 Microsoft 保留分区之后的分区,删除 Microsoft 保留分区,然后创建一个新分区。这是一个巨大的麻烦,并大大增加了安装新操作系统所涉及的风险。

相反,您可能希望在磁盘的其他位置创建一个新的ESP。在为 Arch Linux 腾出空间后,您可以为 Arch Linux 创建一个新的 ESP 和其他分区。根据您使用的启动管理器,您可以简单地拥有单独的 Arch 和 Windows ESP;或者您可以将 Windows 引导加载程序文件移动到新的 ESP 并删除或重新使用原始 ESP。请注意,因为 systemd-boot 无法启动驻留在它自己以外的分区上的引导加载程序,如果将 ESP 挂载为/boot是您想使用 systemd-boot,如果您希望从 systemd-boot 启动它,则必须将 Windows 引导加载程序移动到新的 ESP。另外,上次我检查时(是在 Windows 7 上,所以这可能不再是真的),如果在磁盘上看到两个 ESP,Windows 安装程序会变得非常困惑并出现故障,从而无法在这样的磁盘上安装 Windows . 因此,如果您使用两个 ESP 进行设置,那么您可能会遇到问题。通过临时更改非 Windows ESP 的分区类型代码可以轻松解决此类问题,但您必须了解此解决方法。

总而言之,虽然我认识到 Arch 社区喜欢在 ESP 上安装 ESP/boot并使用它来存储(通常)通过 systemd-boot 启动的 Linux 内核,但这种方法会造成复杂性并且几乎没有或没有显着的好处。总体而言,您最好使用 GRUB 2 或我自己的rEFInd,这两者都适合您的小型 ESP 并启动存储在其他地方的内核。我的EFI Boot Loaders for Linux页面更详细地描述了 Linux 引导加载程序和引导管理器选项。

  • 将 ESP 安装在“/boot”并将内核放置在 ESP 上的一个很好的理由是利用 EFISTUB 内核,从而允许主板固件直接引导到 Linux 内核。这极大地简化了引导配置,因为现在不需要配置引导加载程序或单独的 Linux `/boot` 分区。 (2认同)

小智 6

要添加到 Vladimir Panteleev 的答案中,您可以使用相同的分区 UUID 和卷 ID 重新创建 efi 分区,而不是将 fstab 更新为新的 UUID。为此:

  • 用于blkid记下 oldUUIDPARTUUID
  • 创建分区后,运行sgdisk -u 1:OLD_PARTUUID /dev/sdx.
  • 创建文件系统时,使用mkfs.fat -i OLD_UUID -F32 /dev/sdx1.


小智 -1

双引导操作系统涉及一些内容。

我建议的第一件事是不要使用现有的 EFI 系统分区。那是用来启动windows的。别搞砸了。

相反,打开磁盘管理,并将 Windows 分区(您的主分区)缩小一定量(无论您想在 Arch Linux 中使用多少)。即使磁盘上看起来有足够的空间,通常也总是有一个关于可以缩小多少的限制。这个“问题”已经在其他地方解决了,所以我在这里不再解释。只要记住哪个是哪个就可以了。例如。大的窗户,小空间是空的等等。

不要忘记在 Windows 中禁用快速启动 - 这实际上是让您的电脑休眠而不是关闭它,以实现“快速启动”。如果您改为启动 Linux,则可能会丢失 Windows 系统中的数据。

启动进入 Linux 安装环境(从 USB 或其他设备),然后设置您在 Windows 中创建的可用空间,并将其放入您的 Linux 系统分区。只需记住哪个分区是哪个即可。例如。不要意外地重新格式化 Windows 分区 - 使用上面记录的分区大小进行仔细检查。