Souborový systém Btrfs

3. listopadu 2013

Souborový systém (filesystem) je něco bez čeho se při ukládání dat neobejdeme. Běžného uživatele samozřejmě souborový systém vůbec nezajímá dokud počítač funguje. Ti zkušenější vědí, že tam něco takového mají, často se to jmenuje FAT nebo NTFS, ti opravdu zkušení znají i další filesystémy. Zasvěcený uživatel ví, že souborový systém je velice důležitá část operačního systému, a jelikož slouží k ukládání/načtení dat, tak jakýkoli problém a nebo výhoda silně ovlivňuje funkčnost celého systému.

Různé souborové systémy

Ten kdo řeší jaký vybrat disk, by měl zároveň řešit jaký vybere souborový systém, bohužel však neřeší. Souborový systém FAT (FAT32) je velmi zastaralý. Je nevhodný i na výměnná media jako jsou SDkarty a USB flash paměti, ale zde se bohužel díky Windows stále používá. S příchodem platformy NT Microsoft přinesl souborový systém NTFS, který se následně rozšířil s verzí Windows XP. Byl to od Microsoftu slušný pokrok oproti FAT, ale na druhou stanu je smutné, že do dneška jeho funkce neumí uživatelé Windows využít. Ale i NTFS už je zastaralý a nemá takové schopnosti jako nové Linuxové filesystémy. Sice se říkám Linuxové, ale spousta jich byla primárně vyvinuta pro různé unixové systémy, avšak i na Linux byly portovány. Na Linuxu je asi nepoužívanější filesystém ext (aktuálně verze 4), hodně používaný je ReiseFS, který už je asi na ústupu. Další filesytémy jsou například XFS nebo mnou používaný JFS. Tyto filesystémy jsou moderní, výkonné, stabilní a byly navrženy tak, aby uživatel v budoucnosti nenarazil na jejich limity. Kvůli mobilním zařízením a flash diskům, které se svou funkčností liší od běžných disků, vznikly i další nové filesystémy, které byly speciálně navržené pro flash paměti. Jako hlavní příklad se kterým mám zkušenosti uvedu JFFS.

Novinky u filesystémů

Ale je zbytečné stát na místě. Další nové myšlenky u filesystému v reálném nasazení přinesl Sun (dnes Oracle) se svým ZFS. V Linuxu je však jeho použití z licenčních důvodů problémové a obdobný filesystém nebyl pro Linux ani jiný OS. Proto vznikl filesystém Btrfs. Schopnosti Btrfs jsou široké umí snapshoty a používá COW. Mě však zaujalo to, že je optimalizován pro práci jak pro klasické rotačním disky tak pro flash disky, RAID je implementovat přímo ve filesystému (zatím jen RAID0 a RAID1) a pro mě to nejzajímavější, že provádí kontrolní součty nad jednotlivými bloky dat.

Nekvalita disků

malá odbočka o discích

Poslední dobou jde kvalita disků dolu a moje důvěra v ně je pramalá.
Se zvyšující kapacitou a tím zvyšující se hustotou dat roste i potenciální problém s diskem. Na discích, také odjakživa dochází ke skryté degradaci dat. Prostě nic není trvalé, vše mění se... Sami disky provádí kontrolní součty a tak jsou schopny data opravit a problém pak mohou nahlásit. Ne vždy se však oprava zdaří a v takovém případě může být příslušný soubor nenávratně poškozen. Tyto kontroly provádí firmware disku a informace o tom zaznamenává. Toto obstarává S.M.A.R.T.. Ale ne vždy je S.M.A.R.T. spolehlivý. Dokonce jsem narazil na informaci, že některé disky výrobce Western Digital tyto problémy vyřeší skrytě. V případě, že se mu blok nepovede opravit, tak vrátí prázdný blok dat a o vzniklém problému disk vůbec neinformuje.
S diskem můžou být i jiné problémy, které ale nemusí způsobovat sám disk. Problém může být v jiné části hardwaru počítače, například IDE/SATA řadiči, špatný kabel, nebo chyba softwaru.

