Bestandssystemen op Linux zijn allang een punt van discussie. Op alle huidige distributies is ext4 de standaard, maar dit heeft zijn wortels in ext2, een filesystem dat is ontworpen in 1992 in tijden dat de behoeften aan opslag nogal anders waren dan dat ze nu zijn.

 

 Het eerste serieuze initiatief om een vernieuwend filesystem in te voeren was ReiserFS. Helaas is dit nooit een succes geworden. SUSE heeft het een tijd als standaard gebruikt, maar andere distributies zijn nooit zo ver gekomen en toen hoofddeveloper Hans Reiser in 2006 werd opgesloten voor moord, was het met ReiserFS min of meer afgelopen.

SCHAALBAAR
Met het verdwijnen van ReiserFS kwam Linux een tijdje in een soort vacuüm terecht. Dit werd door sommigen opgevangen door meer de nadruk te leggen op het zeer schaalbare XFS, terwijl tegelijkertijd verder werd ontwikkeld aan ext4, de opvolger van ext3. Met de release van ext4 en een fors aantal verbeteringen dat daarop is aangebracht, kan dit bestandssysteem weer een tijdje meekomen, maar het is duidelijk dat de interne architectuur van ext4 niet kan voorzien in behoeften die in moderne datacentra nodig zijn. Ondertussen kwam buiten de Linux-wereld wel een veelbelovend bestandssysteem op: ZFS. Dat wordt sinds 2005 ontwikkeld door mensen die werkten voor Sun (tegenwoordig Oracle). Dit bestandssysteem biedt features die op Linux nog niet beschikbaar waren, waarvan het Copy-onwrite transactiemodel één van de belangrijkste eigenschappen is. Bij het wegschrijven wordt een kopie gemaakt van een bestand; dit maakt het mogelijk om elk blok na te kijken op corruptie en het te herstellen als zich problemen voordoen. Is een kopie al ooit eens beschadigd, dan wordt dat gedetecteerd en kan een andere kopie worden gebruikt om de fout te herstellen. Doordat ZFS is ontwikkeld onder de CDDL-licentie, die niet compatible is met de GPL-licentie die onder Linux wordt gebruikt, kan het niet rechtstreeks in de Linuxkernel worden geïmplementeerd. Er is wel een mogelijkheid ZFS via FUSE te gebruiken, maar daarmee wordt ingeleverd op de performance en daarom bleef binnen de Linux-community behoefte bestaan aan een nieuw, krachtig bestandssysteem dat is gebaseerd op het COW-principe. Sinds 2008 wordt door Chris Mason gewerkt aan het Linux-bestandssysteem van de volgende generatie: Btrfs. Net als ZFS is Btrfs een COW-bestandssysteem en dat zorgt ervoor dat het bestandssysteem kan worden onderhouden terwijl erop wordt gewerkt. Dit maakt Btrfs tot een bestandssysteem dat ideaal is voor zeer grote omgevingen waar wordt gewerkt met heel veel bestanden en nooit meer downtijd nodig is om reparaties uit te voeren op het bestandssysteem. Btrfs is in 2009 geaccepteerd in de Linux-kernel en inmiddels door verschillende Linux-distributies meegeleverd.

BTRFS-FEATURES
Naast het gegeven dat het een COW-bestandssysteem is, kent Btrfs nog veel meer features. Een belangrijke daarvan is het werken met subvolumes. Die bieden een nieuwe manier om Btrfs onder te verdelen. Een Btrfs-subvolume is te vergelijken met een bestandssysteem in ext4. Het verschil is dat je in ext4 een aparte drager nodig hebt om een bestandssysteem aan te maken: een partitie of een LVM-volume. In Btrfs maak je gewoon één bestandssysteem aan (op één partitie dus) en dat ene bestandssysteem verdeel je vervolgens onder in verschillende subvolumes. Het voordeel is dat je door deze manier van werken eigenlijk nooit meer onderliggende volumes en partities hoeft te vergroten en te verkleinen, terwijl je toch verschillende entiteiten aan kunt maken die elk hun specifieke eigenschappen hebben. Elk subvolume gedraagt zich als een apart bestandssysteem; ze worden alleen niet gemount op de traditionele manier en je zult ze dus met de opdracht mount ook niet zien staan. Om subvolumes op te vragen voor een Btrfsbestandssysteem gebruik je het commando btrfs subvolume list voor het betreffende bestandssysteem. In Listing 1 zie je hoe de opdracht btrfs subvolume list / een lijst laat zien van alle subvolumes die standaard worden aangemaakt bij installatie van een OpenSUSE 12.3-systeem.

