How large should you make the UEFI System Partition?

You’ll find a small UEFI System Partition (ESP; sometimes EFISYS) partition on all modern computers. The ESP partition is a required system partition that holds the system boot managers on UEFI compatible computers. However, when you’re installing one or more operating systems yourself — how big should you make the UEFI partition?

In this article I’ll first look at the default suggested partition sizes suggested in some operating system installers and why, and then suggest a definitive recommendation for ESP sizing.

Default UEFI System Partition sizes

The suggested default size of the UEFI System Partition (ESP) by various operating systems varies based on a few metrics including the physical sector size of the storage media. The size of your device’s default ESP may be completely different depending on the UEFI implementation and your hardware vendor.

The below table looks at the defaults suggested in popular operating system installers for an x86-64 processor architecture setup:

Operating system Partition tool File system Sector size ESP size EFI size
Fedora Linux 27 anaconda/blivet FAT16 any 250 MiB 11,5 MiB
openSUSE 2018-02-10 YaST2 FAT16 any 500 MiB 4,8 MiB MB
openSUSE Leap 42,3 YaST2 FAT16 any 156 MiB 4,8 MiB
TrueOS 17.12 (like FreeBSD 11) ? FAT16 any 100 MiB 1,1 MiB
Ubuntu 17.10 (like Debian 9) ubiquity/partman-auto FAT32 any 513 MiB 4,9 MiB
Windows 7, 8.1, and 10 Windows Setup FAT32 <4 KiB 100 MiB 25 MiB
Windows 10 Windows Setup FAT32 ≥4 KiB 260 MiB 25 MiB
Windows 7, 8, and 8.1 Windows Setup FAT32 ≥4 KiB 259 MiB Fails

There are a few interesting things to note about the default ESPs:

mkfs.fat defaults to FAT16 for small partitions

All the Linux based installers use a utility called mkfs.fat to format their UEFI System Partitions. It defaults to creating FAT16 file systems for partitions smaller than 260 MiB unless overridden with a special flag. For larger partitions, the utility will default to FAT32.

I believe that many of the internet myths about “too small ESP causing compatibility issues” are caused by UEFI systems that follow the UEFI Specification and require that ESPs are FAT32-formatted.

4 KiB native sector drives (4 Kn) require larger partitions

Hard drives have traditionally been split in sectors of 512 bytes, but newer drives have sectors 4096 bytes (4 KiB). Most of these 4 KiB drives emulate 512 byte drives through firmware for compatibility.

However, some drives are what the industry calls high-performance “4 K native” drives that don’t emulate 512 sector sizes but expose 4 KiB sectors to the operating system.

Due to how the FAT file system works, the smallest possible size for a FAT32 partition on a 4 KiB native disk is 260 MiB compared to 32 MiB on a traditional 512-byte-sector disk.

Windows 10 and updated Windows 8.1 installers will suggest creating a 260 MiB ESP when you try to install on a 4 Kn disk, but Windows 8 and early 8.1 installers would suggest 259 MiB and the installation would fail.

None of the Linux installers I’ve examined for this article included any special handling for 4 KiB native drives. Fedora Linux 27, openSUSE Leap 42,3, and TrueOS 17,12 all use FAT16 which requires partitions to be at least 32 MiB on a 4-KiB-sector disk so they shouldn’t have any trouble creating the partitions despite suggesting to use too small partitions to use FAT32.

Why does the ESP has to be so much bigger than the installed system?

We’ve already looked into how the file systems themselves have minimum size requirements (32 MiB on a traditional 512-byte-sector disk and 260 MiB on a newer 4 Kn type disk). However, all the installers can fit on a 32 MiB partition so why are they so much larger by default?

Windows uses only about 25 MiB out of the 100/260 MiB minimum partition size it suggest you reserve for the ESP. A small portion of the disk’s size is taken up by file system overhead. Besides that, Microsoft leaves some extra space for third-party hardware component drivers (such as special input drivers and RAID-controllers for disk arrays). There isn’t reserved any space for a second operating system for a dual-boot environment. Microsoft reserves a 100 MiB partition for Windows alone.

On the Linux side, the newest versions of Debian, openSUSE, and Ubuntu appears to be following the sizing suggestion from The Boot Loader Specification which suggests that the ESP partition should be about 477 MiB (500 MB).

None of these distributions follow the same specification’s suggestion of getting rid of the separate /boot partition, and install the GRUB boot loader directly onto the much larger provisioned ESP partition. This type of installation would have required 150–220 MiB space on the ESP; which is considerably larger than what all the examined Linux distributions installs onto the ESP today.

Conclusions

The UEFI System Partition should be at least 260 MiB (273 MB) to ensure its properly formatted with FAT32 so that you avoid UEFI implementation compatibility issues. (If you do have incompatible hardware that requires FAT16-formatting, then I suggest you move aside the files on the UEFI System Partition, convert the partition to FAT16, and copy the files back over to it.)

Microsoft recommends you set aside 100 MiB for Windows. Unless you decide to get away with the separate /boot partition on Linux, then I recommend you set aside 100 MiB of space per Linux system you intend to install.

Keep in mind that you should allocate some space for failed and past installations, upgrade staging, and operating/file system debris as well. There’s no reason to try to squeeze down the size of the ESP to a point where it might cause issues for you in the future.

Note that you can create separate UEFI System Partitions for each operating system or install all of them on the same partition. Some operating system installers are better than others in letting you choose where you want to install their UEFI blobs.

Please feel free to submit corrections or notices of specific UEFI implementation compatibility problems you might encounter using the link below.