2007. július 22., vasárnap

Könyvblog - Rob Flickenger - Linux bevetés közben



Biztonsági mentés a pax programmal

Készítsünk hordozható másolatokat - egyszerűen


A pax, a portable archive exchange (hordozható másolatátvitel) rövidítése, és kifejezetten a különböző Unix-változatok közötti hordozhatóság megteremtésére tervezték. Van egy kevés irónia is a nevében, mivel a pax próbál békét teremteni a tar és cpio között az elsőségért oly régóta folyó háborúban. A pax segédprogram mind a kétfélle mentést képes elvégezni és visszaállítás során felismeri a csomag típusát. Lássunk először néhány egyszerű példát a pax használatára, azután a cselesebb trükkökre is rátérünk.

Másolatok létrehozása

A saját könyvtárunk mentéséhez az írható módot a w kapcsolóval állítjuk be:
cd
pax -wf .home.pax
Ebben a példában a cd parancsal léptem be a saját könyvtáramba, azután azt mondtam a pax progrmanak, hogy írja (w) egy fileba (f) - melynek a home.pax nevet adtam - a pillanatnyi könytár (.) tartalmát. Amikor a paxot használjuk, nagyon fontos, hogy ne feltkezzünk meg az f kapcsoló használatáról, amivel megadjuk a létrehozni kívánt állomány nevét. Ha elfelejtjük, furcsa karakterek jelennek meg a képernyőn, borzasztó fájdalmas hangok kíséretében. Ha figyelemmel akarjuk kísérni a működését, adjuk meg a v (verbose) kapcsolót.

Nézzük meg a létrehozott fájl típusát a file parancsal:
file home.pax
home.pax: POSIX tar archive
A fájl tartalmának megtekintéséhez az f kapcsolóval jelezzük, hogy melyik fájlt kívánjuk megtekinteni:
pax -f home.pax |more
Mivel a fájl még elég hosszú, a kimenetet átírányítottam a more parancsra, hogy oldalanként olvashassam az archívum tartalmát.
Ha a v kapcsolót is megadjuk, ls -l stílusú alakban kapjuk meg a tartalomjegyzéket. Újfent figyeljünk rá, hogy ki ne felejtsük az f kapcsolót, különben semmi nem történik, csak elveszítjük a parancssorjelet (promptot) egészen addig, amíg Ctrl+c -t nem nyomunk.

Másolatok kicsomagolása

A helyreállítás (olvasás) beállításához használjuk az r kapcsolót, miután beléptünk a célkönyvtárba. Például kicsomagoljuk a home.pax nevű fájlt a saját könyvtáram test nevű alkönyvtárába:
cd test
pax -rfv ~/home.pax
A pax programmal tar és cpio állományokból is helyre lehet állítani. Képes önműködően meghatározni a megfelelő formátumot; ugyanakkor a helyreállítás előtt a file segédprogrammal állapítsuk meg, hogy a csomag tötmörített-e. Ha igen, akkor a z kapcsolót kell használnunk.
Például a asját könyvtáramban vab egy (~) backup.old nevű állomány. Először a file parancsot használom:
file backup.old
backup: gzip compressed data, deflated,
last modified:
Sar Aug 17 14:21:12 2002, os: Unix
Mivel ez a biztonsági másolat tomörített, a következő parancsal állítom vissza a test könyvtárba:
cd test
pax -rvzf ~/backup.old
A saját könyvtáramban létezik egy backup nevű fájl is:
pax -rvf ~/backup
Az, hogy az első másolat történetesen tar csomag volt, a második pedig cpio, nem zavarta meg a paxot, ugyanakkor furcsa hibaüzeneteket kaptam volna, ha elfelejtem közölni a programmal, hogy az első fájl tömörített csomag.

Felhasználói beavatkozást igénylő helyreállítás