SNAPSHOTS
Een andere belangrijke feature van Btrfs zijn de snapshots. Omdat Btrfs een COW-filesystem is, volgt daar eigenlijk automatisch uit dat er ook snapshots beschikbaar zijn: bij het aanmaken van bestanden wordt een kopie gemaakt van het oude bestand. Dat betekent dat de staat van het oude bestand kan worden bewaard en alleen de nieuwe gegevens worden weggeschreven en door het bestandssysteem worden aangeduid als het nieuwe bestand. In het snapshot kun je vervolgens prima de voorgaande status van het bestand terughalen.
Snapshots zijn handig als je terug wilt naar een voorgaande versie van een bestand, en ze zijn ook handig voor het maken van een back-up. Bestanden in een snapshot zullen bijvoorbeeld nooit open staan, en dat betekent dat de status van de bestanden stabiel is, waardoor het snapshot betrouwbaar is. Omdat het vanuit Btrfs-subvolumes een heel kleine moeite is om snapshots aan te maken, gebeurt dit op een distributie als OpenSUSE 12.3 automatisch. Daarop aansluitend heeft OpenSUSE de snapper tool ontwikkeld, die het eenvoudig maakt om voorgaande versies van bestanden terug te halen.
Het gegeven dat Btrfs inherent al snapshots ondersteunt, betekent dat de hele architectuur van het inrichten van een server opnieuw moet worden bekeken. Op ext4-servers was het gewoon gebruik te maken van LVM, zodat features als het eenvoudig verkleinen en vergroten van volumes en het werken met snapshots beschikbaar kwamen. Omdat deze features in Btrfs standaard beschikbaar zijn, zal het werken met LVM in heel veel gevallen niet echt meer nodig zijn, waardoor dus een server op een heel andere wijze kan worden ingericht.

ANDERE FEATURES
Buiten de belangrijke features die tot nu toe zijn genoemd, biedt Btrfs nog veel meer mogelijkheden. De meest in het oog springende eigenschappen worden hieronder genoemd:

• online defragmentatie
• online vergroten en verkleinen van volumes
• werken met diverse block devices en online toevoegen en verwijderen hiervan
• online balancing van datablokken tussen verschillende block devices
• offline filesystem check
• klonen van bestanden
• in-place conversie van ext3/4 naar Btrfs
• RAID 0-, RAID 1- en RAID 10- functionaliteit

BTRFS EN DE DISTRIBUTIES
Hoewel Btrfs veelbelovend is, is het nog niet helemaal af. Momenteel is de status van Btrfs binnen de verschillende distributies daarom ook verschillend. Om te beginnen is er nog een aantal problemen. Het belangrijkste probleem is dat het bestandssysteem compleet vastloopt als het vol zit. Bij tests hebben wij diverse malen een unrecoverable error gezien, wat betekent dat je je back-up mag pakken en je computer opnieuw kunt gaan installeren. Ook is er nog een aantal features dat wel gewenst is, maar momenteel nog niet beschikbaar. Hieronder vallen bijvoorbeeld data-deduplicatie (erg belangrijk als je op servers werkt met heel erg veel gegevens), RAID 5 en een online filesystem check. Kijkend naar de distributies kom je momenteel verschillende posities tegen. Wat betreft de enterprise Linux-distributies zijn SUSE en Oracle het meest vergevorderd. Beide bieden Btrfs als ondersteund bestandssysteem. Het vertrouwen van deze distributies in Btrfs is dus dusdanig dat ze commerciële omgevingen die in de problemen komen met hun Btrfs-stack, gewoon support kunnen leveren. Red Hat-CTO Brian Stevens meldt dat voor de toekomstige Red Hat Enterprise Linux 7 Btrfs geen hoofdrol gaat spelen. Naar zijn zeggen is het bedrijf er nog niet helemaal uit wat het dan wel gaat worden, maar Stevens is van mening dat de problemen die er nog zijn, Btrfs ongeschikt maken voor zijn klanten. Daarnaast vind je Btrfs als optioneel bestandssysteem in alle huidige distributies. Mogelijkheden genoeg dus als je er eens mee zou willen experimenteren!

LISTING 1

 

msh:~ # btrfs subvolume list /
ID 256 top level 5 path tmp
ID 258 top level 5 path opt
ID 259 top level 5 path srv
ID 260 top level 5 path var/crash
ID 261 top level 5 path var/spool
ID 262 top level 5 path var/log
ID 263 top level 5 path var/tmp