Hlavní navigace

Souborový systém Btrfs: práce se snapshoty

Snapshoty jsou velmi používanou vlastností Btrfs. Je to jedna z funkcí, kterou můžete lehce vyzkoušet. Hodit se vám bude k různým činnostem včetně zálohování. Nejspíš to bude i hlavní důvod, proč chcete začít používat Btrfs.
Josef Jebavý 28. 1. 2020
Doba čtení: 5 minut

Sdílet

Snapshot

Snapshot je obraz/kopie něčeho, co je ve stejném stavu jako byl zdroj při vytvoření snapshotu. I když se pak snapshot změní, stále z původního zdroje vychází nebo by se dalo říci, že na zdroj navazuje. Často se snapshot používá pro vytvoření zmrazeného stavu virtuálního počítače a jeho dat.

Se souborovým systémem Btrfs pomocí snapshotů můžete rychle vytvářet kopie adresářů, která nezabírají žádné místo navíc. Následně můžete se soubory v této kopii běžně pracovat. Až přestanou být data potřeba, snapshot jednoduše smažete.

Se snapshoty lze dále manipulovat pomocí dalších utilit, které vám zefektivní práci. Je proto dobré se seznámit s tím, jak snapshot u Btrfs funguje a co umí. Pro použití snapshotů se předpokládá, že už máte souborový systém Btrfs na disku připraven.

Pojmy

Aby uživatel věděl, co se popisuje, je potřeba se seznámit se základními termíny:

  • subvolume
  • snapshot

Subvolume

Subvolume je součástí souborového systému s vlastní a nezávislou hierarchií souborů a adresářů. Jednou subvolume, kterou určitě na souborový systému Btrfs máte, je i kořenový adresář. Pokud vytvoříte subvolume, při svém vzniku nemá žádný obsah.

Snapshot

Snapshot je také subvolume, ale počáteční obsah sdílí s rodičovskou subvolume. Všechny subvolume/snapshoty jsou vidět i jako adresáře – jsou takovým speciálním bodem v adresářové struktuře. Dalo by se říci, že jsou trochu jako přípojný bod.

Práce se subvolume

Subvolume vytvoříme tak, že se přesuneme do adresáře, který je umístěn na Btrfs a zadáme příkaz:

# cd  /mnt/btrfsbackup
# btrfs subvolume create DATA

Tím se vytvoří subvolume DATA, jejíž obsah je dostupny v adresáři /mnt/btrfsbackup/DATA a zatím je prázdný.

Do adresáře DATA můžete ukládat soubory a průběžně z něho vytvářet snapshoty. Ideální je v názvu snapshotu uvést datum s časem nebo verzi, abychom měli nějaký systém pro rozlišení jednotlivých snapshotů. Vytvoření snapshotu provedete následujícím příkazem:

# btrfs subvolume snapshot /mnt/btrfsbackup/DATA \
/mnt/btrfsbackup/DATA-v2

Takto vytvoříme rychle kopii adresáře s daty a tato kopie nezabírá nic navíc.

Obsah vytvořeného snapshotu je dostupný v adresáři  /mnt/btrfsbackup/DATA-v2.

Asi vás bude zajímat, jaké subvolume vlastně už na souborovém systému Btrfs máte a jak se jmenují. Následujícím příkazem si vypíšete jejich seznam:

# btrfs subvolume list /mnt/btrfsbackup

Výstup příkazu pak může vypadat například takto:

ID 10055 gen 93010 top level 5 path JEBAVY.EU
ID 10056 gen 93011 top level 5 path VODA
ID 10058 gen 93022 top level 5 path DATA
ID 10060 gen 93022 top level 10058 path DATA/test

Tyto informace naznačují strukturu subvolumů.
ID je unikátní identifikátor subvolume.
Top level 5 mají všechny subvolume, které jsou v kořenovém adresáři, protože 5 je ID kořene souborového systému Btrfs.
Čili číslo top level udává, v kterém subvolume je nová subvolume umístěna.
Hodnota gen se navyšuje se změnami v dané subvolume.

