Boot vs efi - and the size of partitions

I’m about to install Manjaro and i want to ask if 512MB for Boot/EFI is that’s enough or if i should go for a bigger partition when it comes to UEFI Boot?

Only Nvidia GPU’s required bigger Boot partition like 2gbyte or has this something to do with MBR? At least on my old PC (with a nvidia gpu) i have above 2Gbyte /boot, because i ran into issue in the past.

I have no interest to share my Linux Bootdrives with Windows or to encrypt my boot or my system root/home and i only want to use 2 Kernels.

Do you think that 512 MB is enough for that?

That’s more than enough for two kernels. I have three installed and am at 273M.

On the other hand, 2GB certainly won’t hurt you if you end up needing a little more. For example, Fedora has changed its default boot size to 2GB.

An EFI partition of 512M is enough.

Not to be confused with /boot although it is mounted at /boot/efi.

That’s right, I forgot to mention that /boot is on a separate 2GB partition on my system.

@pwx
@linux-aarhus
Ohh so you have to create for UEFI a partition for /boot/efi and a additional partition for /boot that is required to store this Kernels then?

And when i have only /boot/efi, my kernels will be stored only under root, with a boot folder?

No you don’t.

There is very few reasons to have a separate partition for /boot - don’t confuse yourself with that.

And for gaming - do not use btrfs - it is totally unsuited for gaming.

Yeah i already installed Manjaro (on my new PC) after my first question, i just waited 2 hours after that :stuck_out_tongue:

But i would had reinstall it again, only if 512MB is clearly not enough.

I installed /home and / with ext4 but thanks for pointing at btrfs.

No, /boot doesn’t necessarily have to be on its own partition. When I installed it years ago, GRUB ignored these settings

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

until I had moved /boot from btrfs to a separate ext4 partition.

Extra boot partition is an option in case of encryption. But i think you are not going to encrypt root, do you?

Extra large esp (efi partition) may come in handy if you decide to boot without grub, with universal images, and you get those bloated with nvidia or other drivers.

But in all standart usual setups a esp partition sized 300-500 is more than enough, because the kernels are not stored there at all.

Im not a fan from boot encryption, but on my PC (with MBR) and Laptop (also with MBR), i had /boot (partition ext3) mounted with bootflag for both of my system.

But since im a UEFI/EFI Virgin :stuck_out_tongue:
that is a little new side quest for me.

On an EFI based system only the efi stubs is stored on the EFI partition.

The /boot is part of the root file system.

The common location for mounting the EFI partition is usually in a root folder /efi.

Due to various compatibility issues with grub the Linux world mounted the EFI partition as an extension the /boot folder.

And to further confuse the topic - using systemd-boot requires the EFI partition to be mounted at /boot which could possibly create issues when Nvidia modules is combined into the kernel by mkinitcpio. In such case it is important to not make the EFI partition too small.

But in the case of a default Manjaro Calamares installation you get no issues at all - you don’t need any customised partitioning - unless of course you want the /homeon a separate partition

A default Manjaro /boot folder is only limited in size by the size of installation disk.

Example /boot going down to levels

