Hlavní navigace

Souborový systém Btrfs: změny za chodu a práce s RAID

Používáte již souborový systém Btrfs a mění se vaše potřeby? Potřebujete zvýšit dostupnost systému pomocí RAIDu nebo navýšit kapacitu? Není problém. S Btrfs změny uděláte jednoduše a navíc bezvýpadkově.
Josef Jebavý 3. 2. 2020
Doba čtení: 7 minut

Sdílet

Doba se rychle mění a tak se mění i potřeby. Přitom nároky rostou, jak na možnosti tak na dostupnost IT služeb. Souborový systém Btrfs je moderní souborový systém, který má řešit dnešní i budoucí požadavky, proto přináší možnosti jak měnit jeho stav, abyste mohli zajistit požadavky a potřeby uživatelů, které průběžně přicházejí.

Co můžeme měnit za chodu

  • přidat disk
  • odebrat disk
  • změnit způsob ukládání dat – např přechod na RAID 1
  • atd.

Disky

Hardware je relativně neměnná část IT technologií. Sice můžeme změnit hardware, ale je to složitá akce, která často znamená i odstávku systému. Pokud jde o disky a server nemá hotswap řadiče, bude potřeba dokonce server vypnout. V případě velkého množství dat a potřeby jejich přesunu může být kopírování velmi časově zdlouhavé.

Samozřejmě dobrým návrhem řešení a promyšlením změn jste schopni zkrátit dobu odstávky a hlavně předejít případným neočekávaným událostem. Pokud očekáváte změny v rozdělení nebo počtu fyzických disků, doporučuje se v Linuxu použít LVM. Pokud však používáte souborový systém Btrfs, máte možnost změny zajištěnu.

Přidání disku

Níže popisované změny je možno dělat za běhu operačního systému, kdy je daný souborový systém připojen a používán.

Přidání disku k existujícímu souborovému systému provedete následujícím příkazem:

# btrfs device add /dev/sdX /mnt/btrfs

Disk /dev/sdX bude přidán k souborovému systému, který je připojen do adresáře /mnt/btrfs. Následně už bude disk používán a dle situace se na něj již budou ukládat data.

Odebrání disku

Disk se odebírá pomocí příkazu:

# btrfs device delete /dev/sdX

Předpokládá se, že souborový systém Btrfs obsahuje další disky a je na nich dostatek místa, aby se tam mohla přesunout data z odebíraného disku. Po zadání tohoto příkazu se data z odebíraného disku překopírují na zbylé disky a po dokončení změn je možné disk fyzicky odstranit z počítače.

RAID

RAID je způsob, jak zvýšit dostupnost systému. Pokud chcete mít systém funkční i v případě selhání disku, mějte dva disky v módu RAID 1. Pak nemusíte čekat na obnovu ze zálohy. RAID 1 sám však není nástroj k zálohování!

Klasický způsob použití disků v RAIDu a běžného souborový systému vypadá takto:


Synology.com

Klasický RAID

Barevně jsou naznačeny vrstvy jednotlivých technologií. Jak vidíte, nad RAIDem může být libovolný souborový systém, nejen EXT4, ale i další včetně souborového systému Btrfs. Klidně by mezi tím mohla být i LVM jako další vrstva.

Ať už máte softwarový RAID (v Linuxu mdadm) nebo hardwarový, princip je stejný: Máte sadu několika disků, nad kterými je vytvořen RAID a v systému už vidíte abstrakci – tedy místo více disků pouze jeden disk.

Změny na tomto abstraktním disku RAID technologie dle typu RAIDu propíše na fyzické disky. Z pohledu souborového systému je to transparentní věc a pokud RAID funguje, nemusíte vůbec řešit, jak je implementován, či o jaký typ RAIDu se jedná. Typicky pokud je RAID harwarový, řeší jeho nastavení firmware, který je přímo na řadiči. Operační systém o jeho činnosti vůbec nic neví.

V případě Btrfs RAIDu však souborový systém přímo přistupuje ke konkrétním diskům a jeho blokům. Ví, kolik disků je použito, jak jsou disky velké a kde přesně na nich jsou data, metadata a informace týkající se RAIDu. Díky tomu může souborový systém Btrfs tyto informace využít k efektivnější práci s daty.

Názorný obrázek ukazuje, jak vypadají vrstvy úložiště v případe použití Btrfs RAIDu:


Synology.com

Btrfs RAID

Jak vidíte na tomto obrázku, jedna vrstva chybí (modrá) a vrstva Btrfs (červená) nyní obsahuje i RAID. Souborový systém Btrfs v tomto vyobrazení zajišťuje RAID sám a přitom sám přistupuje přímo k fyzickým diskům.

Právě díky tomu ví, kolik disků je použito, jak jsou velké a také ví, na kterém disku a kde přesně jsou uložena jaká data. Následně z tohoto plynou výhody, které Btrfs RAID má a můžete je využít.

Výhody Btrfs RAIDu

Výhod při použití Btrfs RAIDU je mnoho a určitě je všechny oceníte. Plynou jednoduše z toho, že jednotlivé vrstvy nejsou striktně oddělené jako v případě řetězení běžných blokových zařízení.

Synchronizace

Jednou z výhod Btrfs RAIDu je rychlejší synchronizace. Souborový systém ví, kde jsou data a tak při synchronizaci nemusí kopírovat celý disk, ale jen data. Rozdíl v rychlosti bude znát tím víc, čím víc bude prostor disku nevyužitý.

Například synchronizace pole RAID 1, které bude reálně zaplněno jen z 10 % tak bude trvat jen desetinu doby proti klasické implementaci RAIDu.

Automatická oprava dat

