1.6 TrueNAS – testovanie ZFS funkcií
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).