Hlavní navigace

Btrfs: zajímavý, ale nekompletní souborový systém

7. 7. 2008
Doba čtení: 7 minut

Sdílet

Btrfs (Butter FS) je souborový systém, který minulý rok začala vyvíjet firma Oracle. Obsahuje spousty zajímavých vlastností a na Linuxu je brán jako náhrada ext3. Jeho vývoj je zatím velmi bouřlivý, to nám ale nebrání se podívat na to, co je už hotové a zhodnotit dosavadní snažení vývojářů.

Btrfs je, když…

Na desktopové souborové systémy se s klesajícími cenami disků kladou čím dál větší nároky. Uživatelé si přejí vytvářet zálohy, testovat distribuce Linuxu, provozovat RAID pole, ukládat spousty dat (multimédia, obrazy CD/DVD, …) a pokud možno tak, aby byl disk „nafukovací“. Nejen desktopy volají po nových vlastnostech souborových systémů, ale ani servery se zatím nedočkaly toho, co by opravdu chtěly. LVM2 není pro mnoho uživatelů ani administrátorů to pravé řešení. Zatímco ZFS se potácí v licenčních problémech, Oracle pomalu protlačuje vývoj svého vlastního souborového systému, který nazval btrfs. Ten přichází s velmi vyspělými vlastnostmi:

  • Maximální velikost souboru 264
  • Efektivní způsob ukládání malých souborů
  • Efektivní způsob indexování adresářů
  • Dynamicky alokované inody
  • Zapisovatelné snapshoty
  • Podsvazky
  • RAID 0 (striping), 1 (mirroring) a 10 (1+0)
  • Kontrolní součet dat a metadat
  • Kontrola souborového systému za běhu
  • Velmi rychlá kontrola souborového systému offline
  • Efektivní inkrementální zálohy
  • Nové vlastnosti se doplňují
  • CRFS

O několika vlastnostech bych se rád zmínil více. Maximální velikost nové souborové systémy ženou opravdu vysoko. Btrfs má ale i jiné výhody. Například efektivně ukládá malé soubory a index pro adresáře. Malé soubory, které jsou menší než jeden blok, mohou být zabaleny do jednoho bloku k sobě a tím zabírat méně místa. Adresáře jsou indexovány dvěma rozdílnými způsoby. Jeden používá TEA hash, druhý způsob je využíván u funkce readdir(), která vrací data seřazena podle čísla inodu. To se mnohem více podobná skutečnému rozprostření dat na disku a dočkáme se tak většího výkonu. Pro testování nových verzí programů nebo rovnou celé aktualizace linuxového systému se mohou hodit zapisovatelné snapshoty. Díky nim můžeme vytvořit oddíl podobný již existujícímu a využít ho pro zálohování nebo testování, změny v něm uskutečněné se nedostanou do původního oddílu. Snapshoty se po vytvoření nemění (neprojevují se změny provedené v původním oddílu) a jsou to tedy takové „časové obrazy“ disku. Ty se pak dají jednoduše překopírovat na jiné místo.

Historie

Btrfs je velmi mladý souborový systém. V roce 2007 jeho vývoj oznámil Oracle a poslední stabilní vydání je z 15. května 2008. Tento souborový systém má být náhradou zastarávajícího ext3, u kterého ani jeho vylepšená verze ext4 nepřináší vlastnosti, po kterých občas uživatelé volají. Oracle se rozhodlo přijít s něčím novým. S něčím co se dokáže postavit do ringu i s velikány jako je ZFS. Jako licence byla vybrána GPL z důvodu kompatibility s jádrem. Od začátku je tento systém navrhován pro linuxový kernel a je spjat s linuxovým device-mapperem. Ten využívá například i LVM nebo linuxový softwarový RAID. Je to tedy odladěná technologie dostupná na jádrech řad 2.4 i 2.6. Btrfs stále ještě není připraveno pro ostré nasazení, protože vývojáři nezaručují, že se ještě během vývoje nezmění struktura některých součástí.

