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

A cpio parancs három üzemmóddal rendelkezik, ezeket az első opcióbetűvel adjuk meg.

cpio -ooptions

cpio -ioptions pattern

cpio -poptions dir

cpio -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

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 parancs

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.)

 

Tartalomjegyzék