如何确定所需的EFI分区所需的适当磁盘空间量

在这个Ubuntu帮助维基关于磁盘空间的页面中,建议将EFI分区的大小设置在100~250 MB左右。然而,我可能只有一个150 MB的EFI分区,而实际上需要151 MB的空间!
那么,如何知道我需要为EFI分区分配多大的精确空间呢?

4你的存储空间有多大?将其设为500M,不用担心。存储器很便宜。 - Organic Marble
1我的硬盘驱动器容量为500GB,其EFI分区大小为100MB。我刚刚给了Ubuntu 250GB的空间,所有分区大小都由Ubuntu自行处理。 - Piyush Mhatre
6个回答

你无法知道确切的大小,除非:
1. 你打算永远不更新操作系统 2. 你进行初步测试安装,然后使用该信息在另一个操作系统安装过程中重新创建分区
以我自己的机器为参考,日常工作机的EFI分区大小为1GB。这些分区存在于至少512GB大小的存储设备上。目前,没有任何EFI分区超过1.8%的利用率,即180MB(最低为97MB)。
过去曾因过小的EFI分区而遭受损失,所以我允许Ubuntu安装向导选择其EFI分区的大小,从那时起就没有出现任何问题。
附加说明:
微软建议其操作系统使用100MB,而许多Linux论坛则建议Linux基于的操作系统或任何双启动或多启动情况下使用更大的分区。
gdisk的作者建议使用550 MiB
根据{{link1:Arch Linux wiki}}的说法,为了避免某些 EFI(可扩展固件接口)可能出现的问题,ESP(EFI 系统分区)大小至少应为 512 MiB。推荐的大小是 550 MiB,以避免 MiB/MB 的混淆,并防止意外创建 FAT16 文件系统。
因此,对于 EFI 系统分区,最常见的大小指南介于 100 MB 到 550 MB 之间。其中一个原因是,由于它是驱动器上的第一个分区,稍后调整其大小会很困难。EFI 分区可能包含语言、字体、BIOS 固件和其他与固件相关的内容。有些固件/软件安装在 EFI 分区而不是数据驱动器中。
由于未来可能难以扩大 EFI 分区的大小,并且许多存储设备以数百 GB 计量,除非计划是安装操作系统、断开设备与互联网的连接并在未来永远不更新,否则选择绝对最小值是不合理的。

5Linux方面的许多建议是基于一个假设,即系统将被设置为多重引导,并且将处理来自Windows或其他操作系统的各种随机入侵分区的情况,或者您计划使用ESP作为引导分区。这两种情况下 应该 都需要至少半个千兆字节的空间,但如果这两种情况都不适用,则128MB已经足够了(我的笔记本电脑上有一个双引导设置,只使用了不到256MB ESP的四分之一,这与我处理过的大多数其他系统保持一致)。 - Austin Hemmelgarn
180MB是1GB的18%,而不是1.8%。(我认为你并不是指那个使用了180MB的人实际上使用了更大的10GB,以仍然在你的1.8%限制之下。) - Peter Cordes
@PeterCordes 大多数EFI分区的大小为1GB。在一个10GB的磁盘上,占用磁盘空间百分比最高的分区为180MB。而占用百分比最低的分区为97MB(磁盘大小未指定)。 - user253751
4"...没有任何EFI分区超过180MB(最小的是97MB)。” - 我觉得这些数字相当高;我的Win10/Debian10双系统台式机只使用了31M;我的仅运行Debian10的笔记本电脑只使用了132K。说实话,1G的EFI分区对我来说有点过大了。你是将其用作/boot吗? - marcelm
3人们倾向于过度放大这些分区。我多年来一直使用Arch Linux系统,ESP只有32 MiB,引导分区只有128 MiB,从未遇到问题。Debian和Ubuntu系统可能需要一个256 MiB的引导分区,因为它们保留了旧内核,但不需要更大。 - Bachsau