Vítáte příchod nového souborového systému do Linuxu?

CRFS

Spolu s btrfs byl navržen CRFS, protokol pro zpřístupnění dat klientům v síti. CRFS je úzce spjato s btrfs a skládá se z user-space daemonu crfsd a linuxového modulu. Vývoj je ve velmi rané alpha verzi, která zahrnuje navržení základního designu a implementaci základních vlastností. Nebylo zatím vypuštěno ani jedno vydání a zdrojové kódy je možné stáhnout z mercurial repozitáře. Některé vlastnosti se do alpha verze nedostanou, přece jen práce na něm začaly později než na btrfs.

Použití v praxi

Brtfs pokročilo za ten rok o velký kus a vyzkoušet si ho dnes může bez problémů každý. Rád bych tedy ukázal, jak souborový systém dostat do Linuxu a jak použít jeho základní vlastnosti.

Instalace

Instalace je jednoduchá. Stačí si stáhnout ze stránek btrfs zdrojové kódy posledního vydání, rozbalit a zkompilovat. Pozor na to, abyste stáhli jak btrfs, tak btrfs-progs. V době psaní tohoto článku je dispozici btrfs ve verzi 0.15 a další verze se v postupu mohou mírně lišit.

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/btrfs-0.15.tar.bz2
wget http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/btrfs-progs-0.15.tar.bz2
tar xf btrfs-0.15.tar.bz2
tar xf btrfs-progs-0.15.tar.bz2
cd btrfs-0.15
make
insmod btrfs
cd ../btrfs-progs-0.15
make
make install 

Soubory pro práci s btrfs se nainstalují do /usr/local/bin. Některé distribuce nemají nastavenou proměnnou $PATH na tento adresář, a proto je v takovém případě ještě potřeba doplnit do ~/.bashrc u uživatele root jeden řádek.

export PATH=/usr/local/bin:"${PATH}" 

Naformátování oddílu

Práce s btrfs je pohodlná a formátování je stejné jako u jiných souborových systémů. Používá se k tomu nástroj mkfs.btrfs. Vytvořil jsem si pro testování, za pomoci LVM2, 4 oddíly.

mkfs.btrfs /dev/mydisks/btrfs1
mkfs.btrfs /dev/mydisks/btrfs2
mkfs.btrfs /dev/mydisks/btrfs3
mkfs.btrfs /dev/mydisks/btrfs4 

Tímto vytvoříme 4 oddíly stejně jako například u ext3. Btrfs umí však fyzické oddíly spojovat.

mkfs.btrfs /dev/mydisks/btrfs1 /dev/mydisks/btrfs2 /dev/mydisks/btrfs3 /dev/mydisks/btrfs4
nebo
mkfs.btrfs /dev/mydisks/btrfs* 

Pokud jako parametr programu mkfs.btrfs napíšeme 4 předchozí oddíly, tak se nám vytvoří jeden virtuální oddíl o velikosti součtu všech čtyř oddílů. Mountovat je pak můžeme pomocí kteréhokoli z nich.

mount /dev/mydisks/btrfs3 /mnt/p1 

Vytvoření RAID 0 a 1

Vytvoření RAID pole na úrovni souborového systému není o moc těžší než vytvoření normálního souborového systému. V dalším postupu budeme potřebovat program btrfs-vol.

mkfs.btrfs -m raid0 -d raid0 /dev/mydisks/btrfs1 /dev/mydisks/btrfs2
mkfs.btrfs -m raid1 /dev/mydisks/btrfs1 /dev/mydisks/btrfs2
mkfs.btrfs -m raid10 -d raid10 /dev/mydisks/btrfs* 

RAID můžeme vytvořit zvlášť pro data a zvlášť pro metadata. První řádek vytvoří pro data i metadata raid0 (striping). Druhý řádek vytvoří RAID 1 (mirroring) pro metadata. Třetí řádek vytvoří nad všemi čtyřmi oddíly jeden raid 10 oddíl.

