I'm trying to understand why Linux installations use several different filesystems. On my Fedora KDE system, the installer created /boot/efi as FAT32, /boot as ext4, and the root filesystem (/) as Btrfs. What is the specific purpose of each filesystem here, and why not use one filesystem for everything? I'd also like to understand why Linux has so many filesystem options and what the practical differences are between choices such as ext4, Btrfs, XFS, and ZFS.
3 Answers
There is no single filesystem that is best for every job. ext4 is a dependable general-purpose choice with journaling and relatively little complexity. Btrfs adds copy-on-write features, snapshots, subvolumes, and checksumming, which can be useful for desktop system recovery. XFS is often chosen for large filesystems and workloads involving large files. ZFS provides extensive storage-management and data-integrity features, but it has additional kernel and licensing considerations on Linux. In practice, the filesystem should match the job rather than being selected just because it is newer or has more features.
ext4 is commonly used for /boot because it is mature, reliable, and easy for bootloaders to read. The partition stores the Linux kernel and initramfs. Fedora uses Btrfs for / because Btrfs supports features such as copy-on-write, subvolumes, checksums, and snapshots. Snapshots can make system recovery or rolling back changes easier, although you only benefit from them if they are actually configured and used. GRUB can read Btrfs in many setups, so a separate /boot is not universally required; installers may still create one for compatibility, simplicity, or particular encryption and boot arrangements.
The EFI System Partition is FAT-formatted because UEFI firmware is designed to read it directly before Linux has started. It contains bootloader files such as GRUB or the system’s boot manager. Keeping this partition simple and broadly compatible is important, so it is normally formatted as FAT32.

The EFI partition also should not be treated like a normal Linux data partition. It is a small firmware-readable boot area, while /boot and / contain files that are accessed later by the Linux boot process.