Subvolume/snapshot můžete smazat tímto příkazem:

# btrfs subvolume delete MYSUBVOL

Operace mazání je velmi rychlá. Provedení je z pohledu uživatele/OS atomické. Souborový systém totiž jen označí danou subvolume za smazanou. Samozřejmě následné nízkoúrovňové operace na úrovni souborového systému provádí kernel na pozadí běhu operačního systému.

To je možné pozorovat, pokud smažete více větších subvolume. V takové situaci k navýšení uvolněného místa nedojde okamžitě, ale chvíli to trvá a volné místo roste postupně.

Sdílení bloků

Jednotlivé snaphoty sdílejí nezměněné bloky. Příklad je na obrázku – na souboru o třech blocích byl blok č.1 nahrazen blokem č.4, blok č.2 a č.3 zůstaly stejné.


Tato změna nastala mezi snapshoty snapshot 1 a snapshot 2. Byl změněn soubor, který se skládal ze třech bloků, přičemž jeden blok byl změněn. K dispozici jsou tak dva rozdílné soubory a na disku zabírají pouze místo o velikosti jednoho souboru + změna. V případě malých změn na velkých souborech, je tak možno držet velkou historii souborů, aniž by to výrazně ovlivnilo zabrané místo na disku.

Připojení subvolume

Jednotlivé snaphoty můžete připojovat i do adresářové struktury. Která subvolume se má připojit, se definuje pomocí parametru subvol.Zápis v /etc/fstab  může vypadat například takto:

UUID=525820fd-b8a6-4927-b943-4dca26452444 /home btrfs subvol=HOME 0 0

Subvolume s názvem HOME, která je v kořeni daného souborového systému Btrfs, se připojí do adresáře  /home.

Výhodou je, že jednotlivé subvolume můžete připojit s různými parametry připojení. Což například v případe web serveru může být parametr noexec, který zabraní spouštění programů a skriptů, které se nachází v daném místě toho konkretního připojeného bodu. Ve výsledku to zvyšuje bezpečnost, protože to útočníkovi komplikuje situaci. Konkrétně: pokud by se útočníkovi na server podařilo nahrát zákeřný kód, tak ho nespustí.

Klasické souborové systémy mají pevně danou velikost dle velikosti diskového oddílu. Jednou z možností, jak tuto pevnou velikost řešit, je používat LVM. Je potřeba na to však myslet předem a umět s LVM manipulovat.

Souborový systém Btrfs a ani subvolume nemá určenou žádnou velikost a tak může růst až do velikosti disku – dokud vám disk stačí nebo nenarazíte na kvóty. Vlastně můžeme dokonce říct, že dokáže růst bez omezení, protože místo můžete průběžně navyšovat připadáváním disků, a to i za chodu.

Takže jako u klasického disku nemusíte řešit dilema, na jak velké oddíly disk rozdělit. Se souborovým systémem Btrfs potřebné dodatečné úpravy provedete velice jednoduše.

Použití

Snapshoty můžete používat k vytváření kopií dat, například při vývoji, testování, pro kontejnery virtuálních strojů. Ostatně pokud souborový systém Btrfs již používáte, Docker toho bude automaticky také využívat.

Snapshoty se výborně hodí na velmi efektivní zálohování. Díky subvolume, můžete bootovat zálohu vašeho OS nebo dokonce jinou distribuci a vše mít přitom stále na jednom disku i oddíle. Všechny tyto možnosti použití si popíšeme postupně v dalších článcích.

Hackinbg

Pokud máte nějaký zajímavý nápad, jak snapshoty využít, nebojte se podělit s ostatními v diskusi.

V tomto článku jsem vám ukázal jak využít dalších funkci – snapshoty/subvolume, kterou souborový systém Btrfs má. Pokud vám začne docházet místo na disku nebo budete chtít redundanci, tedy provozovat RAID, poradím vám v dalším díle seriálu.