Skip to main content

1.6 TrueNAS – testovanie a zálohovanie

Testovanie funkčnosti ZFS

Pri vytváraní zdieľania sme si určite hneď overili aj funkčnosť prístupových práv a rozlišovania používateľov. Zaujímavé je však otestovanie pokročilých funkcií súborového systému ZFS.

Kompresia

Pozrime sa na účinnosť kompresie – stačí nám nahrať veľký komprimovateľný súbor na sieťový disk učiteľa a žiaka. Cez vlastnosti súboru zistíme, že v oboch prípadoch zaberá na disku menej miesta, no u žiaka je skomprimovaný podstatne lepšie.

Deduplikácia

Pokiaľ si ten istý súbor nahrajú viacerí žiaci (každý do svojho priečinka), mala by zafungovať deduplikácia. Tá nie je na prvý pohľad zrejmá (neodhalí ju ani webové rozhranie TrueNAS a už vonkoncom nie Windows), no pomôžu nám dva príkazy v Shell:

  • zpool list pool-data: všímajme si údaj násobok deduplikácie (DEDUP);
  • zpool status -D pool-data: porovnajme skutočne obsadenú veľkosť na disku (allocated) a odkazovanú veľkosť (referenced).

Bitová korupcia a samoliečba ZFS

Poškodenie súboru je ťažšie nasimulovať, no nie je to nemožné. Skúsme do priečinku upload nahrať nejakú fotku, napríklad foto.jpg.

Teraz zistíme čísla sektorov, ktoré tento súbor obsadil:

sudo zdb -vv -O pool-data/public upload/foto.jpg | grep " L0 "

Vypíšu sa viaceré riadky, každý predstavuje jeden 128 KiB blok súboru. Zaujímať nás budú čísla za „L0 0:“ – sú v šestnástkovej sústave a vyjadrujú presnú adresu, kde blok začína, za ďalšou dvojbodkou je veľkosť bloku. Zvoľme si ktorýkoľvek blok, vezmime jeho adresu, prípadne pripočítajme nejaké bajty navyše (v rámci jeho veľkosti) a skúsme bajt na tejto adrese (nazvime ju A) prepísať inou hodnotou.

Najskôr si zistime UUID niektorého disku, ktorý je súčasťou diskového poľa. Môžeme ho zistiť príkazom zpool status pool-data – budú tam dve UUID, zvoľme si ktorékoľvek.

Tento postup je deštruktívny, neskúšajte ho na skutočnom súborovom serveri!

Teraz už môžeme prepísať bajt na adrese A hodnotou, ktorú si želáme, napríklad 0xFF – nezabudnime dosadiť UUID a adresu A aj s prefixom „0x“:

printf '\xFF' | sudo dd of=/dev/disk/by-partuuid/UUID bs=1 seek=$((0xA)) count=1 conv=notrunc

Ak by sme sa teraz pokúsili fotku u klienta zobraziť, server by nemusel nič čítať z disku, pretože súbor už má v operačnej pamäti (cache), preto je vhodné vykonať reštart servera, (prípadne vyvolať kontrolu stavu všetkých súborov príkazom sudo zpool scrub pool-data). Súborový systém zistí nesúlad kontrolného súčtu, poškodený blok zahodí a nahradí ho správnym blokom z druhého disku poľa. O tom sa môžeme presvedčiť príkazom:

zpool status pool-data

V stĺpci CKSUM nájdeme počet opravených blokov od posledného reštartu. A fotka sa zobrazuje bez poškodenia. Zároveň je chyba ohlásená aj v ponuke Storage → View VDEVs.

Zlyhanie celého disku

Nasimulovať zlyhanie celého disku je podstatne jednoduchšie. Nasimulujme stav, keď disk zlyhal úplne a pri štarte servera sa ani nerozbehne. Vypnime teda virtuálny server a cez VirtualBox mu disk odpojme. Po zapnutí servera uvidíme hneď v úvodnom prehľade TrueNAS pod Storage varovanie „Pool Status: DEGRADED“. V ponuke Storage → View VDEVs nájdeme pri jednom disku stav UNAVAIL. No napriek tomu môžeme so súbormi naďalej pracovať, môžeme na disk nahrať aj nové súbory – samozrejme, nebudú duplikované a ani chránené.

Samozrejme, pri výpadku disku ho chceme nahradiť novým. Preto opäť vypnime virtuálny server a cez VirtualBox vytvorme úplne nový disk, pripojme ho a zapnime server. V ponuke Storage → View VDEVs nájdeme chýbajúci disk a cez tri bodky zvolíme Replace. Pripojíme na jeho miesto nový disk a spustí sa replikácia údajov (Resilver).

Zálohovanie a replikácia

Pojmy ako RAID či zrkadlenie riešia vysokú dostupnosť dát – chránia nás pred výpadkom hardvéru. Nepredstavujú 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 replikácia

Pre zálohovanie používateľských dát ponúka ZFS mechanizmus blokovej replikácie. Neprenášajú sa jednotlivé súbory, ale celé snímky (snapshots) diskových oddielov. 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ť.

Replikáciu nastavíme v ponuke Data Protection → Replication Tasks → Add:

  1. Source: Vyberieme diskový oddiel, ktorý chceme zálohovať (pool-data/ucitel).
  2. Destination: Vyberieme cieľové úložisko – server cez bezpečné šifrované spojenie SSH.
  3. Schedule: Môžeme nastaviť automatické spúšťanie replikácie (napr. každý deň o 3:30) – prípadne nechať spúšťať replikáciu po každom vytvorení snímky disku.

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.

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. V ponuke Data Protection → Periodic Snapshot Tasks je potrebné nastaviť automatické vytváranie snímok (napr. raz denne s uchovávaním po dobu 14 dní). Proces replikácie potom v nastavených intervaloch (alebo automaticky po vytvorení novej snímky) prenesie všetky nové snímky a ich zmeny na záložný server.

Kopírovanie 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é či nové súbory. Je univerzálny, no pri obrovskom množstve malých súborov podstatne pomalší než natívna ZFS replikácia.