Dříve se zálohovalo nástrojem tar, pak přibyly různé další nástroje. Výborný je např Rsync, jeho nadstavba rdiff-backup nebo se používají nástroje typu klient-server, například Bacula. Nyní se souborovým systémem Btrfs můžete zálohovat jednodušeji a navíc i efektivněji.
Co se dozvíte v článku
Souborový systém Btrfs má mnoho funkcí a díky snapshotům ho lze využít k zálohování. Díky implementaci, kdy se sdílí datové bloky, bude navíc takové zálohovaní velmi efektivní z hlediska zabraného místa na disku.
Když využijete všechny možnosti a zálohování navrhnete a implementujete dobře, dosáhnete toho, že budete mít zálohy, které budou zabírat místo jako přírůstkové, přitom je budete moci promazávat jednotlivě jako plné zálohy.
Data tak budou přímo přístupná a budou mít stejnou adresářovou strukturu, jako je má uživatel/aplikace na zálohovaném počítači. Případná obnova byť i jediného souboru se tak stane radostí.
Jednoduché zálohování
Pokud máte vytvořenou subvolume /mnt/btrfsbackup/ZALOHY
, můžete do tohoto místa ukládat data. Můžete také průběžně z této subvolume vytvářet snapshoty, kdy každému nově vytvořenému snapshotu dáte do názvu i aktuální datum a čas.
Zálohy pomocí snapshotů můžete vytvářet tímto skriptem:
# DATE=`date +%Y-%m-%d_%Hh` # btrfs subvolume snapshot /mnt/btrfsbackup/ZALOHY \ /mnt/btrfsbackup/ZALOHY-${DATE}
Tím dosáhneme toho, že budeme mít historii adresáře verzovanou. Navíc veškerá historie je přístupná jako soubor a nezměněné verze soubory nezabírají žádné místo navíc. U změněných souborů zabírají místo jenom změněné bloky.
Viz dřívějšek článek Souborový systém Btrfs: práce se snapshotyVyzkoušejte si do adresáře /mnt/btrfsbackup/ZALOHY
nahrát nějaký soubor, udělat snapshot, pak nějaký soubor smazat a udělat snapshot a pak porovnat obsahy původní a vytvořené subvolume /mnt/btrfsbackup/ZALOHY-xxx
.
Zálohy
Jiný případ použití je, pokud budete používat server jako úložiště pro další stroje. Koncové zařízení však nebude nic vědět o souborovém systému Btrfs. Jednotlivá zařízení budou nějakým způsobem data pouze nahrávat na server. Nahrávání dat na server můžete umožnit pomocí protokolu ssh, ftps nebo jiným. Záleží i co budou umět používat koncová zálohovaná zařízení.
Pro každé zařízení vytvoříme subvolume v adresáři /mnt/databtrfs
. Tedy například /mnt/databtrfs/zarizeni1
. Každé zařízení bude do svého adresáře zálohovat data včetně souboru backup
, který bude umístěn v kořeni zálohy. Jednou denně pomoci Cronu server spustí následující skript:
AdrZALOHY=/mnt/databtrfs DATE=‘date +%Y-%m-%d_%Hh‘ for file in ‘ls $AdrZALOHY/*/backup ‘; do dir=‘dirname "$file"‘ if [ -f $file ] ; then rm -f $file touch $dir btrfs subvolume snapshot $dir $dir-${DATE} fi; done
Tento skript zajistí, že bude vytvořen snapshot z dané subvolume, ale to jen v případě, že tam zařízení nahrálo nová data k zálohování. Skript to pozná právě podle souboru backup
, který po vytvoření snapshotu smaže, aby příště opět mohl rozeznat, jestli přibyla nová data k zálohování.
Jedná se o příklad řešení pro nepravidelné zálohování. V takovém případě vytvářet každý den snapshot by bylo nepřehledné a budilo by to mylný dojem, že je zařízení pravidelně zálohováno.
Pokud byste chtěli vyhledávat a promazávat zálohy podle času, kdy byly vytvořeny, je k tomu možné použít běžný příkaz find
. Vzhledem k tomu, že vytvoření subvolume nemění čas změny adresáře, tak právě k nastavení aktuálního času změny je použit ve skriptu příkaz touch
a program find
díky tomu muže dohledat zálohy podle času.
Tímto příkazem se vám vypíší zálohy/adresáře starší 90 dní:
# find /mnt/backup/ -maxdepth 1 -type d -mtime +90 -exec echo
Vyhledání podle stáří můžete zkombinovat se smazáním snapshotů. Skript na smazání záloh starších 90 dní:
# find /mnt/backup/ -maxdepth 1 -type d -mtime +90 -exec btrfs subvolume delete {} \;
Efektivní zálohování mezi dvěma stroji
Ideální řešení je, pokud zdrojový i cílový stroj mají souborový systém Btrfs. Pak můžete využit všech výhod souborového systému Btrfs, rychle zálohovat a přitom šetřit diskovým prostorem.
Právě k zálohování mezi dvěma stroji se souborovým systémem Btrfs využijete funkci send/receive. Abyste ji mohli použít, je potřeba vytvářet snapshoty read-only. K tomu sloučí přepínač r
.
Názorná ukázka pro vytvoření takového snapshotu pouze ke čtení může vypadat takto: Mějme dva souborové systémy Btrfs btrfs1
a btrfs2
. Nejdříve vytvoříme subvolume, která bude sloužit jako úložiště dat, které chceme zálohovat.Přejdeme do btrfs1 a vytvoříme subvolume:
# cd /mnt/btrfs1/ # btrfs subvolume create zaklad
V subvolume vytvoříme soubor a ze subvolume uděláme snapshot.
# btrfs subvolume snapshot -r zaklad backup1
Tento snapshot, a tedy i jeho obsah, budeme chtít zálohovat na jiný souborový systém Btrfs. Pomocí příkazu btrfs send
a receive
to provedeme následujícím příkazem, kdy snapshot backup1
se zkopírujeme z btrfs1
na btrfs2
:
# btrfs send /mnt/btrfs1/backup1/ | btrfs receive /mnt/btrfs2/
Obsah snapshotu na druhém souborovém systému Btrfs vypíšete a tedy zkontrolujete příkazem:
# ls /mnt/btrfs2/ # ls /mnt/btrfs2/backup1
Vzhledem k tomu, že na zdrojovém i cílovém stroji je souborový systém Btrfs, tak při změně souboru se na druhý filesystém Btrfs nekopíruje celý soubor, ale pouze změna – změněné bloky. Což šetří místo a díky tomu se po síti přenáší i méně dat, takže i přenos je rychlejší. Také souborový systém Btrfs přesně ví, co bylo změněno, a proto nemusí trávit čas vyhodnocováním, co bude potřeba zálohovat.
Pokud chceme přenášet pouze změny mezi jednotlivými snapshoty, je potřeba uvést výchozí snapshot, od kterého se příkaz btrfs send
odpíchne. Vytvořme další snapshot:
# btrfs subvolume snapshot -r zaklad backup2
Změny mezi tímto a předchozím snapshotem odešlete následujícím příkazem:
# btrfs send -p /mnt/btrfs1/backup1 /mnt/btrfs1/backup2 \ |btrfs receive /mnt/btrfs2
Takto se přenesou pouze změny mezi snapshotem backup1
a backup2
.
Vyzkoušejme nyní, jak je to s tím efektivním nakládáním s diskovým prostorem. Následujícím příkazem vytvoříme soubor o velikosti 4 GB:
# cd /mnt/btrfs1/zaklad # dd if=/dev/zero of=./file.bin bs=1MB count=4000
Vytvořme snapshot backup3
:
# btrfs subvolume snapshot -r zaklad backup3
Přenesme změny nového snapshotu na druhý souborový systém Btrfs následujícím příkazem:
# btrfs send -p /mnt/btrfs1/backup2 /mnt/btrfs1/backup3 \ |btrfs receive /mnt/btrfs2
Přenos 4 GB dat bude chvíli trvat a po něm soubor mírně upravte. Můžete ho otevřít v nějakém editoru a upravit jeden bajt, nebo následujícím příkazem na konec souboru připíšete jeden znak:
# echo "a" >> /mnt/btrfs1/zaklad/file.bin
Vytvořme snapshot backup4:
# btrfs subvolume snapshot -r zaklad backup4
Rozdíl mezi snapshotem backup3
a backup4
opět přeneseme na druhý souborový systém Btrfs příkazem:
# btrfs send -p /mnt/btrfs1/backup3 /mnt/btrfs1/backup4 \ |btrfs receive /mnt/btrfs2
Tentokrát byl přenos velmi rychlý. To proto, že se nepřenášel celý soubor, ale pouze jeden změněný bajt daného souboru.Můžete i zkontrolovat soubory pomocí kontrolních součtů, tím ověříte, že soubory jsou stejné:
# md5sum /mnt/btrfs1/backup4/file.bin # md5sum /mnt/btrfs1/backup3/file.bin # md5sum /mnt/btrfs2/backup4/file.bin # md5sum /mnt/btrfs2/backup3/file.bin
Následujícím příkazem můžete ověřit, kolik místa je vlastně na disku zabráno a uvidíte, že to není 8 GB, ale pouze zhruba 4 GB.
# btrfs fi show
Můžete si i prohlédnout seznam subvolume a jejich vazby na druhém souborový systému Btrfs. Odpovídají tomu, jak jste uvedli, od které subvolume se má přenos odpíchnout.
# btrfs subvolume list /mnt/btrfs2
Více informací o obsazení místa na souborovém systému Btrfs viz druhý článek Souborový systém Btrfs: zprovoznění na počítači.
Jelikož btrfs send/receive podporuje rouru (pipe), je možno provádět send samozřejmě i skrze ssh. Následujícím příkazem pošlete data jinam:
# btrfs send /mnt/btrfs1/backup1 | \ ssh root@remote-server "btrfs receive /mnt/btrfs2"
Zálohovat tak můžete pohodlně a efektivně na úplně jiný stroj v jiné geolokaci, čímž zajistíte maximálně bezpečnost svých dat.
Video
Pokud by tyto informace rád někdo slyšel spíše mluveným slovem, je zde záznam mojí přednášky na téma zálohování se souborovým systémem Btrfs:
Zálohování pro všechny
Je mnoho lidí, kteří ještě nezálohují a tak doufám, že tento návod to pomůže změnit. Protože zálohovat se souborovým systém Btrfs je tak jednoduché a přitom efektivní, že zálohovat může i ten, kdo si myslí, že to vůbec nepotřebuje.
V dalším díle si ukážeme některé pokročilé funkce při použití souborového systému Btrfs.