Helyreállításkor a pax lehetőve tesz néhány cseles dolgot, például a felhasználói beavatkozást igénylő (interactive) helyreállítást, illetve átnevezést végezhetünk az i kapcsoló megadásával, a következő parancs kiadásával:
pax -rif ~/backup
a backup nevű fájl felhasználói beavatkozást igénylő helyreállítását kezdi meg a jelenlegi munkakönyvtárba. Felhasználói beavatkozást igénylő módban a pax megjeleníti minden egyes fájl nevét, és megkérdezi, hogy mit csináljunk vele: átnevezzük helyreállítás közben, helyreállítsuk az eredeti névvel, vagy ugorjuk át és ne állítsuk helyre.
ATTENTION: pax interactive file rename operation.
drwxr-xr-x Aug 17 15:05 .
Input new name, or a "." to keep the old name,
or a "return" to skip this file.
Input>
Skipping file.
Ebben az esetben Entert nyomtam, mivel nem akartam a (.), vagyis a jelenlegi könyvtár nevét módosítani.
ATTENTION: pax interactive file rename operation.
drwxr-xr-x Jul 26 16:10 file1
Input new name, or a "." to keep the old name,
or a "return" to skip this file.
Input> old
Processing continues, name changed to: old

ATTENTION: pax interactive file rename operation.
-rw-r--r-- Jun 11 00:20 file2
Input new name, or a "." to keep the old name,
or a "return" to skip this file.
Input> .
Processing continues, name unchanged
Megfigyelhető, hogy a file1 nevét old-ra változtattam, a file2 pedig változatlan maradt. A helyreállított könyvtár listázása két fájlt mutat: egy old és egy file2 nevűt.

Alkönyvtár másolása

A pax egyik leghasznosabb tulajdonsága, hogy nagyon gyorsan képes lemásolni egy teljes könyvtárrendszert a merevlemez egy másik részére, másolási üzemmódban. A másolási mód használatához a következő lépések szükségesek:
1. Adjuk kia a cd ustasítást a forráskönyvátrban
2. Nézzük meg, hogy a célkönyvtár létezik-e; ha nem hozzuk létre az mkdir parancsal
3. Adjuk ki a következő parancsot: pax -rw . cél_könyvtár.
Figyeljük meg, hogy a másolási módban nem használjuk az f kapcsolót, mivel nem jön létre biztonsági másolat. Ehelyett a régi könyvtárrendszer közvetlenül az új helyre másolódik. Ez a parancs sokkal könyebben megjegyezhető, mint a tar megfelelője:
tar cf - .| (cd destination_directory; tar -vpxf -)
Arra figyeljünk, hogy ezt soha nem akarjuk tenni:
cd
mkdir test
pax -rw . test
A fenti példában beléptem a saját könyvtáramba létrehoztam egy test nevű könyvtárat és elindítottam a másolást. Így a test alkönyvtárak végtelen sorát kaptam, mindegyikben saját könyvtáram teljes tartalmával. Ha nem nyomom meg a Ctrl+c billentyűkombinációt, a pax a végtelenségig folytatta volna a másolást; ebben az esetben a végtelen az a pont, amikor elfogy a lemezen a hely. Erre utal a man pax következő részlete is.

Figyelem, a célkönyvtér ne legyen valamelyik fájl műveletérték (operand) vagy valamelyik fájl műveletértéken belüli kezdődő könyvtárszerkezet része, ugyanis ebben az esetben a másolás következménye beláthatatlan.

A következő trükk azonban szépen és csaknem azonnal működik:
su
Password:
cd ~user1/big_project
mkdir ~user2/big_project
chown user2 ~user2/big_project
pax -rw . ~user2/big_project
Voilá, az egész big_project könyvtárszerkezet most már megtalálható a második felhasználó saját könyvtárában is. A másolást rendszergazdaként kell végrehajtanunk a saját könyvtárból, hogy elkerülhessük a végtelen ciklus csapdáját. Ha létre kell hozni a célkönyvtárat mielőtt a másolást elkezdjük, használjuk a chown parancsot a könyvtárrendszer jogosultságainak megfelelő beállításához. A másolt könyvtárrendszer jogosultságainak kezelésével kapcsolatban a man pax nyújt további tájékozódást.

Az i kapcsolóval a könyvtárrendszer felhasználói beavatkozást igénylő módú másolásra is lehetőség nyílik:
pax -rw . ~/user2/big_project
A korábbi felhasználói beavatkozást igénylő módot használó példánkban látottakhoz hasonlóan a pax egyneként megjeleníti az összes fájlnevet, így kiválaszthatjuk, hogy mit másoljunk és mit nevezzünk át közben.