[tiger fh]# tree /boot -L 3
/boot
├── amd-ucode.img
├── efi
│   ├── EFI
│   │   ├── Linux
│   │   ├── manjaro
│   │   ├── refind
│   │   └── tools
│   └── loader
│       ├── boot-secret-mixin
│       ├── credentials
│       └── random-seed
├── grub
│   ├── custom.cfg
│   ├── fonts
│   │   └── unicode.pf2
│   ├── grub.cfg
│   ├── grubenv
│   ├── locale
│   │   ├── ast.mo
│   │   ├── ca.mo
│   │   ├── da.mo
│   │   ├── de_CH.mo
│   │   ├── de@hebrew.mo
│   │   ├── de.mo
│   │   ├── en@arabic.mo
│   │   ├── en@cyrillic.mo
│   │   ├── en@greek.mo
│   │   ├── en@hebrew.mo
│   │   ├── en@piglatin.mo
│   │   ├── en@quot.mo
│   │   ├── eo.mo
│   │   ├── es.mo
│   │   ├── fi.mo
│   │   ├── fr.mo
│   │   ├── gl.mo
│   │   ├── he.mo
│   │   ├── hr.mo
│   │   ├── hu.mo
│   │   ├── id.mo
│   │   ├── it.mo
│   │   ├── ja.mo
│   │   ├── ka.mo
│   │   ├── ko.mo
│   │   ├── lg.mo
│   │   ├── lt.mo
│   │   ├── nb.mo
│   │   ├── nl.mo
│   │   ├── pa.mo
│   │   ├── pl.mo
│   │   ├── pt_BR.mo
│   │   ├── pt.mo
│   │   ├── ro.mo
│   │   ├── ru.mo
│   │   ├── sl.mo
│   │   ├── sr.mo
│   │   ├── sv.mo
│   │   ├── tr.mo
│   │   ├── uk.mo
│   │   ├── vi.mo
│   │   ├── zh_CN.mo
│   │   └── zh_TW.mo
│   ├── themes
│   │   └── starfield
│   └── x86_64-efi
│       ├── acpi.mod
│       ├── adler32.mod
│       ├── affs.mod
│       ├── afs.mod
│       ├── afsplitter.mod
│       ├── ahci.mod
│       ├── all_video.mod
│       ├── aout.mod
│       ├── appleldr.mod
│       ├── archelp.mod
│       ├── asn1.mod
│       ├── asn1_test.mod
│       ├── ata.mod
│       ├── at_keyboard.mod
│       ├── backtrace.mod
│       ├── bfs.mod
│       ├── bitmap.mod
│       ├── bitmap_scale.mod
│       ├── bli.mod
│       ├── blocklist.mod
│       ├── boot.mod
│       ├── boottime.mod
│       ├── bsd.mod
│       ├── bswap_test.mod
│       ├── btrfs.mod
│       ├── bufio.mod
│       ├── cacheinfo.mod
│       ├── cat.mod
│       ├── cbfs.mod
│       ├── cbls.mod
│       ├── cbmemc.mod
│       ├── cbtable.mod
│       ├── cbtime.mod
│       ├── chain.mod
│       ├── cmosdump.mod
│       ├── cmostest.mod
│       ├── cmp.mod
│       ├── cmp_test.mod
│       ├── command.lst
│       ├── configfile.mod
│       ├── core.efi
│       ├── cpio_be.mod
│       ├── cpio.mod
│       ├── cpuid.mod
│       ├── crc64.mod
│       ├── cryptodisk.mod
│       ├── crypto.lst
│       ├── crypto.mod
│       ├── cs5536.mod
│       ├── ctz_test.mod
│       ├── datehook.mod
│       ├── date.mod
│       ├── datetime.mod
│       ├── diskfilter.mod
│       ├── disk.mod
│       ├── div.mod
│       ├── div_test.mod
│       ├── dm_nv.mod
│       ├── dsa_sexp_test.mod
│       ├── echo.mod
│       ├── efifwsetup.mod
│       ├── efi_gop.mod
│       ├── efinet.mod
│       ├── efitextmode.mod
│       ├── efi_uga.mod
│       ├── ehci.mod
│       ├── elf.mod
│       ├── erofs.mod
│       ├── eval.mod
│       ├── exfat.mod
│       ├── exfctest.mod
│       ├── ext2.mod
│       ├── extcmd.mod
│       ├── f2fs.mod
│       ├── fat.mod
│       ├── file.mod
│       ├── fixvideo.mod
│       ├── font.mod
│       ├── fshelp.mod
│       ├── fs.lst
│       ├── functional_test.mod
│       ├── gcry_arcfour.mod
│       ├── gcry_aria.mod
│       ├── gcry_blake2.mod
│       ├── gcry_blowfish.mod
│       ├── gcry_camellia.mod
│       ├── gcry_cast5.mod
│       ├── gcry_crc.mod
│       ├── gcry_des.mod
│       ├── gcry_dsa.mod
│       ├── gcry_gost28147.mod
│       ├── gcry_gostr3411_94.mod
│       ├── gcry_idea.mod
│       ├── gcry_keccak.mod
│       ├── gcry_md4.mod
│       ├── gcry_md5.mod
│       ├── gcry_rfc2268.mod
│       ├── gcry_rijndael.mod
│       ├── gcry_rmd160.mod
│       ├── gcry_rsa.mod
│       ├── gcry_salsa20.mod
│       ├── gcry_seed.mod
│       ├── gcry_serpent.mod
│       ├── gcry_sha1.mod
│       ├── gcry_sha256.mod
│       ├── gcry_sha512.mod
│       ├── gcry_sm3.mod
│       ├── gcry_sm4.mod
│       ├── gcry_stribog.mod
│       ├── gcry_tiger.mod
│       ├── gcry_twofish.mod
│       ├── gcry_whirlpool.mod
│       ├── geli.mod
│       ├── gettext.mod
│       ├── gfxmenu.mod
│       ├── gfxterm_background.mod
│       ├── gfxterm.mod
│       ├── gptsync.mod
│       ├── grub.efi
│       ├── gzio.mod
│       ├── halt.mod
│       ├── hashsum.mod
│       ├── hdparm.mod
│       ├── hello.mod
│       ├── help.mod
│       ├── hexdump.mod
│       ├── hfs.mod
│       ├── hfspluscomp.mod
│       ├── hfsplus.mod
│       ├── http.mod
│       ├── iorw.mod
│       ├── iso9660.mod
│       ├── jfs.mod
│       ├── jpeg.mod
│       ├── json.mod
│       ├── keylayouts.mod
│       ├── key_protector.mod
│       ├── keystatus.mod
│       ├── ldm.mod
│       ├── legacycfg.mod
│       ├── legacy_password_test.mod
│       ├── linux16.mod
│       ├── linux.mod
│       ├── loadbios.mod
│       ├── loadenv.mod
│       ├── loopback.mod
│       ├── lsacpi.mod
│       ├── lsefimmap.mod
│       ├── lsefi.mod
│       ├── lsefisystab.mod
│       ├── lsmmap.mod
│       ├── ls.mod
│       ├── lspci.mod
│       ├── lssal.mod
│       ├── luks2.mod
│       ├── luks.mod
│       ├── lvm.mod
│       ├── lzopio.mod
│       ├── macbless.mod
│       ├── macho.mod
│       ├── mdraid09_be.mod
│       ├── mdraid09.mod
│       ├── mdraid1x.mod
│       ├── memdisk.mod
│       ├── memrw.mod
│       ├── minicmd.mod
│       ├── minix2_be.mod
│       ├── minix2.mod
│       ├── minix3_be.mod
│       ├── minix3.mod
│       ├── minix_be.mod
│       ├── minix.mod
│       ├── mmap.mod
│       ├── moddep.lst
│       ├── modinfo.sh
│       ├── morse.mod
│       ├── mpi.mod
│       ├── msdospart.mod
│       ├── mul_test.mod
│       ├── multiboot2.mod
│       ├── multiboot.mod
│       ├── nativedisk.mod
│       ├── net.mod
│       ├── newc.mod
│       ├── nilfs2.mod
│       ├── normal.mod
│       ├── ntfscomp.mod
│       ├── ntfs.mod
│       ├── odc.mod
│       ├── offsetio.mod
│       ├── ohci.mod
│       ├── part_acorn.mod
│       ├── part_amiga.mod
│       ├── part_apple.mod
│       ├── part_bsd.mod
│       ├── part_dfly.mod
│       ├── part_dvh.mod
│       ├── part_gpt.mod
│       ├── partmap.lst
│       ├── part_msdos.mod
│       ├── part_plan.mod
│       ├── part_sun.mod
│       ├── part_sunpc.mod
│       ├── parttool.lst
│       ├── parttool.mod
│       ├── password.mod
│       ├── password_pbkdf2.mod
│       ├── pata.mod
│       ├── pbkdf2.mod
│       ├── pbkdf2_test.mod
│       ├── pcidump.mod
│       ├── pgp.mod
│       ├── plainmount.mod
│       ├── play.mod
│       ├── png.mod
│       ├── priority_queue.mod
│       ├── probe.mod
│       ├── procfs.mod
│       ├── progress.mod
│       ├── pubkey.mod
│       ├── raid5rec.mod
│       ├── raid6rec.mod
│       ├── random.mod
│       ├── rdmsr.mod
│       ├── read.mod
│       ├── reboot.mod
│       ├── regexp.mod
│       ├── reiserfs.mod
│       ├── relocator.mod
│       ├── romfs.mod
│       ├── rsa_sexp_test.mod
│       ├── scsi.mod
│       ├── search_fs_file.mod
│       ├── search_fs_uuid.mod
│       ├── search_label.mod
│       ├── search.mod
│       ├── serial.mod
│       ├── setjmp.mod
│       ├── setjmp_test.mod
│       ├── setpci.mod
│       ├── sfs.mod
│       ├── shift_test.mod
│       ├── signature_test.mod
│       ├── sleep.mod
│       ├── sleep_test.mod
│       ├── smbios.mod
│       ├── spkmodem.mod
│       ├── squash4.mod
│       ├── strtoull_test.mod
│       ├── syslinuxcfg.mod
│       ├── tar.mod
│       ├── terminal.lst
│       ├── terminal.mod
│       ├── terminfo.mod
│       ├── test_blockarg.mod
│       ├── testload.mod
│       ├── test.mod
│       ├── testspeed.mod
│       ├── tftp.mod
│       ├── tga.mod
│       ├── time.mod
│       ├── tpm2_key_protector.mod
│       ├── tpm.mod
│       ├── trig.mod
│       ├── tr.mod
│       ├── true.mod
│       ├── tss2.mod
│       ├── udf.mod
│       ├── ufs1_be.mod
│       ├── ufs1.mod
│       ├── ufs2.mod
│       ├── uhci.mod
│       ├── usb_keyboard.mod
│       ├── usb.mod
│       ├── usbms.mod
│       ├── usbserial_common.mod
│       ├── usbserial_ftdi.mod
│       ├── usbserial_pl2303.mod
│       ├── usbserial_usbdebug.mod
│       ├── usbtest.mod
│       ├── video_bochs.mod
│       ├── video_cirrus.mod
│       ├── video_colors.mod
│       ├── video_fb.mod
│       ├── videoinfo.mod
│       ├── video.lst
│       ├── video.mod
│       ├── videotest_checksum.mod
│       ├── videotest.mod
│       ├── wrmsr.mod
│       ├── xfs.mod
│       ├── xnu.mod
│       ├── xnu_uuid.mod
│       ├── xnu_uuid_test.mod
│       ├── xzio.mod
│       ├── zfscrypt.mod
│       ├── zfsinfo.mod
│       ├── zfs.mod
│       └── zstd.mod
├── initramfs-7.0-x86_64.img
├── initramfs-7.1-x86_64.img
├── initramfs-7.2-x86_64.img
├── linux618-x86_64.kver
├── linux71-x86_64.kver
├── refind_linux.conf
├── vmlinuz-6.18-x86_64
└── vmlinuz-7.1-x86_64

