Az előző post a törölt fájlok visszaállításáról igazából egy bevezető akart ám lenni! Amiről most írni akarok, arra egy kolléga hívta fel a figyelmemet, ugyanis Neki van egy Eee PC-je. Ezen a furmányos kis szerkezeten nyilvánvalóan sok orosz mérnök dolgozhatott, mivel tele van nekem tetsző apró kis trükkökkel. Ilyen példáaul a unionfs használata.
A névből kiviláglik, hogy valamiféle fájlrendszerről van szó. Mit tud ez? A segítségével logikailag egyesíteni lehet különféle (fájlrendszerbeli) könyvtárakat, eközben a fizikai tartalmukat külön lehet tartani. Praktikusan egy példán keresztül: Egy (amúgy nyilván csak olvasható, readonly = ro) CD-ROM tartalmát "összefésüljük" egy írható, merevlemezen lévő könyvtárral egy fájlrendszerbe. Kezdetben, ha a fájlrendszert nézzük, a CD-ROM tartalmát láthatjuk, de úgy, hogy az írható-olvasható (read-write = rw) - legalábbis annak látszik a unionfs miatt. Ha bármelyik fájlt átírjuk, vagy újakat hozunk létre, akkor a unionfs lemásolja a CD-ROM-ról a fájlt a merevlemezre (Copy on write = cow), és ott megcsinálja a módosítást. Tehát azokat a fájlokat, amelyeket változtattunk, már a merevlemezről olvassa fel, a változatlanokat meg a cd-romról. Következésképpen, a CD-ROM tartalmazza az eredeti változatot, a merevlemez pedig a változásokat; mi mégis úgy látjuk, mintha egyetlen fájlhalmaz lenne. Ha el akarjuk dobni valamelyik változtatást, akkor csak le kell törölni az rw könyvtárból a fájlt, és látni fogjuk a CD-ROM-on lévő ro változatát (de persze újra átírhatjuk). Ez marha jó, hiszen vissza tudjuk gördíteni az állapotot egy előző "jó" állapotra. Ha pedig úgy döntünk, hogy új "jó" állapotot (snapshot) készítünk, akkor kiírjuk egy új CD-re az egészet, a régi meg töröljük/kidobjuk.
Namost felejtsük el a CD-ROM-ot gyorsan, és helyettesítsük be egy readonly partícióval. Elértünk a cím magyarázatához: Ha nagyinak, vagy nem túl hozzáértő havernak adnánk oda egy disztribúciót, esetleg pl. egy iskolába gyártunk desktop gépeket, amelyeken a változtatásokat szeretnénk minden nap egy mozdulattal ledúrni, akkor megtehetjük így. És persze ha CD-ről vagy USB penről bootoló rendszert gyártunk, akkor is hasznos lehet (utóbbi esetben azért, mert az USB penek olcsók, ezért sok embernek eszébe jut egy hordozható linux telepítése, amit bedug bármelyik gépbe és megy. Csakhogy ezek az USB-s memóriák nem arra vannak ám tervezve! Kibírnak mondjuk 100,000 írást, aztán kuka. És egy oprendszer sűrűn írogat ám...), RAMdisk-kel karöltve (azaz a rendszer ro, a változtatások a memóriában tárolódnak, kikapcsolásig - tipikus live cd viselkedés).
És ha mégis változtatásra lenne szükség, hát semmi gond; fel lehet mountolni rw-be a rendszerpartíciót, megtenni a változtatásokat, ezzel új "snapshot"-ot hozva létre. A snapshotok között a user meg hadd tomboljon...
Hála az Ubuntusoknak, sajnos a unionfs, illetve a későbbiekben bemutatandó aufs is initrd-n keresztül érhető el kényelmesen. Ez azt jelenti, hogy ha gyári kernelt használunk, akkor az apt-get-tel lehúzzuk a támogatást és kész. Ha saját kernelünk van, akkor előbb meg kell patch-elni a unionfs vagy aufs oldaláról letöltött patch-csel. A kernel patch-ekről ("foltokról") fogok is írni a kernel-sorozatban, és majd bemutatom a unionfs patch-ével a teendőket, de most maradnék az egyszerűbb megoldáson, hogy átláthatóbb maradjon a folyamat.Összefoglalva tehát: A unionfs egy közös nézetet biztosít különféle, amúgy fizikailag elkülönülő fájlok számára. Magyarul, két (fájl)halmazból uniót képez.
Teendők
Tehát, amit szeretnénk elérni:
1. A rendszer egy ro partícióra legyen telepítve
2. Legyen egy rw partíció, amely csak a változtatásokat tartalmazza
3. Viszonylag egyszerűen gyárthassunk új snapshotot (a rendszer új változatát), amit úgy állítunk elő, hogy az rw-n lévő változásokat visszamásoljuk az ro-ra (commit).
4. Jó ötletnek tartom a /home-ot nem belevonni a játékba, ez legyen egy harmadik partíció, amit nem bántunk. Hiszen ha gyalulunk, a user home-ját (hacsak nem a Pokoli Operátor vagyunk személyesen) nem kéne eltüntetni egy laza mozdulattal. Persze magánügy... ;-)
(folyt.köv.)