Jak na vlastní zálohování dat?

Přestože větší poskytovatelé internetového provozu nabízí možnosti zálohování dat, nemusí jejich způsob každému vyhovovat. Ať už kvůli vysoké ceně, způsobu provedení nebo třeba nedostatečné komprimaci.  Ani nám zcela nevyhovovala poskytnutá tvorba záloh. V tomto článku se podíváme, jak pro nás bylo (či spíše nebylo) složité přejít na zálohování pomocí vlastních sil. Třeba vám budeme inspirací! 

Backup má různé možnosti použití

V  Dactyl Group provozujeme celou řadu webových i mobilních aplikací včetně jejich databází a e-mailových schránek. Jejich data se rozprostírají přes několik serverů a my je potřebujeme zálohovat na extra úložiště. Jednak z důvodu možnosti vrátit se ke starším verzím projektů, jednak abychom měli možnost data obnovit po neúmyslném odstranění. Samozřejmě to plní také roli bezpečnostní, protože i když je provoz serverů dobře hlídaný, i zdánlivě nepotopitelná loď se může dostat do problémů. Však to známe.

Co se týče providerů, každý k zálohování (angl. backup) přistupuje jinak. Někteří za poplatek nabízí interní řešení záloh na své vlastní disky, jiní vybízejí k nastavení pravidelných záloh přes formulář s volbou času/data i úložiště. Často se využívají “online” úložné prostory, jako je například DropBox nebo Google Disc. Většina ale spoléhá na lokální ukládání dat samotným klientem. 


Typů záloh, které je možné vytvářet, existuje opět celá řada. Ať už jde o nestrukturalizované zálohování, kdy se zkrátka vytvoří pokaždé plná kopie dat, inkrementální zálohy, kde jsou ukládány pouze provedené změny, či rozdílovou zálohu s uloženými jen upravenými soubory, vždy záleží na okolnostech a možnostech. Každému se tak může hodit jiný přístup nebo jejich kombinace.

Proč jsme se rozhodli zálohovat svépomocí

Náš hlavní poskytovatel serverových služeb nabízí možnost zálohování tak, že se ve zvolený den a čas vytvoří ze všech dat hostingu (což tvoří weby, databáze, e-maily) jeden velký ZIP archiv. Ten je pak odeslán na FTP server podle vlastního výběru. Takový proces poměrně dobře funguje u stránek, které narůstají do velikostí stovek MB či jednotek GB. Některé naše projekty ale přesahují stovky gigabytů a s každou zálohou se tak vytvoří jeden obrovský zazipovaný soubor. 

Uchovat i několik málo kopií je velký oříšek. Je to náročné jak na datový prostor, tak na přenos dat po internetu, který trvá i několik hodin. Nezanedbatelná je i skutečnost, že pro vytvoření archivu je nutné disponovat přímo na serveru místem, kam se soubor uloží. Jinými slovy je potřeba mít k dispozici minimálně tolik volného prostoru, jako je největší zálohovaný projekt.

Obnova dat je také problémová. Proč? Protože kopírování nebo extrahování takového souboru je téměř nereálné, i když potřebujeme jen část zálohy. 

Jak Dactyl zálohuje data

Kvůli výše zmíněným nedostatkům jsme se po interních diskuzích a analýze rozhodli pro vlastní řešení. To spočívá ve využití základního open-source nástroje Rsync. Jde o velice mocný, ale zároveň snadno použitelný program. Existuje už bezmála čtvrtstoletí a je základním nástrojem snad všech Unix-like distribucí. Nejde tedy o žádnou experimentální novinku, ale o léty prověřeného pomocníka pro přesun a synchronizaci dat po síti.

Je důležité znát i jeho nevýhody. Tou je podle nás nutnost připojení k cílovému stroji pomocí protokolu SSH. Tímto způsobem Rsync ověřuje oprávěnost přístupu k datům. Pokud si pronajímáte samotný web hosting, SSH přístup bohužel není dostupný. Nicméně pokud jste náš klient, stránky zálohujeme za vás. 

Nás ale těší především silné stránky tohoto nástroje. Postup jeho procesu by se dal shrnout do následujících bodů:

  1. Po ověření přístupu načte rekurzivně obsahy zdrojové (webu) a cílové (zálohy) složky.
  2. Poté kopíruje soubory, pokud v cíli neexistují, anebo se liší jejich čas poslední úpravy (nepřenáší vše, pokud zálohujeme kopii).
  3. Každý přenášený soubor archivuje a v cíli rozbalí (šetří přenosové pásmo).
  4. Zachovává vlastníka, skupinu i práva čtení a zápisu (zjednodušuje obnovu na původní místo). 