所需的空间取决于使用的引导方法以及安装了哪些其他操作系统。
GRUB仅安装其第一和第二阶段的引导加载程序,这相当小,然后使用自己的文件系统驱动程序通过EFI接口加载内核和initrd以进行块设备访问。你只需要几兆字节的空间。
systemd引导加载程序和Windows都将内核和包含驱动程序的初始ramdisk复制到ESP中,这需要一些空间--具体需要多少取决于初始ramdisk中包含的驱动程序。
Windows仅选择最基本的驱动程序,类似于在initramfs.conf中选择MODULES=dep,因此它们只需要几兆字节的空间,但如果硬件发生太大变化(例如,将硬盘从内部SATA端口移动到扩展卡上),则无法启动。
据我所知,Ubuntu默认为MODULES=most,因此它会将几兆字节的驱动程序复制到initramfs中。这是稳健的,但需要额外的空间。
Ubuntu通常会保留最近的两个内核版本,因此需要足够的空间来存放两个版本的initramfs,以及在升级期间额外的一个(新版本在删除旧版本之前会被复制到ESP中)。
所以:
如果你只使用GRUB,并且不打算(永远)切换,那么10 MB就足够了。
如果你双启动Windows并使用GRUB,Windows默认的100 MB就可以了。
如果你计划使用systemd-boot,请留出至少三个initramfs的空间,目前大约是30-40 MB,并且可能在未来的版本中增加。200 MB应该是安全的,典型的安装使用500 MB,因为现代硬盘的大小已经无关紧要了。

如果你只打算在硬盘上安装Linux,那么只需要几兆字节的空间就足够了。我从未见过引导加载程序占用超过3MB的情况。因此,在大多数情况下,选择发行版允许的最小大小就可以了。
但是有一些要考虑的问题:
- 如果你将来想使用双启动之类的功能,可能会有些麻烦,因为其他操作系统往往使用的空间比Linux引导加载程序多得多。例如,Windows存储其恢复工具在那里,并期望至少300 MiB 的空间。 - 现在的硬盘空间相当便宜。 - 即使不便宜 - 例如固态硬盘(SSD) - 你可以将其视为SSD磨损平衡的缓冲空间(还要记得在文件系统中启用trim/discard功能)。 - 此外,一些早期的UEFI实现据称至少需要512 MiB,但个人从未遇到过这种情况。
我认为50-100 MiB 对于大多数Linux安装来说应该足够了;这样可以为额外的引导加载程序提供一些余地,同时也不会在设备上浪费太多空间。

你可以使用类似VirtualBox的软件将所有想要的操作系统安装到一个虚拟机中,共享/boot/efi目录,然后看看会有什么结果。
例如,Lubuntu建议使用300MB。实际上它使用的空间要少得多,但我猜它是为了留下未来的内核而这样规划的。

enter image description here

一个全新安装的Sparky [ sparkylinux-6.7-x86_64-minimalgui ] 和Lubuntu [ lubuntu-22.04.2-desktop-amd64 ] 的使用情况。

enter image description here


我在我的EFI分区中使用了大约102MB的空间,因为我认为这是最好的选择,但你可以根据自己的需求来决定合适的大小。总结一下:

使用你认为正确的大小,但最佳范围应该是100MB到1GB。可以尝试不同的大小并选择最合适的选项。

希望对你有所帮助!


你如何确定“最佳”选项?反正也没有必要超过250MB。 - Pilot6
那个占用空间最少且性能最佳的选项。 - sgal5208
2这与性能无关。EFI分区仅用于引导系统。 - Pilot6
2为什么是1GB呢?你是希望能够多重启动30个操作系统吗? - ChanganAuto
不知道呢...也许吧?谁知道呢... - sgal5208

尽管从理论上讲是必要的,但我从未见过除非你不安装很多不同的操作系统,否则需要超过5MB的需求。
你不会在那里存储Linux内核,只有每个操作系统的引导加载程序,它们往往很小。
就个人而言,我将分区设置为50MB,因为如果更小的话,Fedora安装程序会抱怨。我尝试安装的任何其他操作系统都满足于5MB。
如果你想遵循最佳实践,使用550MB,保证任何东西都能适应,如果你不介意磁盘空间的损失,那么这并不算真正的损失。

45MB?别开玩笑了。那只会给人们带来麻烦。超出容量后的痛苦远远超过了节省几兆字节的好处。顺便说一下,根据Gparted的显示,我的EFI分区现在已经占用了13.4MiB(14MB)的空间,而里面只有一个10周前安装的Ubuntu 20.04.2系统。 - Levente
2作为一个只使用Arch和Gentoo Linux的人,我只有一个非常小的EFI分区,因为它只需要存储GRUB引导加载程序。其他所有的东西都在一个单独的/boot分区中处理。然而,我看到很多消费级发行版做了一些非常不同的事情,我猜这只是一个快速简便的捷径。 - utx0_
@Levente,你在安装过程中做错了一些事情。我过去三年来每天都在使用的机器是在2019年春季进行了Ubuntu 18.04的全新安装,直到20.04.1发布后我才升级。现在我的启动分区利用率仍然只有2.3M(还有509M未使用,基本上浪费了)。 - antichris