Skip to main content

1.7 TrueNAS – zálohovanie a replikácia

Diskové pole (RAID či zrkadlenie) rieši vysokú dostupnosť dát – chráni nás pred výpadkom hardvéru. Nepredstavuje však zálohu! Ak používateľ súbor omylom zmaže, prepíše, alebo ak dáta zašifruje ransomvér, zmena sa okamžite prenesie aj na druhý zrkadlený disk.

Záloha nastavení servera: Samotnú konfiguráciu systému TrueNAS (používateľov, sieťové nastavenia, pravidlá zdieľania) zálohujeme v ponuke System → Advanced Settings → Manage Configuration. Získame malý súbor, z ktorého vieme v prípade zlyhania systémového SSD obnoviť celý server v priebehu minúty.

ZFS snímky súborov

Jednou z výhod súborového systému ZFS je podpora vytvárania takzvaných snímok diskových oddielov (Snapshots). Ide o inkrementálne zálohy súborov – ukladajú sa vždy len zmenené súbory. Samotné vytvorenie snímky teda neuberá prakticky žiadny priestor na disku, uberú ho až nové verzie súborov.

V skutočnosti je vytváranie snímok ešte efektívnejšie – ukladajú sa len nové verzie zmenených blokov súborov (bloky majú veľkosť typicky 128 KiB) a nie celé súbory.

Pre každý diskový oddiel môžeme snímku vytvoriť kedykoľvek jednorazovým manuálnym pokynom, no je možné nastaviť aj automatické vytváranie snímok. Samozrejme, z uložených snímok môže správca servera kedykoľvek obnoviť celý diskový oddiel. Ba čo viac, i používateľ si môže sám po sieti cez vlastnosti súboru obnoviť predchádzajúcu verziu ktoréhokoľvek súboru!

Jednorazové vytvorenie snímky

V ponuke Datasets môžeme zvoliť ktorýkoľvek oddiel a tlačidlom Take Snapshots jednorazovo vytvoriť snímku. Proces vytvorenia je bleskový – nedôjde totiž ku kopírovaniu súborov, ale len k označeniu súčasného stavu súborov. Pri akejkoľvek zmene niektorého súboru sa vytvorí a uchová jeho nová verzia (pričom na disku uberú voľné miesto len zmenené bloky).

K uloženým snímkam sa dostaneme tiež cez zoznam oddielov v ponuke Datasets – odkazom View Snapshots. Súbory môžeme do uchovaného stavu obnoviť tlačidlom Rollback.

Automatické vytváranie snímok

V ponuke Data Protection → Periodic Snapshot Tasks je možné zadefinovať automatické vytváranie snímok formou úlohy (Task). Určíme diskový oddiel, ako dlho sa má vytvorená snímka uchovávať (napr. dva týždne) a ako často sa bude vytvárať (napr. raz denne, o polnoci).

Môžeme vytvoriť aj viaceré úlohy vytvárania snímok – k vyššie spomínanej úlohe môžeme napríklad pridať ešte hodinové snímkovanie s uchovávaním po dobu jedného dňa.

Je vytváranie snímok už skutočným zálohovaním?

Je to záloha súborov pred správaním používateľov – prepísanie súboru staršou alebo chybnou verziou, zmazanie súboru omylom a podobne. Samotné snímkovanie nás nijako neochráni pred zlyhaním disku, ale keďže používame diskové pole ZFS, túto kombináciu je možné pokladať za dostatočné lokálne zálohovanie. Pokiaľ nám však niekto ukradne celý server alebo dôjde k požiaru, záplave a podobnej katastrofe, toto riešenie nám nepomôže.

ZFS replikácia