Yeah that was always the reason for me to create even with my first Manjaro install 6 years ago, a manual partition way.

I guess this is true, but only for the automatic install i guess.

I was forced 3 year’s ago, to extend my /boot partition with my nvidia PC, because 300MB was not enough.

From my experience at this time, because i couldn’t resize that partition (since it was created near the start sectors), i had to refresh all boot files to the new partition.

And it was very confusing with root/boot and the identical looking /boot (since the / is included in this path) which looked like a symlink to me and somehow it was not, because i had to replace the boot files in both area’s.

Some stuff i probably will never understand, but hey, im happy i could at least fix that big problem at this time.

512 MB is more than sufficient for an EFI System Partition (ESP) – by default, the Manjaro installer (Calamares) creates a 300 MB $ESP, and this is already large enough for the purpose.

The $ESP typically only needs to hold files and directories such as the efi boot stubs – examples: grubx64.efi, bootx64.efi and refindx64.efi (if one happens to use the rEFInd boot manager).

Themes and resources might also be stored on the $ESP, depending on individual preference – even with theming files and/or efi boot stubs for several OS (in a multi-boot scenario), 512 MB should still be adequate.

Technically, there is no size limit for the $ESP – other than limitations imposed by any given filesystem – but the general rule-of-thumb recommendation is to choose a size that suits only what you need, or might need in the future.

