Archiválás, mentés
A UNIX rendszer üzemeltetésének szerves és nélkülözhetetlen részét képezi az állományrendszerek rendszeres archiválása, mentése. Ez természetesen a rendszeradminisztrátor gondja és kötelessége, de a mindennapi életben gyakran előfordulnak olyan szituációk, amikor a felhasználónak is szüksége van arra, hogy állományait valamilyen hordozható médiára mentse, akár a biztonság növelése céljából, akár azért, mert máshova kell telepítenie. E szakaszban hangsúlyozottan ezen utóbbi problémával foglalkozunk, és nem érintjük azokat a parancsokat, amelyek kifejezetten teljes állományrendszerek mentésére szolgálnak. Az általunk érintett parancsok a cpio, a tar és a dd. Majdnem minden rendszer kínál ezeken kívül újabb és többet tudó parancsokat, ezekkel csak egy gond van, de az annál nagyobb - nem elterjedtek és nem kompatibilisek egymással. E három parancs viszont minden gépen hozzáférhető, ezért tárgyalásunkban ezekre szorítkozunk.
A cpio parancs három üzemmóddal rendelkezik, ezeket az első opcióbetűvel adjuk meg.
cpio -o
optionscpio -i
options patterncpio -p
options dircpio -o
hatására a standard bemenetről egy fájlneveket tartalmazó listát olvas, s ezekből a fájlokból készít archivumot a standard kimenetre. Az archivumú fájl őrzi az eredeti állományok teljes elérési útvonalát, s minden eredeti fájlinformációt (tulajdonosok, hozzáférési jogok stb).cpio -i
hatására a standard inputról az általunk megadott mintára illeszkedő fájlokat olvassa be. A cpio a standard bemenetet egy megelőző cpio -o parancs eredményének tételezi fel, ha más formátumú bemenetet olvas, a beolvasás sikertelen. A beolvasandó fájlok nevének megadásához a shell fájlnév behelyettesítésben használható metakarakterei is megadhatóak, tehát a '?*[ ]' karakterek, valamint a '!' karakter, ami negálást jelent. Ha nem adunk meg fájlnév mintát, a cpio az archivum összes fájlját beolvassa.A beolvasott fájlokat a munkakatalógusban hozza létre, az archivumban tárolt nevekkel, de alapértelmezésben csak akkor, ha az archivumban lévő fájl újabb, mint a gépen lévő változat. A beolvasott állomány módjai az archivumra kimentett állományénak felelnek meg, a tulajdonos és a csoport azonban a cpio parancsot futtató felhasználóéval lesz azonos. Ez alól kivétel az, ha privilégizált felhasználóként dolgozunk, ekkor megmarad az archivumon tárolt tulajdonos és csoport információ. A -a opció visszaállítja az archivum szerinti elérési, -m pedig a módosítási időt.
cpio -p
hatására a standard inputról katalógus és fájlnevek listáját olvassa, a megnevezett állományokat pedig a megadott katalógus alá helyezi el.Az alábbi példában a munkakatalógus alatti állományrendszert hajlékonylemezre mentjük, majd szintén a cpio paranccsal, visszaolvassuk:
find . -print | cpio -oBvc >/dev/rfd0
cpio -iBvcam </dev/rfd0
A mentésnél a find parancs szolgáltatta a fájlnevek listáját, amelyekből az archivum készült; az archivumfájlt a standard kimenet átirányításával helyeztük a hajlékonylemezre. Visszamentésnél az archivumfájl beolvasása egy menetben hozza létre a szükséges fájlokat és katalógusstruktúrákat.
Az alábbi példában teljes katalógusstruktúrákat másolunk a newdir katalógusba:
find . -depth -print | cpio -pdlmv newdir
Nagy erénye a cpio-nak a többi archiváló paranccsal szemben, hogy lehetővé teszi a több adathordozóra történő mentést, ha az adatok egy lemezre nem férnek rá. Az első lemez beteltekor az alábbi figyelmeztetést írja ki: "If you want to go on, type device/file name when ready." Újra be kell gépelni a perifériaegység nevét, s a mentés/visszaállítás a következő lemezről folytatódik.
A cpio legfontosabb opciói a következők:
-a
Hozzáférési időket állítja vissza.-A
A fájlokat hozzáfűzi a már létező archivumhoz. Csak a -O opcióval együtt, és fájlformátumú, vagy lemezen lévő archivumoknál alkalmazható.-b
Szavanként megcseréli a bájtokat. Csak az -i opció esetén használható.-B
ha karakter típusú eszközmeghajtót adtunk meg perifériaként, 10 blokkos egységekben ír a perifériára. (lásd -C opció)-c
ASCII formátumú fejléceket generál az archivumhoz (akkor van jelentősége, ha eltérő architekturájú gépek közt akarjuk az archiv fájlt mozgatni).-C
size A blokkméretet határozza meg (bájtokban mérve). A default 1 blokk, azaz 512 karakter.-d
Szükség esetén létrehozza a nem létező katalógusokat.-E
file file tartalmazza az archivumból visszamentendő katalógusok és fájlok listáját.-f
A megadott mintákat nem tartalmazó fájlokat menti vissza az archivumból.-I
file A megnevezett file perifériáról olvas, ha végzett az első adathordozóval, RETURN hatására folytatja a következővel. Csak a -i opcióval együtt használható.-k
Átugorja a rossz fejlécet tartalmazó és sérült fájlokat. Csak a -i opcióval együtt használható.-l
Ahol lehet, másolás helyett láncolást hajt végre. Csak a -p opció esetén hatásos.-L
Követi a szimbolikus láncokat (alapértelmezés szerint nem).-O
file A megnevezett file perifériára ír, az adathordozó beteltekor RETURN hatására folytatja a következő lemezen. Csak a -o opcióval együtt használható.-r
Interaktív módon átnevezi a fájlokat. Egyenként kiírja a fájlneveket, az újsor karakter hatására átlépi az adott fájlt, a '.' (pont) karakter hatására az archivumból visszaállítja az eredeti nevet és elérési utat.-s
Félszavakban cseréli fel a bájtokat.-S
Félszavakat cserél fel szavakban.-t
Csak az archivum tartalmát listázza ki.-u
Feltétel nélkül állítja vissza az állományt, akkor is, ha a gépen lévő frissebb, mint az archivum.-v
Bőbeszédű üzemmód, kiírja a fájlok neveit. A -t opcióval kombinálva ls -l formátumú listázást kapunk.A tar parancs, ellentétben a cpio-val, valódi archivumkezelő program, a már archivumban lévő fájlokat törölhetjük, lecserélhetjük vagy frissíthetjük. Másik nagy előny a cpio ellenében, hogy mindig rekurzívan dolgozik, azaz a megadott katalógusnevek az adott pontból induló teljes állományfát jelentik; ennek következtében a kezelendő fájlok megadása sokkal egyszerűbb, nem kell egy külön programmal összeszedni azokat. Komoly hiányossága viszont, hogy a többlemezes mentést nem támogatja.
A tar parancsnak is számos üzemmódja van, ezeket a parancsnév utáni első betűvel adjuk meg, ezt a tar speciális zsargonjában kulcsnak (key) hívják, s ezt követik az egyéb opciók. (A '-' karakter kirakása nem kötelező.)
A tar általános hívási formája a következő:
tar
key[options] file(s)...Az alapvető kulcsok és a hozzájuk tartozó üzemmódok a következők:
c
Új archivum létrehozása.r
A megnevezett fájlokat az archivum végére fűzi.u
Archivum frissítése: csak a még nem archivált, vagy az archivumban szereplőnél frissebb fájlokat menti el.x
Fájlok visszaállítása az archivumból.t
Archivum listázás. Fájlnév hiányában a teljes állományt listázza.A tar fontosabb opciói az alábbiak:
b
size Blokkolási tényező, azt adja meg, hogy hány blokkos egységekben írja az archivumot a perifériára. (Alapértéke 1, a maximum 20).B
Kierőszakolja az adott blokkméretű adatmennyiség olvasását, ha kell, többszörös olvasási műveleteket végrehajtva. Hálózatról, vagy csövön keresztül olvasva ugyanis nem mindig érkezik teljes blokkméretnyi adat, s ez olvasáskor megbolondíthatja a tar blokkméret felismerését.f
file Az archivum (tarfile) nevét adja meg, ami lehet akár egy periféria meghajtó neve, vagy egy közönséges fájlé. Ha az f opció szerepel, de file nem, a TAPE shell-változó, ennek hiányában pedig a /etc/default/tar fájl által megadott periférianevet használja. A '-' karakterrel lehet a standard ki-, illetve bemenetet megadni.h
Követi a szimbolikus láncokat, mintha közönséges fájlok vay katalógusok lennének. (Alapértelmezés szerint nem követi.)l
Ha nem tudja feloldani az archiválandó fájl által követett láncokat, hibát jelez.m
A visszamentett állományok módosítási idejét felülírja, az archivumban szereplő helyett a visszamentés ideje lesz.o
A visszamentett állományok tulajdonosi és csoport jellemzőit felülírja a tar programot futtató felhasználóéval.P
A visszamentett fájlok hozzáférési jogait az eredetiek szerint állítja be, az érvényes umask beállítást figyelmen kívül hagyva.v
Műveletek közben kiírja az érintett fájlok neveit, s a műveleti kulcsot.w
Interaktív módban, minden fájlművelet előtt visszaigazolást kér.X
file A megadott file állomány azon katalógusok és fájlok neveit tartalmazza, amelyek kimaradnak a tar műveleteiből (cxt). Több X opciót is megadhatunk egy parancsban, de egy X karakterhez csak egy fájlnév argumentum tartozhat.I
file A megadott file állományban szereplő neveket úgy kezeli, mintha parancssori fájlnév argumentumként lettek volna beírva. (A kizáró X felsorolás erősebb mint az I, ezért ha egy fájl mindkét felsorolásban szerepel, ki fog maradni az adott tar műveletből.Az alábbi példánál tételezzük fel, hogy a nosave nevű fájl tartalma a következő:
/usr/mail
/usr/man
/usr/share
/etc/inet
/tmp
Az alábbi parancs kiadásával a teljes állományrendszert szalagra mentjük, a /usr/mail, /usr/man, /usr/share, /etc/inet és /tmp katalógusfák kivételével:
tar cvf /dev/rmt/0h -X nosave /
A fenti példával kapcsolatban egy dologra szeretnénk még felhívni a figyelmet, és ez a relatív elérési utak használatának fontossága. A tar állomány az eredeti elérési útvonalakat megőrzi, ha abszolút elérési nevet adtunk, akkor azt, ha relatívot, akkor azt. Tegyük fel, hogy az előbbi példa alapján elmentett anyagunkból csak a /users/demo katalógusfát szeretnénk visszahozni, de valamilyen oknál fogva a /old/users/demo néven. Mivel visszaállításkor is az archivumban lévő elérési utat használja a rendszer, ha a katalógusfát abszolút néven mentettük el, nem tudjuk máshova rakni, mint ahol eredetileg volt! Ezért mindig ügyeljünk arra, hogy a tar által mentendő katalógusfákat reletív módon címezzük, például a fenti példa helyesen így nézne ki:
cd /; tar cvf /dev/rmt/0h -X nosave .
Ennek hatására a /users/demo katalógusfa ./users/demo néven lesz archiválva, s visszamenteni a következőképpen tudjuk az új helyre:
cd /old; tar xvf /dev/rmt/0h ./users/demo
E parancs hatására a /old katalógus alatt létrejön az elmentett teljes /users/demo katalógusfa.
A dd parancsról már volt szó a segédprogramok között, itt elsősorban azért kerül elő, mert távoli mentések esetén, amikor nem a lokális gépen lévő perifériára mentjük anyagainkat, gyakran használják a távoli periféria kezelésére, az alábbihoz hasonló módon:
tar cvfb - 20 . | rsh rhost dd of=/dev/rmt/0m bs=20b
illetve
rsh rhost dd if=/dev/rmt/0m bs=20 | tar xvfbB - 20
A fenti parancssorozatban a munkakatalógust és az az alatti fájlrendszert mentjük el az rhost nevű távoli gépen lévő, /dev/rmt/0n nevű mágnesszalagos egységre, majd vissza. A tar a standard kimenetre küldi a mentendő anyagokat, az rhost távoli gép pedig a standard bemenetről olvassa a mentendő anyagokat, s az of opcióval megnevezett perifériára menti el, 20 blokkos egységekben (ez a maximális blokkméret, s kiváltképpen nagytömegű adatok mentésénél célszerű beállítani, ha az adott periféria ezt támogatja). A tar parancs esetében is beállítottuk a 20 blokkos blokkméretet (-b 20), s a második parancsnál, a visszamentésnél a -B opcióval gondoskodtunk arról is, hogy a csövön keresztül pontosan a megadott blokkméretű csomagok menjenek át. (Ha erről külön nem intézkedünk, a hálózaton, illetve csöveken keresztül nem teljesen feltöltött csomagok is átmehetnének.)
Szükség esetén kihasználhatjuk a dd parancsnak azt a lehetőségét is, hogy eltérő lehet a bemeneti és a kimeneti blokkméret. Ha például az adott periféria támogatja nagyobb blokkméret használatát (jellemzően a DAT kazettáknál és más nagykapacitású tárolóknál), akkor a dd parancs a
dd ibs=20b obs=126b
vagy hasonló opciókkal is használható. (Példánkban 20 blokkos egységekben olvastatunk és 126 blokkos egységekben írunk a médiára. Ne felejtsük, hogy a dd bájtokban számol, a b karakter jelzi a blokkos méretmegadást.)