Pre zálohovanie súborov na vzdialený server ponúka súborový systém ZFS mechanizmus blokovej replikácie. Neprenášajú sa jednotlivé súbory, ale celé snímky diskových oddielov. Samozrejmou požiadavkou je, aby zdrojový i cieľový server používali súborový systém ZFS. Replikácia má oproti bežnému kopírovaniu súborov viaceré výhody:

  • Rýchlosť: Zálohovací proces neprechádza milióny súborov po jednom, prenáša len zmenené bloky disku od poslednej snímky disku (inkrementálna záloha).
  • Zachovanie metadát: Prenášajú sa aj kompletné prístupové práva (ACL), deduplikačné vlastnosti a história snímok.
  • Konzistentnosť: Záloha sa robí zo snímky disku, takže je garantovaný 100 % konzistentný stav aj vtedy, keď používatelia so súbormi práve pracujú.

Praktický príklad: Chceme zabezpečiť automatické zálohovanie učiteľského oddielu na druhý TrueNAS server tak, aby sme mali k dispozícii kompletnú históriu zmien a v prípade havárie vedeli úložisko okamžite nahradiť.

Pokiaľ chceme mať plnú kontrolu nad nastaveniami, je nastavenie replikácie trochu zložitejšie a je nutné konfigurovať zdrojový (ktorý zálohujem) i cieľový (kam zálohujem) TrueNAS server. Konfiguráciu je možné vykonať rôzne, my sa budeme držať tradičného princípu, keď sa zdrojový server pripája na cieľový a odosiela mu svoje údaje (možné je to i opačne, teda cieľový sa môže pripojiť na zdrojový a vziať si jeho údaje).

Replikácia využíva SSH prístup, takže základným predpokladom je spustená služba SSH na cieľovom serveri – zapneme ju cez System → Services → SSH.

1. Príprava SSH spojenia

Na zdrojovom serveri musíme vytvoriť SSH spojenie cez ponuku Credentials → Backup Credentials → SSH Connections. Zadávame parametre:

  • Connection Name: ľubovoľné pomenovanie, z ktorého bude zrejmé, kam sa pripája (napr. „TrueNAS doma“);
  • Setup Method: chceme plnú kontrolu (ako správni profíci 🙂), takže „Manual“;
  • Host: tu zadáme adresu servera – pozor, nesmie byť lokálne mDNS meno, ale IP adresa alebo DNS meno;
  • Username: meno SSH používateľa na vzdialenom (cieľovom) serveri – zatiaľ nemusí existovať (napr. „ssh-dusan“);
  • Private Key: TrueNAS klient zálohovania podporuje len autentifikáciu kľúčom, tak ho necháme vygenerovať;
  • Remote Host Key: ak máme správne zadanú adresu servera a na ňom už beží služba SSH, stačí tlačidlom Discover Remote Host Key zo servera získať odtlačok – bude sa ním overovať pravosť servera.

Po uložení konfigurácie SSH spojenia sa vygeneruje šifrovací kľúč. Cez ponuku Credentials → Backup Credentials → SSH Keypairs → Edit sa k nemu dostaneme a skopírujeme verejný kľúč. Ten, spolu s menom SSH používateľa, musíme poslať správcovi cieľového servera.

2. Príprava cieľového servera

Na cieľovom serveri je potrebné vytvoriť samostatný diskový oddiel pre účely zálohovania – môžeme ho chápať ako hlavný zálohovací oddiel. Vytvoríme ho bežným postupom cez ponuku Datasets. Pomenovať ho môžeme napríklad „backups“, Preset necháme na hodnote „Generic“ – tento oddiel totiž nebudeme sprístupňovať cez SMB! Budú v ňom uložené domovské priečinky SSH používateľov a samotné zálohované diskové oddiely (vnorené). Môžeme prípadne obmedziť diskovú kvótu.

Nebolo by vhodné nastaviť vyšší stupeň kompresie a zapnúť deduplikáciu?

Za bežných okolností je to zbytočné. Tento diskový oddiel bude len rodičovským oddielom a samotné zálohované oddiely budú v ňom vnorené, teda podstatné bude nastavenie vnorených oddielov. Vnorený diskový oddiel (záloha) si zachová nastavenia zdrojového diskového oddielu – vrátane nastavenia kompresie i deduplikácie. Ak je na zdrojovom serveri nastavená napríklad kompresia ZSTD-3, po sieti sa počas replikácie budú prenášať už skomprimované údaje, ktoré sa na cieľovom serveri uložia tak, ako prišli zo zdroja a je úplne jedno, čo sme nastavili.

