Hlavní navigace

Souborový systém Btrfs: kontrola dat a pokročilé použití

Josef Jebavý

Vzhledem k tomu, že souborový systém Btrfs má mnoho nových funkcí, je vhodné se mu trošku kouknout pod kapotu, jak s ním hlouběji zacházet v některých specifických případech. Také vás určitě bude zajímat jaké jsou možnosti obnovy dat při použití souborového systému Btrfs.

Doba čtení: 5 minut

Sdílet

Balancování dat

Nástroj ke správě souborového systému Btrfs má implementovanou funkci balance, která rovnoměrně rozmístí data po jednom nebo více discích. Právě tato funkce byla použita v dřívějším článku o Btrfs při změně módu ze singl na RAID1, kdy data, po vykonání příkazu, mají kopii vždy na dvou či více různých discích.

Příkaz balance spustíte takto:

# btrfs fi balance status /home/multi/data

Provedení může trvat dlouho, v případě velkých disků opravdu hodně dlouho. Pokud byste zrovna potřebovali většinu IO výkonu pro něco jiného, můžete právě prováděný balance vypnout:

# btrfs fi balance cancel /home/multi/data

Kontrola dat na souborovém systému Btrfs

Následujícím příkazem spustíte scrub, což je proces, kdy se bude souborový systém Btrfs kontrolovat:

# btrfs scrub start /mnt/MYFILES

Při provádění tohoto úkonu jsou přečtena všechna data a metadata ze všech disků a jsou zkontrolovány kontrolní součty všech bloků. Při nalezení vadného bloku je automaticky tento blok opraven, a to v případě, že je dostupná kopie bloku, která je v pořádku.

Informace o chybách můžete číst v systémovém logu nebo v statusu chyb Btrfs. K zobrazení informací o chybách slouží příkaz btrfs device stats,  viz druhý článek o zprovoznění souborového systému Btrfs. Běh scrubu trvá dlouho, vzhledem k tomu, že jsou čtena všechna data.

Repair tools

Nic není dokonalé, každý software má chyby a i hardware obsahuje software či dokonce mechanickou závadu. Proto je dobré znát nástroje a možnosti opravy v případě, že nastane problém.

Kontrola

Souborový systém Btrfs má již utilitu fsck, tedy konkrétně příkaz  fsck.btrfs. Rovnou však použijte funkci, kterou poskytuje příkaz btrfs tedy btrfsck.

Příkaz btrfsck je totéž co btrfs check. Tento příkaz vám zkontroluje integritu souborového systému Btrfs, který musí být pro provedení kontroly odpojen. Také zkontroluje konzistenci stromu souborového systému a položky, které jsou v něm připojeny.
Kontrolu spustíte následovně:

# btrfsck /dev/deviceX

Toto je jeden z mála příkazů, který se u Btrfs provádí, když je souborový systém odpojen. Většinu úkonů však můžete dělat během obvyklé práce, viz článek Btrfs RAID a změny za chodu.

Oprava

Pokud budete chtít, aby se při objevení problému rovnou provedl pokus o opravu, použijte přepínač –repair. Příkaz pak bude vypadat takto:

# btrfs check –repair /dev/deviceX

Pro podrobnosti, jaké varianty použití umožňuje tento příkaz, nahlédněte do manuálové stránky.

Obnova

Pokud bude souborový systém v tak špatném stavu, že s ním již raději nechcete dále pracovat a jen potřebujete přečíst data, použijte příkaz btrfs restore. Pomocí této funkce vykopírujete data, čímž obvykle všechna nebo většinu dat zachráníte.

Taková situace ovšem nastane jen těžko, protože už od minulého dílu jistě zálohujete.

Nástroj btrbk

Pokud chcete použít výhody a funkce souborového systému Btrfs k zálohování, ale nechce se vám psát vlastní skripty, koukněte na nástroj btrbk. Tomu stačí pouze přednastavit jednoduchý textový konfigurační soubor a on již zálohuje za vás.

Pokud budete mít počítačů více, určitě můžete využít i kombinaci s diskem po síti s DRBD. Zajišťovat to může ve velkých firmách například projekt CEPH. Takové realizace zálohování jsou však mimo rozsah tohoto článku.

Grafický nástroj pro snapshoty

