Snapshoturile sunt importante fie că rulați o simplă mașină virtuală pe computerul de acasă, fie că este vorba de o bază de date de întreprindere care este actualizată și modificată în mod constant. A avea instantanee, adică o copie a întregului sistem de fișiere așa cum era la o anumită perioadă de timp, este important.
Oamenii pierd adesea urma unde lucrurile au mers prost, un fișier a fost șters și nimeni nu a observat că a dispărut. Au trecut mai multe copii de rezervă și acum vă dați seama că un fișier important lipsește din toate copiile de rezervă disponibile din ultimele 5 săptămâni. În acest tutorial, vom vedea cum să folosim instantanee ZFS și vom aborda diverse politici de instantanee care ar funcționa în mod optim, atât din punct de vedere al utilizării resurselor, cât și al recuperabilității.
ZFS are atât imaginea de ansamblu la nivel înalt a fișierelor și directoarelor, cât și înțelege modul în care datele sunt scrise pe disc. La scrierea fizică a datelor pe un disc, aceasta se face în blocuri discrete. În mod obișnuit, dimensiunea blocului poate ajunge până la 1 MB, dar cea implicită este de obicei de 128 KB. Acum, acest lucru înseamnă că fiecare modificare (citire, scriere sau ștergere) se va întâmpla în blocurile discrete.
Mecanismul de copiere la scriere asigură că ori de câte ori un bloc este modificat, în loc să modifice direct blocul, se face o copie a blocului cu modificările necesare efectuate pe noul bloc.
Acest lucru este deosebit de util în cazurile în care, să zicem, există o pană de curent și sistemul dumneavoastră se blochează în timp ce se scriu date noi pe disc. Dacă acest lucru se întâmplă într-un sistem de fișiere tradițional, fișierele dvs. vor fi corupte sau vor rămâne cu găuri în ele. Dar dacă folosiți ZFS, este posibil să pierdeți tranzacția în curs de desfășurare în timp ce se întâmpla acest lucru, dar ultima stare validă a fișierelor dvs. va rămâne neatinsă.
Snapshot-urile se bazează, de asemenea, pe această funcționalitate, și destul de mult de fapt. Atunci când faceți un instantaneu al unui anumit set de date („dataset” este termenul ZFS pentru un sistem de fișiere), ZFS înregistrează doar data și ora la care a fost făcut instantaneul. Asta este tot! Nu se copiază date și nu se consumă spațiu de stocare suplimentar.
Doar atunci când sistemul de fișiere se modifică, iar datele din acesta diferă de cele din instantaneu, instantaneul începe să consume spațiu de stocare suplimentar. Ceea ce se întâmplă sub capotă este următorul lucru – În loc să recicleze blocurile vechi în timp, ZFS le păstrează. Acest lucru îmbunătățește, de asemenea, utilizarea spațiului de stocare. Dacă faceți un instantaneu al unui set de date de 20GB și modificați doar câteva fișiere text ici și colo, este posibil ca instantaneul să ocupe doar câțiva MB de spațiu.
Crearea de instantanee
Pentru a demonstra utilizarea instantaneelor, să începem cu un set de date care are o mulțime de fișiere text, doar pentru a simplifica lucrurile. Mașina virtuală pe care o voi folosi pentru demonstrație rulează FreeBSD 11.1-RELEASE-p3, care este cea mai recentă versiune stabilă disponibilă la momentul redactării acestui articol. Sistemul de fișiere root este montat în mod implicit pe pool-ul zroot și multe dintre directoarele familiare, cum ar fi /usr/src, /home, /etc, sunt toate seturi de date proprii montate pe zroot. Dacă nu știți ce înseamnă un pool (sau un zpool), în vernacularul ZFS, ar merita să citiți despre asta înainte de a continua.
Unul dintre multele sisteme de fișiere, sau seturi de date, care vin în mod implicit pe FreeBSD este: zroot/usr/src
Pentru a vedea proprietățile acestuia, rulați următoarea comandă.
:~$ zfs list zroot/usr/src
După cum puteți vedea, acesta folosește 633 MB de stocare. Acesta conține întregul arbore sursă pentru sistemul de operare.
Să luăm un instantaneu din zroot/usr/src
:~$ zfs snapshot zroot/usr/
Simbolul @ acționează ca un delimitator între setul de date și numele instantaneu, care în cazul nostru este instantaneu1.
Acum să ne uităm la starea instantaneului pe măsură ce este creat.
Executând comanda:
zfs list -rt all zroot/usr/src
Vezi că instantaneul nu folosește spațiu suplimentar atunci când se naște. Nu există nici spațiu disponibil, deoarece este un set de date strict de citire, instantaneul în sine nu poate crește, modifica sau micșora. În cele din urmă, nu este montat nicăieri, ceea ce îl face complet izolat de ierarhia sistemului de fișiere dat.
Acum, haideți să eliminăm directorul sbin din /usr/src/
:$ rm /usr/src/sbin
Urmărind instantaneul veți vedea acum că acesta a crescut,
Acest lucru este de așteptat deoarece aici acționează mecanismul de copiere la scriere, iar ștergerea (sau modificarea) fișierelor a dus la asocierea mai multor date doar cu instantaneul și nu cu setul de date utilizat efectiv.
Observați coloana REFER în rezultatul de mai sus. Aceasta vă oferă cantitatea de date accesibile din setul de date, în timp ce coloana USED vă arată doar cât de mult spațiu este ocupat pe discul fizic.
Mecanismul de copiere la scriere al ZFS dă adesea aceste rezultate contra-intuitive, în care ștergerea unui fișier ar face să pară că acum se folosește mai mult spațiu decât înainte. Cu toate acestea, după ce ați citit până acum, știți ce se întâmplă de fapt!
Înainte de a termina, să recuperăm sbin-ul din snapshot1. Pentru a face acest lucru, pur și simplu rulați:
:/usr/src$ zfs rollback zroot/usr/
Snapshotting Policy
Următoarea întrebare care trebuie pusă este – Cât de des doriți să faceți instantanee? Deși poate varia de la o întreprindere la alta, să luăm exemplul unei baze de date foarte dinamice care se schimbă din când în când.
Pentru început ați începe să luați instantanee la fiecare 6 ore sau cam așa ceva, dar pentru că baza de date se schimbă atât de mult, ar deveni curând imposibil să stocați toate numeroasele instantanee create. Așadar, următorul pas ar fi să eliminați instantaneele care sunt mai vechi de, să zicem, 48 de ore.
Acum, problema ar fi să recuperați ceva care a fost pierdut acum 49 de ore. Pentru a ocoli această problemă, puteți păstra unul sau două instantanee din acel istoric de 48 de ore și să le păstrați timp de o săptămână. Epurați-le când devin mai vechi de atât.
Și dacă puteți continua în acest fel, ați putea înghesui instantanee până la însăși geneza sistemului, doar că în ordinea descrescătoare a frecvenței. În cele din urmă, aș dori să subliniez faptul că aceste instantanee sunt READ-ONLY, ceea ce înseamnă că dacă sunteți infectat de un ransomware și vă sunt criptate (modificate) toate datele. Aceste instantanee ar fi, cel mai probabil, încă intacte.
.