Navyše si treba uvedomiť, že deduplikácia by mohla pomôcť len v prípade, že na zálohovanom oddieli sa naozaj nachádzajú rovnaké (alebo podobné) súbory vo viacerých kópiách. Tu nepatria predošlé verzie súborov v jednotlivých snímkach, pretože tie nie sú v podobe kompletných súborov, ale len zmenených blokov.

Keďže to platí „za bežných okolností“, je možné dosiahnuť aj iné správanie za iných okolností?

Áno, v nastavení replikácie môžeme zrušiť prenos v originálnej podobe a vnútiť tým prenos v nekomprimovanom stave, pričom v cieli sa uplatní nami nastavená kompresia, napríklad silná (a stále prijateľne rýchla) kompresia ZSTD-7. Ak to máme v úmysle, môžeme už pri vytváraní hlavného zálohovacieho oddielu nastaviť kompresiu. A potom dodatočne v nastavení replikácie vypnúť voľbu Allow Compressed WRITE Records (pozri bod 4).

Nie je potrebné vytvárať aj vnorený diskový oddiel – vytvorí sa automaticky neskôr.

Aby sa mohol vzdialený klient (na zdrojovom serveri) pripojiť cez SSH, musíme mu vytvoriť účet. Dostali sme od neho meno používateľa a verejný kľúč šifrovania, tak ich použijeme – požadovaného používateľa vytvoríme cez Credentials → Users:

  • Allow Access: povolíme len SSH Access, teda vypneme SMB Access;
  • začiarkneme Disable Password, pretože heslo používať nebudeme;
  • Public SSH Key: sem vložíme prijatý verejný kľúč šifrovania;
  • Home Directory: nastavíme oddiel pre zálohovanie (ktorý sme vytvorili, napr. „/mnt/pool-data/backups“) a zapneme aj možnosť „Create Home Directory“;
  • Sudo Commands: proces replikácie vyžaduje root oprávnenie pre proces zfs, preto do kolonky „Allow sudo commands with no password“ zadáme „/usr/sbin/zfs“.

Bolo by chybou, ak by sme používateľovi povolili „Allow all sudo commands with no password“?

Z funkčného hľadiska by to chybou nebolo, no z bezpečnostného hľadiska áno – klient by sa mohol pripojiť na SSH a bez obmedzení behať po našom disku, čo zrejme nechceme. Pokiaľ však spravujeme oba servery, je to prípustné.

3. Nastavenie replikácie

Nakoniec sa vrátime späť na zdrojový server a vytvoríme replikáciu cez ponuku Data Protection → Replication Tasks:

  • Source Location: zvolíme „On this System“ a pod Source zvolíme diskový oddiel, ktorý chceme zálohovať, napr. „pool-data/ucitel“;
  • Destination Location: zvolíme „On a Different System“, vyberieme už pripravené SSH Connection;
  • Destination: zvolíme vytvorený oddiel pre zálohovanie (ktorý bol na cieľovom serveri pre tento účel vytvorený, napr. „pool-data/backups“) a dopíšeme názov vnoreného oddielu, ktorý bude kópiou nášho zálohovaného oddielu (napr. „dusan-ucitel“, teda plné znenie bude „pool-data/backups/dusan-ucitel“);
  • Encryption: pokiaľ nechceme, aby správca cieľového servera videl všetky naše súbory, je nutné začiarknuť túto možnosť šifrovania, Encryption Key Format môžeme zvoliť „PASSPHRASE“ a zadať heslo, ktoré sa použije pre šifrovanie – musí mať aspoň 8 znakov.