The $ESP is not designed for housing kernels. Perhaps there was some confusion, as @linux-aarhus suggests.

Exactly. The only case one can eventually house kernels there is if one ditches grub and decides to use UKIs to boot. But that’s not the default config.
Me personally, i like the idea, but i do not want to house kernels on the super unreliable fat filesystem, so i will not use UKIs. Which means i only have the grub loader which is about 5 mb. My ESP is 300mb and i still find it pretty future proof. 1 GB for me is a space reserved for nothing and just wasted.

One has to also keep in mind - the more customization, the less support from the forum in the future. Because we assume some sane defaults as a starting point for troubleshooting. So as a rule of a thumb - never customize something you do not fully understand and cannot troubleshoot by yourself.

P.s. i think i hit the wrong reply arrow…my post is more at Kobold.

The EFi directory, whether in / or in /boot must be a separate partition in FAT32 file format. And FAT32 filesystem is an extremely inefficient format. The inefficiency grows exponentially with size.

350MB is probably ideal, definitely 512MB is the max. I say 350MB, because really 300MB is what it should be, but there used to be an issue with the Manjaro installer, that if it formatted the EFI partition and it was set to 300MB, the install would fail, so going to 350MB would fix that.

Generally FAT32 runs into “issues” at anything nearing 32GB, or any file approaching 4GB. But seriously, unless you are doing something non-standard it is only holding stubs and never needs to be more than 512MB. Although I have seen 1GB used for safety by some “just in case” experimenters. Personally I had a problem with the choice of FAT32 as the EFI file system from the beginning, but not because of the size limits.

