BTRFS is a modern copy on write (COW) filesystem for Linux aimed at implementing advanced features while also focusing on fault tolerance, repair and easy administration. Its main features and benefits are:
- Snapshots which do not make a full copy of the files
- Built-in volume management, support for software-based RAID 0, RAID 1, RAID 10 and others
- Self-healing - checksums for data and metadata, automatic detection of silent data corruptions
Feature overview:
Extent based file storage
264 byte == 16 EiB :ref:`maximum file size<administration-limits>` (practical limit is 8 EiB due to Linux VFS)
Space-efficient indexed directories
:doc:`Checksums on data and metadata<Checksumming>` (crc32c, xxhash, sha256, blake2b)
:doc:`Compression (ZLIB, LZO, ZSTD), heuristics<Compression>`
:doc:`Integrated multiple device support<Volume-management>`:
- File Striping (like RAID0)
- File Mirroring (like RAID1 up to 4 copies)
- File Striping+Mirroring (like RAID10)
- Single and Dual Parity implementations (like RAID5/6, experimental, not production-ready)
SSD/NVMe (flash storage) awareness, :doc:`TRIM/Discard<Trim>` for reporting free blocks for reuse and optimizations (e.g. avoiding unnecessary seek optimizations, sending writes in clusters.
:doc:`Background scrub<Scrub>` process for finding and repairing errors of files with redundant copies
:doc:`In-place conversion<Convert>` of existing ext2/3/4 and reiserfs filesystems
:doc:`Seeding device.<Seeding-device>` Create a (readonly) filesystem that acts as a template to seed other Btrfs filesystems. The original filesystem and devices are included as a readonly starting point for the new filesystem. Using copy on write, all modifications are stored on different devices; the original is unchanged.
:doc:`Send/receive of subvolume changes<Send-receive>`, efficient incremental filesystem mirroring and backup
:doc:`Batch, or out-of-band deduplication<Deduplication>` (happens after writes, not during)
:doc:`Tree-checker<Tree-checker>`, post-read and pre-write metadata verification
:doc:`Zoned mode support<Zoned-mode>` (SMR/ZBC/ZNS friendly allocation, emulated on non-zoned devices)