Po stlačení tlačidla Next ešte zadáme časové parametre pravidelného zálohovania – zvolíme Run On a Schedule, načasujeme napríklad pre každý deň v noci o 3:30 (mali by sme to dohodnúť so správcom cieľového servera, aby v tom čase nemal zadané iné úlohy) a zadáme dobu, počas ktorej sa snímky budú na cieľovom serveri uchovávať.

Predpokladom pre replikáciu je periodické vytváranie snímok (Periodic Snapshot Tasks), keďže replikácia prenáša zmeny medzi jednotlivými snímkami. Preto sa po nastavení replikácie môže objaviť nová úloha vytvárania snímok (Periodic Snapshot Tasks) – pokiaľ ešte s rovnakými časovými parametrami vytvorená nebola.

4. Optimalizácia pokročilých nastavení

Počas replikácie sa pri pôvodnom nastavení prenášajú súbory po sieti tak, ako sú uložené na zdrojovom disku. Ak je zdrojový súbor na disku komprimovaný kompresiou LZ4, po sieti sa prenáša už v tejto komprimovanej verzii a rovnako sa uloží na cieľový diskový oddiel – bez ohľadu na jeho nastavený typ kompresie. Toto správanie môžeme však zmeniť v nastaveniach replikačnej úlohy, konkrétne ide o dva parametre:

  • Allow Compressed WRITE Records: vyššie opísané uchovania pôvodnej kompresie pri prenose a ukladaní na cieľový disk, štandardne zapnuté;
  • Stream Compression: umožňuje dodatočnú kompresiu len pre účel prenosu údajov po sieti, štandardne vypnuté.

Nemá zmysel zapínať obe možnosti – už skomprimované údaje nie je možné opäť komprimovať. Z praktického hľadiska sú teda zaujímavé len tri kombinácie:

  1. zapnuté Compressed WRITE a vypnuté Stream Compression: najmenej zaťažuje CPU a zároveň šetrí kapacitu spojenia (ak je na zdrojovom disku zapnutá nejaká kompresia) – predvolené správanie s najnižšími nárokmi na výkon, zväčša vyhovuje;
  2. vypnuté Compressed WRITE a vypnuté Stream Compression: cieľovému serveru dodá nekomprimované údaje, ten ich skomprimuje podľa nastavenia diskového oddielu pre zálohy (čo mu môže zaťažiť CPU, ale efektívnejšie zníži objem uložených dát) – vhodné pre zálohovanie po (rýchlej) LAN v čase mimo špičky (v noci);
  3. vypnuté Compressed WRITE a zapnuté Stream Compression: uložené údaje sa dekomprimujú, potom sa zvoleným algoritmom skomprimujú pred prenosom, cieľový server ich po prijatí dekomprimuje do pamäte a pri ukladaní skomprimuje podľa nastavenia diskového oddielu pre zálohy (čo mu môže zaťažiť CPU, ale efektívnejšie zníži objem uložených dát) – vhodné pre zálohovanie cez VPN spojenie (cez internet).

V prípade využitia Stream Compression je potrebné triezvo zvážiť kompresiu. Najlepšia kompresia plzip je síce veľmi účinná, ale zároveň aj veľmi náročná a pomalá (CPU zdrojového servera zaťaží naplno, a to na pomerne dlhý čas) – zmysel má len pri veľmi pomalom sieťovom spojení cez VPN.

5. Overenie funkčnosti

Nakoniec je vhodné overiť nastavenia jednorazovým spustením replikácie – v zozname Replication Tasks klikneme pri vytvorenej úlohe na tri bodky a zvolíme Run Job. Ak je všetko v poriadku, pri úlohe sa objaví stav RUNNING a po dokončení sa zmení na SUCCESS. Na cieľovom serveri sa pri prvom spustení automaticky vytvorí diskový oddiel so zapnutým šifrovaním (s heslom, ktoré nastavil zdrojový server).

Cieľový diskový oddiel sa po prvej replikácii prepne do režimu iba na čítanie. Je to ochrana pred zmenou údajov na záložnom serveri, čo by narušilo nadväznosť budúcich inkrementálnych záloh.