The efi fs is fat because Microslop actively participated in this standart development. So you see remnants of micro-thinking everywhere. For example ia an efi shell the partitions are called FS0: and FS1: (case insensitive of course), there is ls command but it also works with dir…etc.
And thus, most firmwares cannot read anything but fat on a disk. So the very boot loader has to be on that.

This, and the fact FAT is not a native (robust) Linux filesystem, is why I don’t like this idea:

Just pitching in — and some of the stuff I might be posting here may already have been said by others — the EFI system partition needs not be very big at all, because it’s only meant to contain EFI stubs. EFI stubs are EFI/UEFI-compatible boot loaders, such as (the EFI version of) grub or refind.

That said, the reason why Microsoft recommends 512 MiB is that if you install (or dual-boot with) Microsoft Windows, there will be a whole load of additional Microsoft-specific junk in there as well. But I have known people — even here on the forum — with an EFI system partition of only 16 MiB, and formatted in FAT16 instead of vfat.

The recommended size is 300 MiB, and I think it’s more than enough.

Notes:

  • Do not get the EFI system partition mixed up with /boot. /boot is where the kernels, the initramfs and the grub configuration live. In theory, it could be of any filesystem type regarded as writable by the kernel, so that it can be written to, for instance when updating your kernels. However, at boot time, before the kernel is even loaded, it must be read from and written to by the boot loader, but grub itself cannot write to btrfs, and its support for xfs is a hit-and miss — some grub versions cannot read it at all. If you’re going to have /boot as a separate partition, then best is to choose ext4 as its filesystem.

  • The EFI system partition is mounted at /boot/efi in Manjaro, or at /efi in some other distributions, and must be formatted with a filesystem supported by the firmware. In practice, this will usually be vfat (FAT32).


No, a separate /boot is not required. However, there may be circumstances where it is recommended to have a separate partition for /boot.

The fact that grub cannot write to btrfs and thus cannot save your last booted entry while you would still like to use btrfs for your root filesystem could be such a reason, although in this case, it should be noted that if you want to make bootable btrfs snapshots, then that will no longer be possible. The whole “bootable snapshot” strategy depends on the root filesystem being btrfs with /boot being part of the root subvolume “@”.

The kernels will always be stored under /boot, regardless of whether /boot is a separate partition or not.

Remember, UNIX does not think in terms of drives and partitions; it only thinks in terms of a unified directory structure.


Yes, but this has nothing to do with whether /boot is the mountpoint for a separate partition or just a directory on the root filesystem.

It’s because grub cannot write to btrfs, and in addition to that, it also has a problem with sparse files.


On a GPT-partitioned drive with UEFI boot, the EFI system partition is the one that should be marked with the esp and boot flags.

You can optionally also add a root flag on the root filesystem, but this is not required — it’s only needed on systems with systemd that do not have an /etc/fstab file, so as to allow systemd to automatically detect the root filesystem.


If you don’t understand, then just ask. That’s what this forum is all about. :wink:


Well, if you use unified kernels, then it would be best to put them in the EFI system partition, since they will be directly booted from within the EFI. In that case, the EFI stub is actually in the compressed kernel binary, and such systems can boot without needing grub or refind.


That issue did indeed exist for quite a while, but was eventually solved in a later version of calamares. :wink:

Absolutely. M$ like to stick their fingers into many pies, and whenever they get the chance to infer they made the recipe, they do.

The $ESP can actually be formatted with a variety of file systems; the only proviso being that an efi filesystem driver must exist for it.

They do exist, but the fat32 variant of vfat is indeed the de facto standard, and logistically speaking, it would be an up-hill battle to encourage the industry to change.