Oproti nativnímu kopírování souborů jde téměř v každém bodě o zlepšení. Na cílovém disku tak vzniká s každou zálohou nová složka se všemi aktuálními soubory, anebo může být starší záloha pouze aktualizovaná.

Pro ušetření prostoru úložiště využíváme ještě jeden důležitý trik, který poskytuje Rsync ve spolupráci se souborovým systémem – tzv. hard linky. Jde o techniku, při které lze programu předat referenci na existující složku na cílovém disku. Pokud při porovnání souborů Rsync zjistí, že v referenční složce tento soubor existuje a nebyl změněn, do cílové složky vytvoří pouze hard link na referenci.

Takto prolinkované soubory jsou úžasné v tom, že i když se tváří jako dva, zabírají místo jako jeden. Souborový systém zajistí, že se link tváří jako kopie, ale ve skutečnosti jde jen o odkaz. Zálohy pak tvoří složky s kompletní souborovou strukturou. Hard linkovaný soubor zanikne až v případě, když je smazán poslední odkaz, který na něj ukazuje. Tím je vyřešen problém mazání starých záloh beze strachu o ztrátu dat.
 
Pokud se tedy na zálohovaných stránkách nebo e-mailových schránkách data nemění často, můžeme pohodlně uchovávat například 5 různých záloh z různých období. Velikost je přitom pouze např. 120% původního prostoru. V případě, kdy by v čase mezi dvěma zálohami byly všechny soubory smazány a nahrazeny novými, záloha bude samozřejmě obsahovat plné dvě složky bez prolinkování, a tedy s plnou velikostí. K takovým případům ale dochází jen velmi výjimečně.

Jak zprovoznit vlastní zálohy - jednoduchý návod

Zprovoznění záloh pomocí Rsync není nikterak složité a lze jej v zásadě vytvořit pohodlně i v domácím prostředí.

Prerekvizity k tvorbě zálohovacího nástroje jsou následující:

  • počítač s nejlépe Unix-like operačním systémem (OS může být i jiný),
  • připojení k internetu (není nutná veřejná IP),
  • dostatečně velké úložiště (interní/externí disk, USB, paměťová karta apod.).

U nás v Dactylu úlohu počítače zastupuje dříve nepoužívaný serverový stroj s operačním systémem Debian. Ten má Rsync a další programy instalované už od výrobce a je připojen do standardní kancelářské sítě k internetu. Nemusí jít ale zrovna o server. Tuto roli může zastávat starý nepoužívaný notebook, virtualizovaný počítač na pracovní stanici či dokonce minipočítač, jako Raspberry Pi a jemu podobné.
Pomocí CRON plánovače je pak automaticky spouštěn příkaz pro použití Rsync, např. v následujícím tvaru:

rsync -avz --link-dest=<cesta_k_referenci> <cesta_k_webu> <cesta_k_ulozisti>

 

Popis příkazu:

  • -a přepínač zajistí zachování majitele, skupiny i práv pro čtení/zápis,
  • -v přepínač udává, že má rsync vypisovat více informací o průběhu zálohy,
  • -z přepínač pak vynucuje komprimaci souborů při přesunu,
  • --link-dest= určí, která složka má být jako referenční pro hard linkování
  • <cesta_k_referenci> je cesta ke složce pro linky (typicky předchozí záloha),
  • <cesta_k_webu> je cesta ke složce na našem hostingovém vzdáleném serveru,
  • <cesta_k_ulozisti> je nakonec cesta k lokální složce na místě, kam chceme zálohu uložit.

Pokud tvoříme první zálohu bez referenční složky k prolinkování, jedná se kompletní plnou kopii, ale každá následující záloha pak může být o to menší, kolik změn (ne)bylo provedených na zálohovaných souborech.

Jak zálohy fungují v praxi

Pokud máte u nás pronajatý hosting, můžete si teď udělat představu o tom, jak vaše data zálohujeme. Zálohy provádíme standardně třikrát za měsíc (v ceně služby), ale nebráníme se i řešením na míru, jako například v případě ČPZP projektu. Disky, kde jsou zálohy uloženy, také provozujeme v RAID poli. Jsou tak chráněny i v případě, když některý z disků doslouží. O vaše data a jejich zálohy se u nás tedy bát nemusíte. 

Autorem tohoto článku je Honza Kohoutek, inženýr se specializací na počítačové a vestavěné systémy. V Dactylu pracuje už víc než 5 let na pozici webový vývojář backendu v PHP a Yii technologiích. 

Pokud vás zajímají naše návody, mrkněte i na další články: 

Hodila by se vám pomocná ruka na tvorbu appky nebo webu? Výborně! Specializujeme se jak na vývoj mobilních aplikací, tak i na tvorbu webových stránek