Loading learning content...
File systems are the architectural foundations upon which all persistent data storage rests. Every file you've ever saved, every database record ever committed, every configuration that survived a reboot—all exist because a file system organized raw storage blocks into meaningful, navigable structures.
Yet file systems differ dramatically in their capabilities, design philosophies, and target use cases. Choosing the right file system for a given scenario requires understanding not just what features exist, but why they matter and how they interact under real-world conditions.
This page provides a comprehensive feature comparison across the dominant file systems in modern computing: FAT (legacy compatibility), NTFS (Windows enterprise), ext4 (Linux workhorse), XFS (high-performance Linux), ZFS (enterprise data integrity), and Btrfs (Linux modern COW). By examining their individual capabilities systematically, you'll develop the mental framework needed to make informed storage decisions.
By the end of this page, you will understand the fundamental feature categories that differentiate file systems, recognize each major file system's capabilities and limitations, appreciate why certain features emerged from specific design constraints, and develop a systematic approach to feature evaluation that applies to any storage technology you encounter.
Before comparing specific file systems, we must establish a systematic framework for evaluation. File system features fall into distinct categories that reflect different aspects of storage management:
Fundamental Categories of File System Features:
Every file system feature involves tradeoffs. Checksums provide integrity but consume CPU cycles. Journaling enables recovery but adds write overhead. Copy-on-write facilitates snapshots but can cause fragmentation. Understanding these tradeoffs is more valuable than memorizing feature lists.
The Evolution of Feature Sets:
File system features haven't appeared randomly—they evolved in response to specific technological shifts and user requirements:
Each generation built upon previous foundations while introducing capabilities that earlier systems couldn't provide. Modern "next-generation" file systems like ZFS and Btrfs often combine features that required separate filesystems and volume managers in earlier eras.
How a file system organizes data on disk fundamentally shapes its performance characteristics, scalability limits, and operational behavior. Let's examine how each major file system approaches this critical design dimension.
| File System | Allocation Strategy | Directory Structure | Metadata Format | Notable Characteristics |
|---|---|---|---|---|
| FAT32 | Linked clusters via FAT | Linear list entries | FAT + directory entries | Simple but inefficient for large directories; no file-level metadata richness |
| NTFS | Extent-based runs | B+ tree indexes | Master File Table (MFT) | Self-describing metadata; everything (including directories) are files in MFT |
| ext4 | Extents (up to 4) | HTree (hash-indexed) | inode table per block group | Block groups improve locality; delayed allocation reduces fragmentation |
| XFS | Extent-based B+ trees | B+ tree directories | Distributed inodes | Allocation groups enable parallelism; dynamic inode allocation |
| ZFS | Variable blocks + extents | ZAP (extensible hash) | Metadata in block tree | 128-bit addressing; pooled storage; integrated volume management |
| Btrfs | Extent-based COW B-trees | B-tree directories | B-tree based everything | Copy-on-write throughout; metadata and data share tree structures |
Deep Dive: Allocation Strategies
The allocation strategy determines how disk blocks are assigned to files:
Cluster Chains (FAT): Each cluster contains a pointer to the next cluster in the FAT table. Simple implementation but terrible performance for large files—reading a 1GB file requires traversing thousands of FAT entries. Seek times dominate; no ability to preallocate contiguously.
Extent-Based Allocation (NTFS, ext4, XFS, Btrfs): Files are described by "extents"—contiguous runs of blocks described as (start_block, length). A 1GB contiguous file needs only one extent descriptor versus thousands of block pointers. Benefits:
Copy-on-Write Extents (ZFS, Btrfs): Extents are immutable—modifications create new extents rather than overwriting existing ones. This enables:
However, COW causes fragmentation over time as files are repeatedly modified in place.
Larger extents mean fewer metadata entries but potentially more internal fragmentation (wasted space at the end of partially-filled extents). Smaller extents waste less space but require more metadata. Most modern file systems use variable-size extents that adapt to file size patterns.
Deep Dive: Directory Structures
Directory performance becomes critical when directories contain many entries:
Linear Lists (FAT, early Unix):
Each lookup requires scanning all directory entries sequentially. O(n) lookup time makes directories with thousands of entries painfully slow. The Linux locate database exists partly because filesystem directory traversal was historically expensive.
Hash-Based Structures (ext4 HTree, ZFS ZAP): Filenames are hashed to locate directory entries in O(1) average time. ext4's HTree uses a multi-level hash table that scales to millions of entries. ZFS's ZAP (ZFS Attribute Processor) provides extensible hashing with dynamic resizing.
B-Tree Directories (NTFS, XFS, Btrfs): Directory entries are stored in balanced trees providing O(log n) lookup, insertion, and deletion. Consistent performance regardless of directory size. NTFS and XFS use B+ trees specifically, optimized for block-oriented disk I/O.
For directories with thousands or millions of entries (common in backup systems, mail servers, package managers), the difference between linear search and tree/hash lookup can be orders of magnitude.
Data integrity features protect against corruption from hardware failures, power losses, software bugs, and the gradual bit decay known as "bit rot." Different file systems offer dramatically different integrity guarantees.
| File System | Journaling | Checksums | COW Semantics | Self-Healing | Atomic Operations |
|---|---|---|---|---|---|
| FAT32 | ❌ None | ❌ None | ❌ No | ❌ No | ❌ None |
| NTFS | ✅ Metadata journal | ❌ None native¹ | ❌ No | ❌ No² | ✅ Transactional (TxF) |
| ext4 | ✅ Ordered/data modes | ✅ Metadata only | ❌ No | ❌ No | ❌ No |
| XFS | ✅ Metadata journal | ✅ Metadata only | ❌ No | ❌ No | ❌ No |
| ZFS | ✅ Intent log (ZIL) | ✅ All data + metadata | ✅ Full COW | ✅ With mirrors/RAID-Z | ✅ Full transactional |
| Btrfs | ✅ Log tree | ✅ All data + metadata | ✅ Full COW | ✅ With RAID mirrors | ✅ Full transactional |
¹ ReFS provides checksums for NTFS environments ² Windows Storage Spaces provides resilience at the volume layer
Understanding Journaling Variations:
Journaling protects filesystem consistency across crashes, but implementations vary significantly:
Metadata-Only Journaling (NTFS, XFS, ext4 ordered): Only filesystem metadata (inodes, directory entries, allocation bitmaps) is journaled. File contents may be inconsistent after crashes, but the filesystem structure remains navigable. This is sufficient for most scenarios and provides good performance.
Full Data Journaling (ext4 journal mode): Both metadata and file contents are written to the journal before being committed to their final locations. Maximum safety but roughly halves write performance (each block is written twice).
Intent Log (ZFS ZIL, Btrfs Log Tree): Transactions are logged to a dedicated log structure, but COW semantics mean data is never overwritten in place. The log primarily handles synchronous write performance; actual consistency comes from atomic pointer updates in the tree structure.
Without checksums, data corruption is silent. Research shows that 1 in 10^14 to 10^16 bits experience undetected corruption during storage or transfer. For a 10TB dataset, this means several corrupted bits are virtually guaranteed. Only ZFS and Btrfs detect this corruption before it propagates to backups and downstream systems.
Copy-on-Write: Beyond Crash Consistency
Copy-on-write (COW) file systems never overwrite existing data—modifications create new blocks while preserving originals. This provides unique integrity benefits:
Atomic Updates: An entire transaction completes atomically by updating a single root pointer. Either all changes are visible, or none are. There's no window where partial writes exist on disk.
No Torn Writes: Traditional file systems can experience "torn writes" where a crash interrupts a multi-block write, leaving half-old and half-new data. COW eliminates this entirely—old data remains intact until new data is fully committed.
Snapshot Foundation: Since old data is preserved naturally, snapshots become trivial—just keep the old root pointer. This enables:
The Fragmentation Cost: COW's weakness is fragmentation. Repeatedly modifying the same file regions creates scattered blocks across the disk rather than maintaining contiguity. This is particularly problematic for:
ZFS and Btrfs can detect corruption via checksums, but can only repair it if redundant copies exist (mirrors, RAID-Z for ZFS; RAID1/5/6/10 for Btrfs). Without redundancy, corruption triggers errors rather than transparent repairs.
Access control determines who can read, write, execute, and manage files. The sophistication of these mechanisms varies dramatically across file systems, from FAT's complete absence of security to NTFS's elaborate permission model.
| File System | Basic Permissions | ACLs | Extended Attributes | Encryption | Auditing |
|---|---|---|---|---|---|
| FAT32 | ❌ None | ❌ None | ❌ None | ❌ None | ❌ None |
| NTFS | ✅ Inherited | ✅ Full Windows ACLs | ✅ Streams + attributes | ✅ EFS + BitLocker | ✅ SACL auditing |
| ext4 | ✅ Unix rwx | ✅ POSIX ACLs | ✅ xattr | ❌ None native¹ | ❌ Via SELinux |
| XFS | ✅ Unix rwx | ✅ POSIX ACLs | ✅ xattr | ❌ None native¹ | ❌ Via SELinux |
| ZFS | ✅ Unix + NFSv4 | ✅ NFSv4 ACLs | ✅ xattr | ✅ Native encryption | ❌ Via external |
| Btrfs | ✅ Unix rwx | ✅ POSIX ACLs | ✅ xattr | ❌ None native¹ | ❌ Via SELinux |
¹ dm-crypt/LUKS provides encryption at the block layer for Linux filesystems
Permission Model Comparison:
FAT32 (No Security): FAT32 has no concept of file ownership or permissions. Every user has full access to all files. This was acceptable for single-user systems but makes FAT32 unsuitable for any security-sensitive application. FAT is still used for removable media specifically because any system can read/write without permission complications.
Unix Traditional Permissions (ext4, XFS, Btrfs): The classic owner/group/others model with read/write/execute bits. Simple but limited:
POSIX ACLs extend this with per-user and per-group entries, enabling granular control without the rigidity of the basic model.
NTFS Permissions: NTFS provides elaborate permission inheritance with:
This complexity enables precise enterprise security but creates administrative burden and potential for misconfiguration.
ZFS supports NFSv4 ACLs, which are richer than POSIX ACLs and more aligned with Windows-style permissions. This makes ZFS particularly suitable for mixed Windows/Unix environments where permission semantics must interoperate seamlessly.
Encryption Approaches:
NTFS EFS (Encrypting File System): Per-file encryption using user certificates. Files are transparently decrypted when accessed by authorized users. Integrated with Windows authentication. Recovery agents can access encrypted files if user credentials are lost.
ZFS Native Encryption: Dataset-level encryption with inheritance. Keys are managed separately from the data, enabling encrypted send/receive operations. Encryption is AES-256-GCM by default. Keys can be wrapping keys, passphrases, or external key management.
Block-Layer Encryption (dm-crypt/LUKS, BitLocker): For filesystems without native encryption, block-layer solutions encrypt the entire device. This protects all data uniformly but doesn't support per-file or per-user encryption granularity. The filesystem itself is unaware of encryption.
The Trade-off: Filesystem-level encryption (EFS, ZFS) enables per-file policies and seamless backups of still-encrypted data. Block-level encryption is simpler and filesystem-agnostic but operates at a coarser granularity.
Beyond basic file storage, modern file systems provide sophisticated features that transform raw storage into intelligent data services. These features often differentiate enterprise-grade systems from consumer-oriented alternatives.
| File System | Compression | Deduplication | Snapshots | Quotas | Clones/Reflinks |
|---|---|---|---|---|---|
| FAT32 | ❌ None | ❌ None | ❌ None | ❌ None | ❌ None |
| NTFS | ✅ LZ compression | ❌ None¹ | ✅ VSS integration | ✅ Per-volume/user | ❌ None |
| ext4 | ❌ None² | ❌ None | ❌ None | ✅ User/group quotas | ❌ None |
| XFS | ❌ None² | ❌ None | ❌ None | ✅ User/group/project | ✅ reflink copies |
| ZFS | ✅ LZ4/ZSTD/GZIP | ✅ Inline dedup | ✅ Instantaneous | ✅ Dataset/user quotas | ✅ Clones from snaps |
| Btrfs | ✅ LZO/ZSTD/ZLIB | ❌ Offline only | ✅ Subvolume snapshots | ✅ Subvolume quotas | ✅ Reflink copies |
¹ ReFS and Storage Spaces provide deduplication for Windows ² Can use SquashFS for read-only compressed filesystems
Compression Deep Dive:
NTFS Compression: NTFS uses LZ compression on a per-file basis, enabled via file attributes. Compression happens transparently on read/write. Works well for text and documents but adds CPU overhead. Compressed files suffer fragmentation as they grow, since compressed size is unpredictable.
ZFS Compression: Dataset-level compression with algorithm selection per-dataset. LZ4 (fast, moderate compression) is the default. ZSTD provides excellent compression with reasonable performance. GZIP maximizes compression at CPU cost. Compression is applied per-block, so random access remains efficient.
Compression in ZFS often improves performance because:
Btrfs Compression: Similar to ZFS with algorithm selection. ZSTD support is mature. Can be per-file or per-subvolume via mount options or properties.
ZFS inline deduplication maintains a deduplication table (DDT) in memory. The rule of thumb is 5GB of RAM per 1TB of deduplicated data. For 100TB, you'd need 500GB of RAM—often impractical. For most use cases, compression provides better storage savings with far lower overhead.
Snapshots and Clones:
Volume Shadow Copy (NTFS/Windows): VSS provides point-in-time snapshots at the volume level. Used for:
VSS uses copy-on-write at the block level through a system driver, not native filesystem features.
ZFS Snapshots: Instantaneous, space-efficient, hierarchical. Creating a snapshot is a metadata operation that completes in milliseconds regardless of data size. Snapshots consume only the space of changed blocks. Use cases:
Clones are writable copies derived from snapshots, sharing unchanged blocks with the original.
Btrfs Subvolume Snapshots: Similar to ZFS but organized around subvolumes. Each snapshot is itself a subvolume that can be mounted, modified (if not read-only), or snapshotted further. Common layouts use @root and @home subvolumes with separate snapshot schedules.
XFS and Btrfs support reflinks—file copies that share underlying data blocks until modified. The 'cp --reflink=auto' command creates instant, space-efficient copies. This is transformative for workflows involving file duplication: build systems, VM templating, and backup rotation.
Having examined individual feature categories, let's synthesize this knowledge into a comprehensive comparative view that highlights each file system's overall feature profile.
| Feature Category | FAT32 | NTFS | ext4 | XFS | ZFS | Btrfs |
|---|---|---|---|---|---|---|
| Data Organization | Basic | Advanced | Good | Advanced | Advanced | Advanced |
| Data Integrity | None | Good | Good | Good | Excellent | Excellent |
| Access Control | None | Excellent | Good | Good | Excellent | Good |
| Compression | None | Basic | None | None | Excellent | Good |
| Snapshots | None | External | None | None | Excellent | Excellent |
| Scalability | Poor | Good | Good | Excellent | Excellent | Good |
| Tooling Maturity | Universal | Excellent | Excellent | Excellent | Good | Moderate |
Key Observations:
FAT32 — Maximum Compatibility: FAT32 lacks every advanced feature but remains essential because it's the only filesystem universally readable by all operating systems and devices. USB drives, SD cards, and cross-platform media almost always use FAT32 (or exFAT for larger files).
NTFS — Windows Enterprise Standard: NTFS provides comprehensive feature coverage within the Windows ecosystem. Its learning curve is substantial, but its permission model, journaling, and integration with Windows services make it the only reasonable choice for Windows system drives.
ext4 — Linux Reliability: ext4 is the conservative choice for Linux—well-tested, performant, and universally supported. It lacks modern features like checksums and snapshots but compensates with maturity and tooling.
XFS — Scalability Focus: XFS excels at handling extremely large filesystems and files with consistent performance. Its recent addition of reflinks brings modern capabilities while maintaining its enterprise heritage.
ZFS — Data Integrity Leader: ZFS offers the most comprehensive feature set but requires significant RAM and careful planning. It's the gold standard for data that must never be corrupted or lost, despite not being mainstream in Linux distributions.
Btrfs — Linux Modern Alternative: Btrfs brings ZFS-like features to native Linux but with a more complex stability story. Some features (snapshots, compression) are production-ready; others (RAID5/6) remain problematic.
More features don't automatically mean better. FAT32 with zero features is perfect for a bootable USB. ext4 with 'missing' features is ideal for a containerized application that needs no complexity. Choose features based on what you actually need, not what sounds impressive.
We've conducted a systematic examination of file system features across six major systems. Let's consolidate the essential takeaways:
What's Next:
Feature availability is only one dimension of file system comparison. The next page examines Performance Characteristics—how these file systems behave under different workloads, where their architectural choices translate to measurable speed differences, and what performance metrics actually matter for various use cases.
You now possess a comprehensive understanding of file system features and can systematically compare any file system's capabilities. This feature awareness is essential for informed storage decisions. Next, we'll explore how these features translate into real-world performance.