Já aktuálně narážím na problém, že po kontrole integrity RAIDu1 se ukázalo, že některé bloky nesouhlasí, ale nedá se v podstatě zjistit, které bloky to jsou a ke kterému souboru náleží. V případě použití RAID1 a Btrfs, který provádí kontrolní součty, to však funguje mnohem lépe. Při přečtení vadného bloku dat, je tato vada zjištěna a blok načten z druhého disku a na prvním disku je vadný blok opraven :-). A to je moje motivace proč začít používat Btrfs.

Test Btrfs

Jednoduchý test Btrfs v RAIDu1 a kontrolou dat v reálu.
Provedeno na distribuci Mageia3: Btrfs v0.20-rc1, kernel 3.8.13.4-desktop-1.mga3.

Vytvoření filesystému Btrfs s RAIDem1 na dvou partyšnách různých disků:
mkfs.btrfs -m raid1 -d raid1 /dev/sdb2 /dev/sdc2 -L btrfs2
připojení filesystému:
mount  /dev/sdc2 /mnt/btrfs2/
nakopírování dat:
cp Mageia-4-alpha3-i586-DVD.iso /mnt/btrfs2/
zjištění stavu RAIDu, informace o zaplnění disku a dalších informací:
 
btrfs filesystem df /mnt/btrfs2
btrfs filesystem show
tímto příkazem jsem provedl poškození dat na jednom disku:
 
dd if=/dev/zero of=/dev/sdb2 bs=1MB count=1000
takto provedení čtení dat:
 
cat /mnt/btrfs2/Mageia-4-alpha3-i586-DVD.iso-copy >/dev/null 
Pak v logu kernelu (u mageii /var/log/kernel/info.log ), debian (/var/log/kern.log), můžeme vidět informace o tom, že nesedí kontrolní součty a informaci o umístění daného bloku. A pak informaci o opravách a kterých sektorů se to týká:
 
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671612928 csum 2566472073 private 2778140509
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671617024 csum 2566472073 private 2800729912
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671621120 csum 2566472073 private 1522128662
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671674368 csum 2566472073 private 2448968283
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671752192 csum 2566472073 private 1296282567
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671756288 csum 2566472073 private 2828806260
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671760384 csum 2566472073 private 1593117388
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671764480 csum 2566472073 private 4136347329
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671817728 csum 2566472073 private 2889709515
Oct 25 15:28:49 localhost kernel: btrfs csum failed ino 260 off 671821824 csum 2566472073 private 3334484093
Oct 25 15:28:49 localhost kernel: btrfs bad tree block start 0 18904940544
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 674168832 (dev /dev/sdb2 sector 1849600)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 674172928 (dev /dev/sdb2 sector 1849608)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 679321600 (dev /dev/sdb2 sector 1859664)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 671481856 (dev /dev/sdb2 sector 1844352)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 679243776 (dev /dev/sdb2 sector 1859512)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 671485952 (dev /dev/sdb2 sector 1844360)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 679247872 (dev /dev/sdb2 sector 1859520)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 679747584 (dev /dev/sdb2 sector 1860496)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 671490048 (dev /dev/sdb2 sector 1844368)
Oct 25 15:28:53 localhost kernel: btrfs read error corrected: ino 260 off 679751680 (dev /dev/sdb2 sector 1860504)

Nasazení Btrfs

Takže jsem se rozhodl Btrfs nasadit na disk se zálohami a na home partyšnu. Na pártyšnu s daty NE, neboť tam mam RAID5, který Btrfs přímo zatím neumí, je to však již ve vývoji. Aktuální verze v Debianu Wheezy: kernel 3.2.0-4-686-pae, Btrfs v0.19.

Mám v plánu též využít schopnosti Btrfs při zálohování, jak na home partyšně tak disku pro zálohování.
U Btrfs je to složité se zabraným a volným místem, ale je škoda, že i ve výpisu při použití RAIDu1 se velikost celého disku neukazuje správně, ukazuje to součet, tedy jako by tam byl RAID0.