Bezprostredne po vytvorení prvej zálohy sa síce vytvorí šifrovaný diskový oddiel, no heslo zostane v pamäti a oddiel bude hlásiť odomknutý stav (Unlocked). V tomto stave má správca cieľového servera dostupné naše súbory. Diskový oddiel môžeme uzamknúť len na cieľovom serveri – tlačidlom Lock alebo reštartom servera. Pokiaľ nechceme, aby mal správca cieľového servera prístup k našim súborom ani v tomto úvodnom stave, je nutné mať šifrovaný aj zdrojový diskový oddiel.

Obnova diskového oddielu zo vzdialenej zálohy

Kým obnova súborov zo ZFS snímok uložených lokálne bola veľmi jednoduchá a dostupná aj pre koncového používateľa, obnova z replikovanej vzdialenej kópie je podstatne zložitejšia. Neslúži na „vyťahovanie“ jednotlivých súborov, ale pre úplnú obnovu diskového oddielu. Typicky obnovujeme diskový oddiel v situácii, že sme prišli o celý (pôvodne zdrojový) server alebo o všetky súbory na ňom (napr. po kybernetickom útoku, či po ich znehodnotení ransomvérom).

Vyskúšať si však môžeme obnovu aj na funkčnom serveri, vykonáme ju do nového diskového oddielu. Keďže SSH spojenie už máme a dokonca aj úlohu replikácie, bude to jednoduchšie – z pôvodnej úlohy zálohovania vytvoríme reverznú úlohu obnovy:

  1. V Data Protection → Replication Tasks pri pôvodnej úlohe zálohovania klikneme na tri bodky a zvolíme Restore. Nespustí sa žiadna operácia, ale začneme vytvárať reverznú úlohu (Task) pre obnovu.
  2. Pomenujeme úlohu obnovy (napr. „skúšobná obnova“) a pod Destination zvolíme diskové pole, za ktoré ručne dopíšeme názov oddielu, teda celý cieľ bude napr. „pool-data/restore-ucitel“ – tento oddiel sa vytvorí pri obnove automaticky.
  3. Vytvorená úloha je neaktívna a zakázaná. Musíme vojsť do jej nastavení (Edit) a môžeme zmeniť parametre. Nutné je zapnúť voľbu „Use Sudo For ZFS Commands“. Pozor, nezapíname Encryption, pretože vzdialená záloha už šifrovaná je (prenesie sa tak, ako je, aj so šifrovaním).
  4. Upravenú úlohu povolíme (zapneme prepínač Enabled) a spustíme (Run job).
  5. Začnú sa prenášať všetky súbory, po skončení bude úloha v stave SUCCESS.
  6. V zozname diskových oddielov (Datasets) nájdeme nový oddiel, no bude pri ňom Encryption: Locked. Môžeme ho odomknúť stlačením tlačidla Unlock a zadaním šifrovacieho hesla. Od tejto chvíle sú všetky súbory na disku dostupné a môžeme ich nazdieľať alebo cez Shell nakopírovať na iný diskový oddiel.

Upratovanie po teste: Keď si overíme, že obnova prebehla úspešne a súbory sú v novom oddieli restore-ucitel dostupné, môžeme tento testovací oddiel zmazať, aby nám na disku nezaberal miesto. Rovnako môžeme odstrániť aj vytvorenú reverznú úlohu obnovy.

Zálohovanie súborov na nie-ZFS zariadenia

Ak potrebujeme dáta zálohovať na zariadenie, ktoré nepoužíva súborový systém ZFS (napríklad starší Linuxový server, NAS alebo bežný sieťový disk), použijeme ponuku Data Protection → Rsync Tasks.

Nástroj Rsync prechádza súborovú štruktúru po jednotlivých súboroch a kopíruje len zmenené a nové súbory. Je univerzálny, no pri obrovskom množstve malých súborov je podstatne pomalší než bloková ZFS replikácia.

Týmto zálohovaním sa nebudeme bližšie zaoberať.