Snapper-gui je grafické uživatelské rozhraní pro nástroj zvaný snapper, který slouží pro správu snapshotů souborových systémů v operačním systému GNU/Linux. Pomocí tohoto nástroje můžete používat snapshoty a pak se k nim vracet a tím pádem tak udržovat změny/historii souborů.

Právě z uživatelského pohledu velmi zjednodušeně nabízí snapper-gui uživatelům root a non-root vytvářet snapshoty a prohlížet starší verze souborů a vracet se k nim. V současné době tento nástroj umí pracovat se souborovým systémem Btrfs a ext4 a tenkovrstvými LVM svazky.

Databáze

Relační databáze při výchozím nastavení souborového systému Btrfs nemusí mít pří zátěži takový výkon jako při použití tradičních souborových systémů. Může proto být výhodné vypnout některé funkce.

Podstatné je vypnout COW. Pokud to není možné ovlivnit aplikací, je možno použít následující příkaz na adresáři:

# chattr +C directory

Nebo můžete COW vypnout pro celý svazek/subvolume pokud v /etc/fstab  uvedete parametr nodatacow.

Pokud budete chtít používat snapshoty k zálohovaní databáze, je to možné. Dokonce je to ideální prostředek, protože je to jednoduché a hlavně rychlé. Podstatné je mít je na jedné subvolume, a tím pádem i na vytvořeném snaphotu, data i log databáze. Tím zajistíte, že se snapshot provede atomicky nad logem i daty a při obnově se databáze může sama dostat do posledního konzistentního stavu.

Rychlost vytvoření snapshotu i v případě databáze o velikosti několika GB je okamžitá. Následné odesílání po síti na jiný stroj/úložiště (a tedy i tím stráveny čas) nás již netrápí. Navíc pokud je na obou strojích souborový systém Btrfs a k odesílání snapshotů používáte příkaz send/receive, odesíláte pouze změny a tím pádem šetříte místo na zálohovacím stroji. Což v případě tradičního použití – tedy každodenních dumpů celé databáze - je výrazný rozdíl co do obsazeného místa.

Pokud aplikace s databází nepracuje ideálně a nepoužívá tedy správně transakce nebo to řeší na jiné úrovni, může v průběhu dlouho trvajícího dumpu databáze také dojít k nekonzistenci dat. Při použití souborového systému Btrfs, opět díky rychlosti vytváření snapshotu, toto riziko výrazně klesá.

Defragmentace

Od btrfs-progs verze 3.12 je možno spouštět rekurzivní defragmentaci. Defragmentaci spustíte následujícím příkazem:

# btrfs filesystem defragment -r /path/

Jen nevím, k čemu to v dnešní době SSD disků bude prospěšné. Ale u rotačních disků to bude mít smysl, obzvlášť proto, že právě COW, z principu fungování, způsobuje fragmentaci dat.

Komprese

Komprese je ve výchozím stavu zapnuta. O kompresi dat rozhoduje sám souborový systém podle vlastní heuristiky. Pokud chcete, aby data v konkrétním adresáři byla komprimována, použijte následující příkaz:

# chattr +c /var

Jestli a jak mají být komprimována data na celém souborovém systému, můžete ovlivnit zadáním parametru v souboru /etc/fstab. Může v něm být například takovýto zápis:

# /dev/sdaX /  btrfs defaults,compress=choice 0 1

Můžete vybrat z konkrétní typů kompresních algoritmů:

  • lzo
  • zlib
  • zstd

Kde dále potkáte užití Btrfs?

Pokud používáte nějaké další nástroje, které staví na souborovém systému Btrfs nebo máte vlastní postřehy ze zajímavého způsobu použití, určitě napište do diskuze pod článek.

S typickým automatickým využitím souborového systému Btrfs se setkáte, pokud používáte Docker. Ten automaticky na souborovém systému Btrfs využívá snapshoty. I díky Btrfs je práce s Dockerem pohodlnější.

Root obecný tip

Na jiných operačních systémech mají s výkonem souborového systému společně s Dockerem problém, kvůli čemuž pak uživatelé často přecházejí na Linux. Přitom analýzou problému a úpravou použití, by byl výkon sdílení souborů u Dockeru řešitelný.

Odkazy na podrobné zdroje

Btrfs je samozřejmostí

Souborový systém Btrfs již máte v ruce, takže je na čase ho začít používat všude, tedy i na kořenovém/systémovém oddíle vašeho počítače. Jak na to se dozvíte v dalším článku našeho seriálu.