Choosing a filesystem is an architectural decision that can rarely be changed. This episode builds a selection guide for ext4, XFS, btrfs, ZFS, and tmpfs based on workload, complete with feature trade-offs, RAM overhead, and vendor support realities.

After 17 episodes studying each filesystem in depth, episode 18 answers the most practical question: which one should I choose? There's no universal answer — only a decision framework that weighs workload, team, and support realities.
This episode builds a selection guide for ext4, XFS, btrfs, ZFS, and tmpfs. Then we discuss the trade-offs that are often overlooked: feature costs, ZFS RAM overhead, and vendor support politics. In the end you'll get a checklist you can run in real projects.
Remember the principle from episode 10: match the filesystem to the workload, not the other way around.
ext4 is the default on Ubuntu and Debian — the most battle-tested and simplest filesystem.
Good for:
Not ideal for:
Its greatest advantage is simplicity: complete documentation, well-understood recovery, and near-zero CPU/RAM overhead.
XFS is the default on RHEL, Rocky, and AlmaLinux — designed for large files and parallel loads.
Good for:
Not ideal for:
btrfs is the openSUSE default — bringing snapshots, compression, and checksums into the kernel.
Good for:
Not ideal for:
ZFS is the choice of TrueNAS and enterprise storage — integrity, pools, and RAIDZ in one package.
Good for:
Not ideal for:
tmpfs stores everything in RAM and swap:
Good for:
/dev/shm and ephemeral containers.Not ideal for:
Every feature is an operational cost. ZFS with snapshots, dedup, and ARC is the strongest filesystem — but also the most complex to operate and debug. The "boring" ext4 is valuable precisely because anyone can manage it.
The honest question to ask: who will be operating this storage for the next three years? If the answer isn't a ZFS expert, consider simplicity.
ZFS's ARC (Adaptive Replacement Cache) uses system RAM dynamically, often reaching half the total memory on large servers:
arcstatThe size value shows the RAM used by ARC. Set a limit:
echo 8589934592 | sudo tee /sys/module/zfs/parameters/zfs_arc_maxRemember: RAM used by ARC isn't wasted — it's a cache that speeds up reads. But servers running other memory-hungry workloads must set a limit.
Two political realities that influence choice:
The practical consequence: filesystem choice is sometimes determined by the ecosystem, not purely by technology.
Use this multi-level flow:
butuh snapshot native? → ya: btrfs / ZFS
→ butuh pool & RAIDZ? → ya: ZFS
→ bukan: btrfs
butuh throughput besar? → ya: XFS
kebutuhan umum / root / sederhana → ext4
data sementara di RAM → tmpfsThree main questions:
Don't choose based on opinion — measure on the real workload. Replay your application's write traces with fio:
fio --name=uji --rw=randwrite --bs=8k --iodepth=16 --size=2G --direct=1 --runtime=60 --time_basedRun the same benchmark on ext4, XFS, btrfs, and ZFS (with the recordsize matching the workload), then compare. Data is more convincing than brochures. Use fio --name=uji --rw=randwrite --bs=8k as the same baseline on all filesystems so the comparison is fair.
Choosing a filesystem is a decision weighing technology and people: the workload determines the need, the team determines the manageable complexity, and the ecosystem determines available support. There's no perfect choice — only the best fit.
Key takeaways:
zfs_arc_max as needed.In the next episode, episode 19, we cover cloud and managed storage — the difference between instance stores and EBS/gp3, filesystems for cloud images, S3-compatible object storage, and EFS, Azure Files, and GCP Filestore. You'll learn when to use local storage and when to use managed services.