Növekményes mentések

Csináljunkvalami hasznosat a pax parancsal. Bemutatom, hogyan hozhatunk létre növekményesmentési rendszert. Példaként a genisis nevű felhazsnáló napi mentést végez a saját könyvtárának változásairól.

Először rendszergazdaként létrehozok egy könyvtárat a másolatoknak:
su
Password:
mkdir /usr/backups
Ezután létrehozok egy alkönyvtárat, és a genisis felhasználót teszem a tulajdonosává:
mkdir /usr/backup/genisis
chown genesis /usr/backup/genisis
Ezután kilépek a rendszergazda shellből és genisis felhasználóként a saját könyvátamba lépek át:
exit
cd
Majd teljes mentést készítek a saját könyvtáramról, amit a a hétfő nevű fájlban helyezek el:
pax -wvf /usr/backups/genisis/hétfő .
Most, hogy egy teljes másolatom van, napi növekményes mentéseket végezhetek az aznapi válozások tárolásásra. Tehát, amikor befejezem a keddi munkát, a következő paranacsot adom ki:
pax -wvf -T 0000 -f /usr/backups/genisis/kedd .
figyeljük meg a -T kapcsolót, ami az időt adja meg: ebben az esetben ez az éjfél (00:00). Ez arra utasítja a pax-ot, hogy csak az éjfél óta megváltozott fájlokat mentse, tehát az összes aznap módosított fájlt. Szerdán megismétlem ezt a parancsot, de a másolat nevét szerdára változtatom.

Ha van elég hely és szeretnék egy hétnél hosszabb ideig tárolni a másolatokat, nevezzük a fájlokat másként például: aug1, aug2, stb. Így is érdemes hetente egy teljes mentést készíteni, ami a napi növekvényes mentések követnek. Ha számít a tárhely nagysága, használjuk a z kapcsolót, így a másolatok tömörítettek lesznek. Felhívom a figyelmet arra is, hogy a -T kapcsoló sokkal választékosabban is hazsnálható, mint a példánkban, lásd man pax.

Fájlok kihagyása helyreállításkor

A file3 kivételével az összes fájlt a következő parancsal állítjuk helyre:
pax -rvf ~/backup -c './file3'
A c kapcsoló a kivételt jelöli. A kivételeket jelölő mintát (ami ebben az esetben a file3) egyszeres zárójelek közé kell foglalni, vagy pontosan egyező mintát használjunk, mint a fenti példában (a pax számára ez a fájl a ./file3, nem file3), vagy helyettesítő karaktert alkalmazzunk ilyen módon:
pax -rvf ~/backup -c '*file3'
Ha a minta elején használjuk a helyettesítő karaktert (*), mint a fenti példában, akkor minden olyan fájlt kihagyunk, aminek a "file3" a vége - például file3, myfile3, thatfile3.

Az n kapcsoló abban külömbözik a c kapcsolótól, hogy csak az első fájlt állítja helyre, ami a amintának megfelel. Ez azt jelenti, hogy a következő parancs nem csomagolja ki a file3, myfile3, és a thatfile3 mingyikét:
pax -rvf ~/backup -n '*file3'
Mivel a file3 az első fájl, amelyre a minta illik, egyedül ez kerül helyreállításra.

A c és n kapcsolók mentéskor is használhatók: megadhatjuk, hogy melyik fájlokat akarjuk menteni, és mit akarunk kihagyni.

Vigyázat az ext2 fájlrendszer legnagyobb mérete 2GB, ebben az esetben használjuk a split programot!

Kapcsolódó anyagok
  • Az eredeti cikk itt olvasható
  • A pax forráskód (az ast-open csomag része) itt érhető el.

*Ennek a postnak a célja az volt, hogy népszerűsítsem a könyvet és bátorístak mindenkit a téma érdeklődői közül a megvételre. A manuális digitalizálás következtében elkövetett hibákért elnézést.

2 megjegyzés:

Névtelen írta...

ez nem is olyan rossz. kosz hogy leirtad. Ki is probalom valamikor.

Robey17

[Paradox H] írta...

Szivesen