Díky kontrolním součtům souborový systém Btrfs rozpoznává vadné bloky. Pokud je použit RAID 1,  automaticky se vadné bloky přepíšou funkčními bloky z druhého disku. Pokud chcete vědět víc, přečtěte si článek s popisem toho, kdy dochází automaticky k opravě dat u Btrfs s RAID 1.

Použití disků různé velikosti

Btrfs umožňuje použít do RAIDu disky různé velikosti a přitom využít i místo, které u ostatních disků je nad rámec disku nejmenšího.Je tak například možné složit pole RAID 1 o velikosti 3 TB z jednoho disku o velikosti 3 TB a dvou disků o velikosti 1,5 TB. Znázornění výsledného RAIDu je na tomto obrázku:


RAID z různě velkých disků

V případě RAID 1 budou data, která jsou uložena na velkém disku, uložena vždy i na jednom z malých disků. Jakmile bude mít RAID další disky, souborový systém Btrfs automaticky začne ukládat data i na nově přidaný disk.

Je možno například postavit RAID se dvěma disky různé velikosti, které jsou po ruce, a teprve při blížícím se zaplnění dokoupit druhý disk. Ano, proti typické implementaci RAID 1 není datový blok na všech discích, ale vždy na dvou.

Vytvoření RAID 1

Nejjednodušší je vytvořit Btrfs rovnou v módu RAID 1 následujícím příkazem:

# mkfs.btrfs -m raid1 -d raid1 /dev/sda2 /dev/sdc2 -L btrfshome

Tímto příkazem se na discích /dev/sda2  a /dev/sdc2 vytvoří Btrfs v módu RAID 1, který bude pojmenován btrfshome. Jméno (label) btrfshome můžete následně použít pro identifikaci pro připojení v souboru  /etc/fstab.

Také je možné za běhu operačního systému a existující souborový systém Btrfs zkonvertovat do RAIDu. Ve výchozím stavu je souborový systém Btrfs vytvářen v módu single, konverze na RAID 1 se provede následujícím příkazem:

# btrfs balance start -f -sconvert=raid1 -mconvert=raid1 -dconvert=raid1 /mnt

Provedení příkazu může trvat delší dobu, záleží na množství uložených dat. Po jeho doběhnutí pak souborový systém Btrfs funguje jako RAID 1. Z příkazu je patrné, že se převádí jak metadata, tak samotná data. Můžete totiž například mít souborový systém ve stavu, kdy jen metadata budete mít v RAID 1 a data v módu single.

Samozřejmě se předpokládá, že souborový systém Btrfs obsahuje alespoň dva disky a má na nich dostatek místa, tedy rozhodně je zabráno výrazně méně než 50 %. Ideální a zároveň typické řešení při běžné situaci je, když k existujícímu Btrfs připadáme další stejně velký disk a následně provedeme konverzi na RAID 1.

Při bootu operačního systému se najdou všechny oddíly obsahující souborový systém Btrfs. Ručně to lze udělat pomocí příkazu:

# btrfs device scan

RAID se automaticky sestaví a použije ve chvíli, kdy připojíte jeho libovolný disk/oddíl.

Samozřejmě Btrfs je možno mít i jako souborový systém na kořenovém oddíle a bootovat z něho.
Například zavaděč GRUB2 to umí, ale o tom až v některém dalším článku.

Odebrání disku z RAIDu

Pokud potřebujete disk z RAID odebrat, je to možné i za chodu. Typicky se tak stává při navyšování kapacity pole, kdy jste už předtím přidali výrazně větší disk a teď víte, že bude v poli dostatek místa pro data, která se mají přesunout z odebíraného disku.

Odebrání disku z Btrfs RAID můžete provést jedním příkazem, jak bylo zmíněno výše.

Pokud byste měli problém v tom, že nemáte žádný volný kabel/slot pro disk a nejdříve tedy musíte vyndat disk z počítače, proveďte následující postup a sadu příkazů:

1. RAID označte jako degradovaný:

# mount -o degraded /dev/sdb3 /mnt/sdb3

2. Vyměňte fyzicky disk ze serveru a vložte nový.Přidejte nový disk k Btrfs:

# btrfs device add /dev/sdc1 /mnt/btrfsraid/

3. Tímto příkazem odeberte chybějící disk, který už není v počítači:

# btrfs device delete missing /mnt

4. Po takovýchto změnách je ještě potřeba pustit vybalancovaní dat souborového systému Btrfs. To provedete následujícím příkazem:

# btrfs balance /btrfsraid

Po těchto úkonech máte opět Btrfs RAID v plně funkčním stavu s novým diskem.

Obdobný postup typicky použijete i v případě, že disk přestane fungovat, například při hardwarové poruše.

RAID 5

Aktuální stav implementace RAID 5 je takový, že je označena za vývojovou a nedoporučuje se nasazení v produkci. RAID 5 je tedy v Btrfs určen zatím pouze pro testování. Nicméně postupně se stabilita implementace posouvá.

Já osobně jsem RAID 5 implementaci v souborovém systému Btrfs nezkoušel. O to víc doufám, že se nám se zkušenostmi v diskusi pochlubí některý ze čtenářů.

Po zprovoznění RAIDu začněte zálohovat

Více a podrobnosti o Btrfs v dokumentaci. Další informace o použití více disku s Btrfs

Implementace RAIDu přímo v souborovém systému přináší nové možnosti, které určitě ocení každý správce linuxových serverů. Proto pokud spravujete linuxové servery, máte NAS nebo úložiště dat na desktopu, doporučuji vám začít Btrfs RAID používat.

Jelikož už máte připravený souborový systém Btrfs a RAID 1, v dalším díle seriálu vám popíšu, jak využít jeho funkce a výhody k efektivnímu zálohování.