A pillanatfelvételek fontosak, akár egy egyszerű virtuális gépet futtatunk az otthoni számítógépünkön, akár egy vállalati adatbázisról van szó, amelyet folyamatosan frissítünk és módosítunk. Fontos, hogy legyenek pillanatképek, azaz a teljes fájlrendszer másolata, ahogyan az egy adott időszakban volt.
Az emberek gyakran elveszítik a fonalat, hogy hol mentek rosszul a dolgok, egy fájlt töröltek, és senki sem vette észre, hogy eltűnt. Több biztonsági mentés is eltelt, és most veszi észre, hogy egy fontos fájl hiányzik az elmúlt 5 hét összes elérhető biztonsági mentéséből. Ebben a bemutatóban megnézzük, hogyan használhatjuk a ZFS pillanatfelvételeket, és érintjük a különböző pillanatfelvételi irányelveket, amelyek optimálisan működnek mind az erőforrás-kihasználás, mind a helyreállíthatóság szempontjából.
A ZFS egyszerre rendelkezik a fájlok és könyvtárak magas szintű áttekintésével, és érti, hogyan íródnak az adatok a lemezre. Amikor fizikailag adatokat írunk a lemezre, ez diszkrét blokkokban történik. A blokkméret jellemzően 1 MB-ig terjedhet, de az alapértelmezett általában 128 KB. Nos, ez azt jelenti, hogy minden módosítás (olvasás, írás vagy törlés) a diszkrét blokkokban történik.
A copy-on-write mechanizmus biztosítja, hogy amikor egy blokkot módosítanak, ahelyett, hogy közvetlenül a blokkot módosítanák, egy másolatot készít a blokkról, és a szükséges módosításokat az új blokkban végzi el.
Ez különösen hasznos olyan esetekben, amikor, mondjuk, áramszünet van, és a rendszer összeomlik, miközben új adatokat írtak a lemezre. Ha ez egy hagyományos fájlrendszerben történik, a fájljaid megsérülnek vagy lyukasak maradnak. De ha ZFS-t használsz, akkor lehet, hogy elveszíted a folyamatban lévő tranzakciót, miközben ez történt, de a fájljaid utolsó érvényes állapota érintetlen marad.
A pillanatfelvételek is erre a funkcióra támaszkodnak, méghozzá elég erősen. Amikor pillanatfelvételt készítünk egy adott adatkészletről (“adatkészlet” a ZFS kifejezése a fájlrendszerre), a ZFS csak a pillanatfelvétel készítésének időbélyegét rögzíti. Ennyi! Nem történik adatmásolás, és nem fogyaszt plusz tárhelyet.
Csak amikor a fájlrendszer megváltozik, és a benne lévő adatok eltérnek a pillanatfelvétel adataitól, akkor kezd el a pillanatfelvétel plusz tárhelyet fogyasztani. A motorháztető alatt a következő történik – Ahelyett, hogy a régi blokkokat idővel újrahasznosítaná, a ZFS megtartja őket. Ez szintén javítja a tárolókihasználtságot. Ha egy 20 GB-os adatkészletről készítünk pillanatfelvételt, és csak itt-ott módosítunk néhány szöveges fájlt, a pillanatfelvétel csak néhány MB helyet foglalhat.
Pillanatfelvételek létrehozása
A pillanatfelvételek használatának bemutatásához kezdjük egy olyan adatkészlettel, amely sok szöveges fájlt tartalmaz, csak hogy egyszerű legyen a dolog. A bemutatóhoz használt virtuális gépen a FreeBSD 11.1-RELEASE-p3 fut, ami az írás időpontjában elérhető legújabb stabil kiadás. A root fájlrendszer alapértelmezés szerint a zroot poolra van mountolva, és sok ismerős könyvtár, mint például a /usr/src, /home, /etc mind saját adathalmazok a zrootra vannak mountolva. Ha nem tudjuk, mit jelent a pool (vagy a zpool) a ZFS köznyelvben, akkor érdemes utánaolvasni, mielőtt folytatnánk.
A FreeBSD-n alapértelmezésben megtalálható számos fájlrendszer, illetve adatkészlet egyike a következő: zroot/usr/src
Hogy megnézzük a tulajdonságait, futtassuk a következő parancsot.
:~$ zfs list zroot/usr/src
Amint látjuk, 633 MB tárhelyet használ. Az operációs rendszer teljes forrásfáját tartalmazza.
Vegyünk egy pillanatfelvételt a zroot/usr/src
:~$ zfs snapshot zroot/usr/
A @ szimbólum határolóként szolgál az adathalmaz és a pillanatfelvétel neve között, ami esetünkben a snapshot1.
Most nézzük meg a pillanatkép állapotát, amint létrejön.
A parancs futtatásával:
zfs list -rt all zroot/usr/src
Láthatjuk, hogy a pillanatkép nem használ extra helyet, amikor megszületik. Nincs szabad hely sem, mivel szigorúan csak olvasható adatkészletről van szó, maga a pillanatkép nem tud növekedni, módosulni vagy zsugorodni. Végül pedig nincs sehova felcsatolva, ami teljesen elszigeteli az adott fájlrendszer-hierarchiától.
Most távolítsuk el az sbin könyvtárat az /usr/src/
:$ rm /usr/src/sbin
A pillanatfelvételre pillantva most azt látjuk, hogy az megnőtt,
Ez azért várható, mert itt a copy-on-write mechanizmus működik, és a fájlok törlése (vagy módosítása) azt eredményezte, hogy több adat csak a pillanatfelvételhez kapcsolódik, nem pedig a ténylegesen használt adatállományhoz.
Figyeljünk a REFER oszlopra a fenti kimeneten. Ez megadja az adatkészleten elérhető adatok mennyiségét, míg a USED oszlop csak azt mutatja, hogy mennyi helyet foglal el a fizikai lemezen.
A ZFS Copy-On-Write mechanizmusa gyakran ad ilyen ellentétes eredményeket, amikor egy fájl törlése azt a látszatot kelti, mintha most több helyet használnának, mint korábban. Azonban az eddigi olvasás után már tudod, hogy valójában mi történik!
Mielőtt befejeznénk, állítsuk vissza az sbin-t a snapshot1-ről. Ehhez egyszerűen futtassuk le:
:/usr/src$ zfs rollback zroot/usr/
Snapshoting Policy
A következő kérdés, amit fel kell tennünk – Milyen gyakran szeretnénk elkészíteni a pillanatfelvételeket? Bár ez vállalkozásonként eltérő lehet, vegyük példának egy nagyon dinamikus, gyakran változó adatbázist.
Kezdésnek körülbelül 6 óránként kezdjük el a pillanatfelvételek készítését, de mivel az adatbázis nagyon sokat változik, hamarosan kivitelezhetetlenné válna a számos készített pillanatfelvétel tárolása. A következő lépés tehát az lenne, hogy a pillanatfelvételeket, amelyek régebbiek, mint mondjuk 48 óra, kitisztítanánk.
A probléma most az lenne, hogy visszaállítsunk valamit, ami 49 órával ezelőtt elveszett. Ennek a problémának a megkerülése érdekében megtarthat egy vagy két pillanatfelvételt ebből a 48 órás előzményből, és megtarthatja őket egy hétig. Töröld őket, amikor ennél idősebbek lesznek.
És ha így tudod folytatni, akkor egészen a rendszer keletkezéséig bezsúfolhatod a pillanatfelvételeket, csak a gyakoriság csökkenő sorrendjében. Végül szeretném felhívni a figyelmet arra, hogy ezek a pillanatfelvételek READ-ONLY, ami azt jelenti, hogy ha megfertőződsz egy zsarolóprogrammal, és az összes adatodat titkosítják (módosítják). Ezek a pillanatfelvételek nagy valószínűséggel még mindig érintetlenek maradnak.