# Btrfs

Btrfs (B-tree FS, uitgesproken als Better FS) is een copy-on-write-bestandssysteem ontworpen en geïmplementeerd door Oracle en uitgebracht onder de GNU General Public License (GPL). Btrfs is gemaakt als een antwoord op ZFS en de tekortkomingen van de huidige bestandssystemen. Het bestandssysteem kan gebruikt worden op Linux en Windows.

## Limieten

* Maximumgrootte van het bestandssysteem 16 exabyte.
* Maximumgrootte van één enkel bestand 16 exabyte.
* Aantal bestanden in elk individueel bestandssysteem 2$^{64}$.
* Maximumgrootte van bestandsnaam 255 bytes.

## Eigenschappen

Btrfs beweert een "gemakkelijk te herstellen en te onderhouden bestandssysteem te zijn, dat zich focust op fouttolerantie". Thans zijn er nog enkele basiseigenschappen die ontbreken op Btrfs, maar Btrfs is volop in ontwikkeling.
Eigenschappen:
* Dynamische allocatie van inodes (geen maximumaantal bestanden bij het maken van het bestandssysteem)
* Snapshots maken die beschrijfbaar zijn en snapshots maken van snapshots
* Subvolumes
* Object-level mirroring en striping
* Controlesommen op data en metagegevens (voor een goede integriteit; op het moment wordt CRC-32C gebruikt, maar er zijn alternatieven gepland)
* Compressie (zlib; mount optie -o compress)
* Copy-on-write-logging voor alle data en metagegevens
* goede samenwerking met de device mapper voor het gebruik van meerdere apparaten, met ingebouwde RAID-algoritmes
* Online bestandssysteem en snelle offline check
* Efficiënte incrementele back-ups en bestandssysteem-mirroring
* Mogelijkheid tot het upgraden van ext3-bestandssysteem naar Btrfs en om terug in originele staat te herstellen
* Solid state drive (SSD)-geoptimaliseerde modus (mount optie -o ssd; geen wear levelling. Het zorgt dat gegevens niet op dezelfde plaats weggeschreven worden door middel van meerdere superblocks.)
* Online defragmentatie
* Seed-device-ondersteuning

## Redundantie (RAID)

Een Btrfs-bestandssysteem kan worden gemaakt boven op een groot aantal apparaten, en nog veel meer apparaten kunnen nadien worden toegevoegd. Standaard zullen alle metagegevens gemirrord worden over twee apparaten. Datagegevens worden gestriped (verdeeld) over alle aanwezige apparaten. Als er slechts één apparaat aanwezig is, zullen de metagegevens worden gedupliceerd op dat ene apparaat.
Thans ondersteunt Btrfs alleen RAID-0, RAID-1 en RAID-10. Men is bezig met het implementeren van RAID-5 en RAID-6.

## Gedistribueerde systemen

Nu is Btrfs nog niet in staat om een gedistribueerd of netwerkbestandssysteem te zijn. Maar Oracle is begonnen met het ontwerpen van CRFS (Cohorent Remote File System). Dit is een netwerkbestandssysteemprotocol speciaal ontworpen voor het gebruik van netwerkopslag op een Btrfs-bestandssysteem.

## Copy-on-write

Alle bewerkingen zijn copy-on-writetransacties. Hierdoor hoeft het bestandssysteem niet nagekeken te worden op fouten. Elk blok wordt nagekeken om stille datacorruptie te vermijden, de data herstelt zichzelf indien er gebruikgemaakt wordt van een replicaconfiguratie (RAID).

## Snapshots

Btrfs voorziet in ongelimiteerd gebruik van snapshots. Een snapshot is een momentopname van een bestandssysteem.
Snapshots helpen in het back-up proces en in het herstelproces. Elke snapshot kan een volledige back-up genereren. De mogelijkheid bestaat ook om een incrementele back-up te genereren door verschillende snapshots samen te gebruiken. Incrementele back-ups maken het gebruik van herstel op afstand zeer efficiënt.

## Concurrentie

Ext4 wordt gezien als een overgangssysteem naar Btrfs.
ZFS implementeren in Linux is moeilijker omdat ZFS onder de CDDL-licentie is uitgegeven en de Linuxkernel onder GPL wordt gedistribueerd. ZFS is inmiddels wel beschikbaar via FUSE.