This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
navody:vps:datasety [2016/03/21 08:28] – stahovani zaloh v CLI Aither | navody:vps:datasety [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Datasety ====== | ||
- | |||
- | Dataset ve vpsAdminu reprezentuje přímo ZFS dataset na disku. Datasety | ||
- | se používají na data VPS i NAS. Koncept datasetu nahrazuje exporty z | ||
- | NASu. S datasetem VPS lze pracovat stejně jako s NASem. | ||
- | |||
- | {{: | ||
- | |||
- | Proč se vůbec s datasety obtěžovat? | ||
- | kvóty a ZFS properties pro různé data/ | ||
- | |||
- | Datasety VPS se nacházejí v detailu VPS a datasety NASu v menu NAS. | ||
- | Operace, které s nimi můžete provádět, jsou stejné. vpsAdmin umožňuje | ||
- | vytváření subdatasetů a nastavování ZFS properties. | ||
- | |||
- | {{: | ||
- | |||
- | Pomocí properties lze optimalizovat výkon databází, apod. Ve většině | ||
- | případů je nemusíte vůbec řešit. | ||
- | |||
- | Rezervovaná jména datasetů jsou: '' | ||
- | Tyto názvy nelze použít. | ||
- | |||
- | ===== Velikost datasetů a zabrané místo ===== | ||
- | V seznamu datasetů se zobrazují tři sloupečky: //Used space//, // | ||
- | a //Available space//. //Used space// zahrnuje místo zabrané datasetem, jeho snapshoty | ||
- | i všemi potomky. // | ||
- | snapshoty ani subdatasety se nepočítají. | ||
- | |||
- | //Available space// zobrazuje volné místo v aktuální datasetu s ohledem na nastavenou kvótu. | ||
- | |||
- | ===== Kvóty datasetů ===== | ||
- | Pro datasety VPS se používá //Reference quota// - místo zabrané snapshoty | ||
- | a subdatasety není zahrnuto. Datasety NASu naopak //Quota// - místo zabrané | ||
- | snapshoty a subdatasety je zahrnuto. vpsAdmin automaticky dle kontextu nabízí správný typ kvóty. | ||
- | |||
- | U VPS nechceme, aby se do zabraného místa počítalo | ||
- | místo zabrané snapshoty, protože by se zmenšila velikost disku VPS, o tolik, | ||
- | kolik dat je změněno mezi vytvořenými snapshoty. | ||
- | Každý dataset je samostatný a nesdíli místo s nadřazenými datasety, ani se | ||
- | svými potomky. | ||
- | |||
- | Naopak na NASu je použita property quota a do té se počítá místo zabrané | ||
- | snapshoty i subdatasety. Pokud se na NASu udělají snapshoty, budou | ||
- | ubírat místo z celkové velikosti. Taky je jedno, že subdatasetu na NASu lze | ||
- | dat větší kvótu, než má uživatel k dispozici, protože se stejně uplatní kvóta | ||
- | z datasetu nejvyšší úrovně, tzn. ve výchozím stavu 250 GB. | ||
- | |||
- | Z toho vyplývá, že k vytvoření subdatasetu VPS musí být nejdříve uvolněno místo, tzn. | ||
- | nějaký jiný (sub)dataset VPS musí být zmenšen minimálně o 10 GB. Na NASu záleží jen na kvótě nejvýše | ||
- | postaveného datasetu a kvóty subdatasetů můžou být libovolné. | ||
- | |||
- | ===== Snapshoty ===== | ||
- | |||
- | Zálohování probíhá pomocí ZFS snapshotů, které jsou vidět v menu | ||
- | Backups. Tam je možné je také vytvářet a mazat. | ||
- | |||
- | {{: | ||
- | |||
- | Zálohování VPS probíhá tak, že každý den v 01:00 se v rámci jednoho node | ||
- | udělá snapshot všech datasetů najednou. Poté jsou snapshoty přesunuty na | ||
- | backuper.prg. | ||
- | |||
- | Pozor! NAS **není zálohován** na backuper.prg. Snapshoty jsou | ||
- | pouze lokální a slouží jen jako ochrana proti nechtěnému smazání či poškození dat. | ||
- | |||
- | ===== Mounty ===== | ||
- | |||
- | Mounty lze vidět v detailech VPS. Mountovat lze datasety | ||
- | i snapshoty. Do jakékoliv VPS jde mountnout jakýkoliv dataset či | ||
- | snapshot. Mounty jednotlivých snapshotů nahrazují trvalý mount záloh do | ||
- | / | ||
- | |||
- | {{: | ||
- | |||
- | Každý snapshot může být v jednu chvíli připojen pouze jednou, datasety | ||
- | toto omezení nemají. | ||
- | |||
- | Nedoporučuji mountpointy zanořovat v nesprávném pořadí. Situace, kdy | ||
- | dataset ' | ||
- | |||
- | {{: | ||
- | |||
- | Mount lze dočasně odpojit tlačítkem " | ||
- | perzistentní mezi restarty VPS. | ||
- | |||
- | ===== Obnova záloh ===== | ||
- | |||
- | Obnovení VPS ze zálohy (snapshotu) funguje stejně, jako doposud. Obnova | ||
- | vždy funguje na úrovni datasetu. Když má VPS subdatasety a rootfs je | ||
- | obnoven ze zálohy, subdatasety obnoveny nejsou. Tzn. je možno obnovit | ||
- | jakýkoliv dataset, aniž by to mělo vliv na ostatní datasety. Při obnově | ||
- | jsou všechny snapshoty zachovány, díky větvení záloh na backuperu. | ||
- | |||
- | NAS je možné snapshotovat pouze **manuálně**. Jelikož ale není zálohován na | ||
- | backuper, obnova se chová stejně jako '' | ||
- | starší snapshot **smaže** všechny novější snapshoty. Je to **nevratná** operace. | ||
- | |||
- | Pro obnovu dat ze zálohy na NASu bez smazání snapshotů si zvolený | ||
- | snapshot moutněte do VPS a data vykopírujte. | ||
- | |||
- | ===== Stahování záloh ===== | ||
- | |||
- | Zálohy můžeme stahovat buď přes webové rozhraní nebo [[navody: | ||
- | CLI má výhodu v tom, že nemusíme čekat na e-mail s odkazem na stažení zálohy, | ||
- | ale stahujeme ihned, připadně jde celý proces automatizovat. Můžeme stáhnout buď | ||
- | tar.gz archiv, nebo přímo ZFS data stream (i inkrementálně). | ||
- | |||
- | ==== Inkrementální zálohy ==== | ||
- | |||
- | Inkrementální záloha obsahuje pouze změněná data od předchozího snapshotu. | ||
- | Aby klient dokázal vyhodnotit, které snapshoty lze stahovat inkrementálně, | ||
- | každý snapshot obsahuje // | ||
- | identifikátorem mohou být přeneseny inkrementálně. Tok historie naruší reinstalace | ||
- | VPS nebo obnova ze zálohy, poté je identifikátor historie navýšen o 1 a | ||
- | znovu se musí stáhnout plná záloha. | ||
- | |||
- | Identifikátor historie je znázorněn v tabulce se seznamem snapshotů v menu Backups. | ||
- | |||
- | ==== Stažení zálohy do souboru ==== | ||
- | |||
- | < | ||
- | $ vpsfreectl snapshot download --help | ||
- | snapshot download [SNAPSHOT_ID] | ||
- | |||
- | Command options: | ||
- | -f, --format FORMAT | ||
- | -I, --from-snapshot SNAPSHOT_ID | ||
- | -d, --[no-]delete-after | ||
- | -F, --force | ||
- | -o, --output FILE Save the download to FILE | ||
- | -q, --quiet | ||
- | -r, --resume | ||
- | -s, --[no-]send-mail | ||
- | -x, --max-rate N | ||
- | --[no-]checksum | ||
- | </ | ||
- | |||
- | Není-li ID snapshotu předáno programu jako argument, interaktivně se na něj | ||
- | zeptá: | ||
- | |||
- | < | ||
- | $ vpsfreectl snapshot download | ||
- | Dataset 14 | ||
- | (1) @2015-12-04T00: | ||
- | VPS #198 | ||
- | (2) @2015-12-01T09: | ||
- | (3) @2015-12-01T09: | ||
- | (4) @2015-12-01T11: | ||
- | (5) @2015-12-01T11: | ||
- | (6) @2015-12-01T11: | ||
- | (7) @2015-12-01T11: | ||
- | (8) @2015-12-01T12: | ||
- | (9) @2015-12-01T12: | ||
- | (10) @2015-12-01T12: | ||
- | (11) @2015-12-01T12: | ||
- | (12) @2016-02-29T09: | ||
- | (13) @2016-02-29T10: | ||
- | (14) @2016-02-29T10: | ||
- | Pick a snapshot for download: | ||
- | |||
- | </ | ||
- | |||
- | Budeme stahovat 4. snapshot ('' | ||
- | |||
- | < | ||
- | Pick a snapshot for download: 4 | ||
- | The download is being prepared... | ||
- | Downloading to 198__2015-12-01T12-25-56.tar.gz | ||
- | Time: 00:01:37 Downloading 0.3 GB: [=====================================================================================] 100% 992 kB/s | ||
- | </ | ||
- | |||
- | Přepínačem '' | ||
- | stream, nebo inkrementální data stream. Ve výchozím stavu dojde ke stažení | ||
- | tar.gz archivu. | ||
- | |||
- | Soubor můžeme buď nechat pojmenovat vpsAdminem | ||
- | ([[https:// | ||
- | nebo si zvolit vlastní umístění pomocí přepínače '' | ||
- | '' | ||
- | |||
- | Program umožňuje stáhování přerušit (třeba '' | ||
- | navázat. Pokud není použit přepínač '' | ||
- | program se uživatele zeptá, jestli má pokračovat ve stahování, | ||
- | znovu. | ||
- | |||
- | < | ||
- | Stahování lze navázat jen v případě, že připravený soubor na serveru mezitím | ||
- | nebyl smazán (přepínač '' | ||
- | stahování. | ||
- | </ | ||
- | |||
- | ==== ZFS data stream ==== | ||
- | |||
- | < | ||
- | $ vpsfreectl snapshot send --help | ||
- | snapshot send SNAPSHOT_ID | ||
- | |||
- | Command options: | ||
- | -I, --from-snapshot SNAPSHOT_ID | ||
- | -d, --[no-]delete-after | ||
- | -q, --quiet | ||
- | -s, --[no-]send-mail | ||
- | -x, --max-rate N | ||
- | --[no-]checksum | ||
- | </ | ||
- | |||
- | Rozdíl oproti '' | ||
- | stdout a to v nekomprimované formě, abychom ho mohli propojit přimo se | ||
- | '' | ||
- | |||
- | < | ||
- | $ vpsfreectl snapshot send <id> | zfs recv -F < | ||
- | </ | ||
- | |||
- | Inkrementální data stream lze vyžádat přepínačem '' | ||
- | |||
- | < | ||
- | $ vpsfreectl snapshot send <id2> -- --from-snapshot <id1> | zfs recv -F < | ||
- | </ | ||
- | |||
- | ==== Automatizované stahování záloh ==== | ||
- | |||
- | Automatizované stahování záloh řeší příkazy '' | ||
- | '' | ||
- | a druhý ID datasetu. | ||
- | |||
- | Tyto příkazy vyžadují nainstalované ZFS, vytvořený zpool a práva roota. | ||
- | Program lze spustit buď přímo pod rootem, nebo bude za běhu používat sudo. | ||
- | |||
- | Při spuštění se stáhnou snapshoty s aktuálním identifikátorem historie, které | ||
- | ještě lokálně neexistují, | ||
- | inkrementální přenos, program musí najít snapshot, který je přitomen lokálně a | ||
- | zároveň je na serveru. Z toho vyplývá, že je potřeba zálohy stahovat minimálně | ||
- | jednou za 14 dní, protože poté bude náš nejnovější lokální snapshot smazán ze | ||
- | serveru a program nebude schopen pokračovat ve stahování záloh -- nebude existovat | ||
- | žádný společný snapshot. | ||
- | |||
- | < | ||
- | $ vpsfreectl backup vps --help | ||
- | backup vps [VPS_ID] FILESYSTEM | ||
- | |||
- | Command options: | ||
- | -p, --pretend | ||
- | -r, --[no-]rotate | ||
- | -m, --min-snapshots N Keep at least N snapshots (30) | ||
- | -M, --max-snapshots N Keep at most N snapshots (45) | ||
- | -a, --max-age N Delete snapshots older then N days (30) | ||
- | -x, --max-rate N | ||
- | -q, --quiet | ||
- | -s, --safe-download | ||
- | --retry-attemps N Retry N times to recover from download error (10) | ||
- | -i, --init-snapshots N | ||
- | --[no-]checksum | ||
- | -d, --[no-]delete-after | ||
- | --no-snapshots-as-error | ||
- | </ | ||
- | |||
- | Pokud program nedostane ID VPS/ | ||
- | zeptá, nebo se pokusí jej zjistit sám. Argument '' | ||
- | vždy. Měl by obsahovat jméno datasetu, do kterého chceme zálohy ukládat. | ||
- | |||
- | <note warning> | ||
- | První argument programu je **ID VPS/ | ||
- | datasetu matoucí, jelikož ID není stejné jako název datasetu, ale obojí je | ||
- | většinou číslo. | ||
- | </ | ||
- | |||
- | Než program spustíme na ostro, může se hodit přepínač '' | ||
- | nám vypíše, co by program udělal, tedy jaké snapshoty by stáhnul a případně | ||
- | smazal. | ||
- | |||
- | Přepínačem '' | ||
- | uvolnilo místo pro ty nové. Nezměníme-li další nastavení, budeme mít minimálně | ||
- | 30 snapshotů (což aktualně znamená 30 denní historii), maximálně 45 snapshotů | ||
- | (pokud si nějaké vytvoříme manuálně) a budou se mazat snapshoty starší nez 30 | ||
- | dní. | ||
- | |||
- | Obsah datasetu '' | ||
- | neměl vytvářet další subdatasety/ | ||
- | subdatasetech, | ||
- | |||
- | === Ukázka použití === | ||
- | |||
- | < | ||
- | $ vpsfreectl backup vps storage/ | ||
- | (1) VPS #198 | ||
- | (2) VPS #199 | ||
- | (3) VPS #202 | ||
- | Pick a dataset to backup: 2 | ||
- | Will download 8 snapshots: | ||
- | @2016-03-07T18: | ||
- | @2016-03-07T18: | ||
- | @2016-03-07T18: | ||
- | @2016-03-10T10: | ||
- | @2016-03-10T10: | ||
- | @2016-03-10T11: | ||
- | @2016-03-10T14: | ||
- | @2016-03-10T14: | ||
- | |||
- | Performing a full receive of @2016-03-07T18: | ||
- | The download is being prepared... | ||
- | Time: 00:00:56 Downloading 0.0 GB: [====================================================================================] 100% 1755 kB/s | ||
- | Performing an incremental receive of @2016-03-07T18: | ||
- | The download is being prepared... | ||
- | Time: 00:00:00 Downloading 0.0 GB: [=======================================================================================] 100% 0 kB/s | ||
- | </ | ||
- | |||
- | Můžeme si všimnout, že program stáhne první snapshot v plné velikosti a | ||
- | všechny další pak inkrementálně. | ||
- | |||
- | Seznam snapshotů vypíšeme pomocí '' | ||
- | < | ||
- | $ sudo zfs list -r -t snapshot storage/ | ||
- | NAME | ||
- | storage/ | ||
- | storage/ | ||
- | storage/ | ||
- | storage/ | ||
- | storage/ | ||
- | storage/ | ||
- | storage/ | ||
- | storage/ | ||
- | </ | ||
- | |||
- | K vlastním datům se lze dostat přes speciální adresář '' | ||
- | < | ||
- | $ ls -1 / | ||
- | 2016-03-07T18: | ||
- | 2016-03-07T18: | ||
- | 2016-03-07T18: | ||
- | 2016-03-10T10: | ||
- | 2016-03-10T10: | ||
- | 2016-03-10T11: | ||
- | 2016-03-10T14: | ||
- | 2016-03-10T14: | ||
- | </ | ||
- | |||
- | K pravidelnému stahování záloh se dá použít cron. Zápis v crontabu může vypadat | ||
- | takto: | ||
- | |||
- | < | ||
- | MAILTO=tvuj@mail | ||
- | |||
- | # Example of job definition: | ||
- | # .---------------- minute (0 - 59) | ||
- | # | .------------- hour (0 - 23) | ||
- | # | | .---------- day of month (1 - 31) | ||
- | # | | | .------- month (1 - 12) OR jan, | ||
- | # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun, | ||
- | # | | | | | | ||
- | # * * * * * user-name command to be executed | ||
- | 0 7 * * * root vpsfreectl backup vps 199 storage/ | ||
- | </ | ||
- | |||
- | Program se tedy spustí každý den v 7 ráno (kdy už by měly být zálohy ve | ||
- | vpsFree přeneseny na backuper.prg) a budou se stahovat maximální rychlostí | ||
- | 1 MB/s. Výstup příkazu nám zašle cron na e-mail nastavený v proměnné | ||
- | '' | ||
- | Proto má program přepínač '' | ||
- | případné chyby. | ||
- | |||
- | < | ||
- | Pokud budeme zálohy stahovat pod rootem, ale '' | ||
- | pod obyčejným uživatelem, | ||
- | [[navody: | ||
- | </ | ||
- | |||
- | === Stažení plné zálohy po pomalé/ | ||
- | |||
- | Příkaz '' | ||
- | protože nestahuje do žádného souboru, ale data hned předává ZFS. Jestliže máme | ||
- | k dispozici jen pomalou nebo nespolehlivou linku, může se stát, že stahování | ||
- | selže a bude nutné jej restartovat -- od začátku. Můžeme si ale pomoct | ||
- | přepínačem '' | ||
- | pak je předá ZFS. Díky tomu je možné kdykoli stahování přerušit a později | ||
- | v něm pokračovat. Nevýhodou je, že je k tomu potřeba 2x více místa na disku, protože | ||
- | jsou data v jednu chvíli v dočasném souboru i v ZFS datasetu. Dočasný soubor je vytvořen | ||
- | v adresáři, ze kterého je program spuštěn. | ||
- | |||
- | Na další problém můžeme narazit při dlouhé době stahování. Program při prvním | ||
- | spuštění totiž stahuje všechny snapshoty, od nejstaršiho po nejnovější. Pokud | ||
- | ale stahujeme ten nejstarší snapshot moc dlouho, může dojít k jeho smazání ze | ||
- | serveru, což vede k tomu, že ho později nemůžeme použít k inkrementálnímu stahování a | ||
- | musíme stahovat plnou zálohu znovu. Pro tyto případy existuje přepínač | ||
- | '' | ||
- | posledních snapshotů. Nejbezpečnější je použít '' | ||
- | máme až 14 dní na dokončení stahování (poslední přerušení může nastat po 7 | ||
- | dnech). Není to ale všelék, protože pokud je program ukončen a znovu spuštěn v jiný | ||
- | den, poslední snapshot bude jiný a stahování začne nanovo, není-li hodnota | ||
- | '' | ||
- | |||
- | === Detekce chybějící zálohy === | ||
- | |||
- | Někdy se může stát, že z nějakého důvodu denní záloha neproběhne a program tedy nebude | ||
- | mít co stáhnout. Tato situace normálně není považována za chybu -- jednoduše | ||
- | jsou všechny snapshoty už staženy a program nemá co dělat. Probíhá-li však | ||
- | stahování záloh automaticky za pomocí cronu, nijak se nedozvíme o tom, že se | ||
- | žádné zálohy nestahují. Z tohoto důvodu má program přepínač | ||
- | '' | ||
- | co stáhnout, skončí s chybou. Chyby nejsou potlačeny přepínačem '' | ||
- | takže nám ji cron pošle na e-mail a o výpadku se dozvíme. | ||
- | |||
- | === Stahování záloh pod obyčejným uživatelem s využitím sudo === | ||
- | |||
- | Nechceme-li '' | ||
- | běžet i pod neprivilegovaným uživatelem. K práci se ZFS pak využije sudo. | ||
- | |||
- | V následující ukázce budeme program instalovat a používat pod uživatelem | ||
- | '' | ||
- | |||
- | < | ||
- | # useradd -m -d / | ||
- | # su vpsfree | ||
- | $ gem install --user-install vpsfree-client | ||
- | </ | ||
- | |||
- | Následující řádky vložte do ''/ | ||
- | |||
- | < | ||
- | Defaults: | ||
- | vpsfree ALL=(root) NOPASSWD: /sbin/zfs | ||
- | </ | ||
- | |||
- | Uživatel '' | ||
- | což je nezbytné, pokud jej chceme pouštět cronem. | ||
- | |||
- | Nyní zkusíme program spustit manuálně a potom jej umístíme do crontabu. Zkusme | ||
- | si tedy vyžádat a uložit autentizační token: | ||
- | |||
- | < | ||
- | # su vpsfree | ||
- | $ vpsfreectl --auth token --new-token --token-lifetime permanent --save user current | ||
- | </ | ||
- | |||
- | Dostanete-li chybu, že program neexistuje, bude potřeba specifikovat celou | ||
- | cestu, nebo přidat správný adresář do '' | ||
- | '' | ||
- | ''/ | ||
- | |||
- | Máme-li funkčního klienta, můžeme stáhnout první zálohu do datasetu, který si | ||
- | vytvoříme. V této ukázce se bude zálohovat VPS #123 do datasetu | ||
- | '' | ||
- | |||
- | < | ||
- | # su vpsfree | ||
- | $ sudo zfs create -p storage/ | ||
- | $ vpsfreectl backup vps 123 storage/ | ||
- | </ | ||
- | |||
- | Další zálohy budeme stahovat pravidelně cronem, do souboru | ||
- | ''/ | ||
- | |||
- | < | ||
- | PATH=/ | ||
- | MAILTO=tvuj@mail | ||
- | HOME=/ | ||
- | |||
- | 0 7 * * * vpsfree vpsfreectl backup vps storage/ | ||
- | </ | ||
- | |||
- | V '' | ||
- | programu už nemusíme předávat ID VPS, při prvním spuštění si jej totiž uloží. | ||
- | |||
- | ==== Obecné přepínače ==== | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | ===== Obnova stažené zálohy ===== | ||
- | |||
- | Obnova VPS ze stažené zálohy zatím není nijak automatizována. Jedním ze | ||
- | způsobů je připojit si dataset VPS, který chceme obnovit, do jiné VPS | ||
- | (playground) a data překopírovat. Tento postup je popsán v | ||
- | [[navody: | ||