Pokud některý z disků havaruje, btrfs nabízí možnost jednoduché výměny v běžícím stavu. Mějme RAID 1 složený ze dvou disků.

mkfs.btrfs -m raid1 -d raid1 /dev/mydisks/btrfs1 /dev/mydisks/btrfs2
mount /dev/mydisks/btrfs1 / 

Pokud jeden z disků havaruje, stačí přimountovaný oddíl přepnout do degradovaného stavu, špatný disk odpojit a dát nový.

mount -o degraded /dev/mydisks/btrfs2 /
btrfs-vol -r missing /mnt 

Klíčové slovo „missing“ je speciální slovo nahrazující chybějící disk. Tímto ho odstraníme z našeho RAIDu.

Pokud chceme z nějakého disku vytvořit RAID nebo doplnit chybějící disk z existujícího RAID pole, použijeme program btrfs-vol a nový disk jednoduše přidáme.

mkfs.btrfs /dev/mydisks/btrfs3
btrfs-vol -a /dev/mydisks/btrfs3 / 

Rozložení dat po obou discích dosáhneme opět pomocí programu btrfs-vol.

btrfs-vol -b / 

Stejně jako u přidávání oddílů můžeme oddíly odstraňovat.

btrfs-vol -r /dev/mydisks/btrfs1 / 

Pokud se rozhodneme s btrfs používat více zařízení, bude potřeba spustit program btrfsctl s parametrem -a hned po zavedení modulu, který prohledá všechny disky v /dev a pokusí se najít btrfs oddíly. O to by se v budoucnu měly postarat linuxové distribuce samy.

btrfsctl -a 

Zobrazení informací

Pokud máme disků hodně a nemáme o nich přehled, program „btrfs-show“ nám ukáže, co za oddíly s btrfs máme v našem systému.

Porovnávací testy

Pro srovnávací test jsem se rozhodl za protivníka vybrat ext3, kterému má být btrfs konkurencí. Jako testovací nástroj jsem použil bonnie++.

CS24_early

Btrfs

Sekvenční zápis Sekvenční čtení Náhodné čtení
Po znaku Blok Přepis Po znaku Blok Skoků
MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU
100 46813 87.8% 57984 17.7% 42466 5.1% 55964 86.3% 2141497 96.2% 107443.1 99.4%

Ext3

Sekvenční zápis Sekvenční čtení Náhodné čtení
Po znaku Blok Přepis Po znaku Blok Skoků
MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU
100 46174 88.3% 58130 19.4% 39165 4.9% 40445 63.2% 2024635 89.0% 107207.0 96.5%

Zhodnocení výsledků

Z tabulek lze vyčíst, že v zatěžování CPU jsou na tom oba filesystémy podobně i přes to, že ext3 mírně vede při čtení. Při zápisu „po znacích“ je btrfs pomalejší v obou testech. Ve čtení dat a stejně tak v náhodném přístupu (toto spíše závisí na samotném HDD) jsou si opět oba souborové systémy podobné. Výsledky testů nemají velkou vypovídající hodnotu o výkonu btrfs a uvádím je jen pro zajímavost. Btrfs se bude ještě hodně měnit a za půl roku se můžeme dočkat úplně jiných čísel.

Závěr

Brtfs se mi opravdu zamlouvá, ale vývoj je na něm ještě znát. Měl jsem problémy s RAIDem, které se mi nepodařilo vyřešit. Stejný problém jsem měl se snapshoty, které se mi vůbec nechtěly vytvořit. Správa oddílů v LVM je mnohem přehlednější, ale btrfs bych tuto vlastnost nezazlíval, protože funguje jinak, má jiné cíle a hlavně LVM2 už tu je s námi několik let a tak je vývoj mnohem dále. Tento souborový systém obsahuje opravdu spousty vlastností, které se dají využít jak na desktopu tak na serveru, takže si svoje místo v linuxových distribucích určitě najde. Oracle trefil s btrfs do černého.

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.