V případě problému se dá na obnovu dat použít utilita btrfs-recover.

Po prvních úspěšných zkušenostech s filesystémem BTRFS ho od roku 2014 nasazuji všude kde je to možné. Jak na oddíl systémový, tak datový i na zálohovací disky. Díky BTRFS tak lze velmi jednoduše a efektivně zálohovat v mžiku jak systém tak data.

další odkazy s informacemi:
abclinuxu - Btrfs
oficiální stránka o Btrfs od Oraclu
beginners-guide-to-btrfs

OpenAlt 2017 - přednáška o BTRFS

Záznam z mé přednášky o Btrfs a zálohování:

Školení

Aby jste svoje IT oddělení posunuly dál, neváhejte se na mě obrátit se žádostí na školení souborového systému BTRFS.

Video s použitím BTRFS

Live stream na téma filesystém BTRFS natočený kamerou Eken H9R:

RAID1 a bloky

Základní implementace RAID1 u souborového systémy Btrfs je, že blok je vždy na dvou discích. Což může být rozdíl oproti tradičním implementacím, kdy v případě použití více disků při použití RAIDu1 je blok vždy na N discích z N. Případě souborového systému Btrfs a základního RAD1 je blok vždy na dvou discích z N.
Pokud má byt blok na více discích jsou k tomu určený další nové implantace RAIDu RAID1C3, RAID1C4 atd..

Poznámky

Microsoft s verzí Windows Server 2012 představil filesystém ReFS, který už je modernější a má umět například snapshoty. Já jsem však expert na Linux a linuxové servery, takže souborový systém ReFS nehodnotím, protože s ním nemám zkušenosti.

Btrfs použvá Synology jako defaultní FS pro NASy. Ale RAID řeší pomocí mdadm.

RadHat odstranil Brfs podporu z jádra své Linuxové distribuce.

phoronix.com: Linux 5.5 SSD RAID 0/1/5/6/10 Benchmarks Of Btrfs / EXT4 / F2FS / XFS

Zajímavý zálohovací nástroj, který používá jako základ souborový systém Btrfs je btrfs-sxbackup a zde je fork btrfs-sxbackup .

Projekt Rockstor používá filesystém BTRFS. Rockstor je software, který udělá z PC NAS. Určitě to bude zajímavá alternativa k Synology, QNAP nebo k FreeNAS. FreeNAS používá ZFS.

Kam dál?

Pokud se chcete dozvědět o souborovém systému BTRFS více, přečtěte si můj seriál jak na souborový systém Btrfs.
Pokud se chce Btrfs naučit ovládat, nůžete se to efektivně naučit na Školení filesystém Btrfs .
Pro konzultace a individuální služby mě neváhejte kontaktovat emailem.

Články na podobné téma

Operační systém GNU/Linux
Jak začít správně používat Docker
Příprava linuxového serveru pro běh webové aplikaci v jazyce Python
Jak řešit špatný výkon sdílených souborů u Dockeru
GitLab - nástroj na správu, verzování, CI/CD a vedení projektů
Instalace Linuxu na dedikovaný server HPE ProLiant DL320e
Jak provést zátěžový test webové aplikace
Proč používat filesystém JFS
Jak bootovat z 4TB disku s GTP pomocí UEFI
Jak nainstalovat operační systém Magei Linux bez DVD mechaniky
Souborový systém Btrfs
Raspberry PI
Jak zprovoznit vzdálené přehrávání přes síť na televizi s DLNA
Upgrade Mandriva Linuxu za běhu
Poznámky ke GNU/Linux
WINE - spouštíme programy pro Windous pod Linuxem
Yocto Project: Build vlastního operačního sytému pro embedded zařízení
Lenovo ThinkPad X1 Carbon: zprovoznění LTE modemu EM7544
Docker a Cron
Virtualizace Proxmox