Snímky jsou důležité, ať už provozujete jednoduchý virtuální počítač na domácím počítači, nebo se jedná o podnikovou databázi, která je neustále aktualizována a upravována. Mít snímky, tedy kopii celého souborového systému, jak vypadal v daném časovém období, je důležité.
Lidé často ztrácejí přehled o tom, kde se stala chyba, byl smazán soubor a nikdo si nevšiml, že je pryč. Uplynulo několik záloh a nyní zjistíte, že ve všech dostupných zálohách za posledních 5 týdnů chybí důležitý soubor. V tomto tutoriálu se podíváme, jak používat snímky systému ZFS, a dotkneme se různých zásad vytváření snímků, které by fungovaly optimálně, a to jak z hlediska využití prostředků, tak z hlediska obnovitelnosti.
Systém ZFS má jak přehled o souborech a adresářích na vysoké úrovni, tak rozumí tomu, jak se data na disk zapisují. Při fyzickém zápisu dat na disk se tak děje v diskrétních blocích. Typická velikost bloku může být až 1 MB, ale výchozí velikost je obvykle 128 KB. Nyní to znamená, že každá změna (čtení, zápis nebo mazání) proběhne v diskrétních blocích.
Mezinformace copy-on-write zajišťuje, že kdykoli je blok změněn, místo přímé změny bloku se vytvoří kopie bloku s požadovanými změnami provedenými v novém bloku.
To je užitečné zejména v případech, kdy dojde například k výpadku napájení a systém se zhroutí, zatímco se na disk zapisovala nová data. Pokud se to stane v tradičním souborovém systému, vaše soubory se poškodí nebo v nich zůstanou díry. Pokud však používáte systém ZFS, můžete sice přijít o probíhající transakci, protože se tak dělo, ale poslední platný stav vašich souborů zůstane nedotčen.
Snímky se na tuto funkci také spoléhají, a to docela výrazně. Když pořídíte snímek dané sady dat („sada dat“ je v systému ZFS výraz pro souborový systém), systém ZFS pouze zaznamená časové razítko, kdy byl snímek vytvořen. To je vše! Žádná data se nekopírují a nespotřebovává se žádné další úložiště.
Pouze když se souborový systém změní a data v něm se liší od snímku, začne snímek spotřebovávat další úložiště. Pod kapotou se děje toto – Namísto recyklace starých bloků v průběhu času si je systém ZFS ponechává. Tím se také zlepšuje využití úložiště. Pokud vytvoříte snímek 20GB datové sady a tu a tam změníte jen několik textových souborů, může snímek zabrat jen několik MB místa.
Vytváření snímků
Pro demonstraci použití snímků začněme se sadou dat, která obsahuje spoustu textových souborů, jen aby to bylo jednoduché. Virtuální počítač, který budu pro ukázku používat, je vybaven systémem FreeBSD 11.1-RELEASE-p3, což je nejnovější stabilní verze dostupná v době psaní tohoto článku. Kořenový souborový systém je ve výchozím nastavení připojen na zroot pool a spousta známých adresářů jako /usr/src, /home, /etc jsou všechny vlastní datové sady připojené na zroot. Pokud nevíte, co pool (nebo zpool) v řeči ZFS znamená, bylo by dobré si o tom něco přečíst, než budete pokračovat.
Jedním z mnoha souborových systémů nebo datových sad, které jsou ve FreeBSD standardně dodávány, je: zroot/usr/src
Chcete-li se podívat na jeho vlastnosti, spusťte následující příkaz.
:~$ zfs list zroot/usr/src
Jak vidíte, využívá 633 MB úložného prostoru. Obsahuje celý strom zdrojových kódů operačního systému.
Provedeme snímek zroot/usr/src
:~$ zfs snapshot zroot/usr/
Symbol @ slouží jako oddělovač mezi datovou sadou a názvem snímku, což je v našem případě snímek1.
Nyní se podíváme na stav snapshotu při jeho vytváření.
Spuštěním příkazu:
zfs list -rt all zroot/usr/src
vidíte, že snapshot při svém vzniku nepoužívá žádné místo navíc. Není zde ani žádné volné místo, protože se jedná o datovou sadu určenou výhradně pro čtení, samotný snímek nemůže růst, měnit se ani zmenšovat. A konečně není nikde připojen, čímž je zcela izolován od dané hierarchie souborového systému.
Nyní odstraníme adresář sbin v /usr/src/
:$ rm /usr/src/sbin
Podíváme-li se nyní na snapshot, zjistíme, že se zvětšil,
To je očekávané, protože zde funguje mechanismus kopírování při zápisu a mazání (nebo úprava) souborů vedlo k tomu, že více dat bylo přiřazeno pouze snapshotu, a nikoli skutečně používané datové sadě.
Všimněte si sloupce REFER ve výše uvedeném výstupu. Uvádí množství přístupných dat v datové sadě, zatímco sloupec USED pouze ukazuje, kolik místa je na fyzickém disku obsazeno.
Mechanismus kopírování při zápisu (Copy-On-Write) systému ZFS často poskytuje tyto neintuitivní výsledky, kdy by se po odstranění souboru zdálo, že je nyní využíváno více místa než dříve. Nicméně po přečtení až sem víte, co se vlastně děje!
Než skončíme, obnovíme sbin ze snapshotu1. K tomu stačí spustit:
:/usr/src$ zfs rollback zroot/usr/
Snapshotting Policy
Další otázka, kterou je třeba si položit, zní – Jak často chcete snímky pořizovat? I když se to může v jednotlivých podnicích lišit, vezměme si příklad velmi dynamické databáze, která se každou chvíli mění.
Na začátku byste začali pořizovat snapshoty přibližně každých 6 hodin, ale protože se databáze často mění, brzy by se stalo neúnosným ukládat všechny četné vytvořené snapshoty. Dalším krokem by tedy bylo pročištění snapshotů starších než řekněme 48 hodin.
Nyní by byl problém obnovit něco, co bylo ztraceno před 49 hodinami. Abyste tento problém obešli, můžete si ponechat jeden nebo dva snímky z této 48hodinové historie a nechat je po dobu jednoho týdne. Vyčistěte je, až budou starší než tato doba.
A pokud můžete tímto způsobem pokračovat, mohli byste nacpat snapshoty až k samotné genezi systému, jen v klesajícím pořadí četnosti. Nakonec bych chtěl upozornit, že tyto snapshoty jsou POUZE PRO ČTENÍ, což znamená, že pokud se nakazíte ransomwarem a všechna vaše data budou zašifrována (upravena). Tyto snímky by s největší pravděpodobností zůstaly nedotčené.