18.12. Alapvető tudnivalók a biztonsági mentésről

A dump(8), tar(1) és cpio(1) a három legfontosabb biztonsági mentésekkel kapcsolatos program.

18.12.1. Mentés és helyreállítás

A UNIX® típusú rendszerekben a biztonsági mentést hagyományosan a dump és restore programok végzik. A meghajtókat lemezblokkok összeségeként kezelik, az állományrendszerek által létrehozott állományok, linkek és könyvtárak szintje alatt. Eltérően más, biztonsági mentést végző szoftverektől, a dump az adott eszközön egy egész állományrendszert képes lementeni. Nem képes csak az állományrendszer vagy egy több állományrendszerre kiterjedő könyvtárszerkezet egy részét lementeni. A dump nem állományokat és könyvtárakat ír a szalagra, hanem nyers adatblokkokat, amelyek állományokat és könyvtárakat formáznak. A restore parancs az adatokat alapértelmezés szerint a /tmp könyvtárba tömöríti ki. Ha nem lenne elegendő helyünk a /tmp könyvtárban, akkor a TMPDIR környezeti változó átállításával ehelyett megadhatunk egy olyat, ahol már kellő mennyiségű terület áll rendelkezésre a restore akadálytalan lefutásához.

Megjegyzés: Ha a dump parancsot a gyökér könyvtárban adjuk ki, akkor nem fogja lementeni a /home vagy /usr vagy bármilyen más könyvtárat, mivel ezek jellemző módon más állományrendszerek csatlakozási pontja vagy más állományrendszerekre mutató szimbolikus linkek.

A dump parancsnak vannak olyan rigolyái, amelyek még az AT&T UNIX 6. verziójából (1975 környékéről) maradtak vissza. Az alapértelmezett paraméterezése 9 sávos szalagokat feltételezi (6250 bpi), nem pedig a napjainkban elterjedt nagy írássűrűsségű (egészen 62 182 ftpi-s) adathordozókat. Ezek az alapértelmezések természetesen paranccsorból felülbírálhatóak, és így a manapság alkalmazott szalagos meghajtók teljes kapacitása is kihasználható vele.

Emellett az rdump és rrestore programok segítségével hálózaton keresztül is le tudjuk menteni az adatainkat egy másik számítógépre csatlakoztatott szalagos egységre. Mind a két program az rcmd(3) és a ruserok(3) parancsokat használja a távoli szalagos meghajtó eléréséhez. Az rdump és rrestore paramétereinek a távoli számítógép használatához kell illeszkedniük. Amikor egy FreeBSD rendszerű számítógépet az rdump paranccsal egy Sun rendszerű, komodo nevű számítógépre mentünk, amelyhez egy Exabyte szalagos meghajtó csatlakozik, akkor ezt a írjuk be:

# /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1

Figyelem: az .rhosts állományon keresztül hitelesítésnek megvannak a maga biztonsági kockázatai. Ne felejtsük el felmérni ezt a saját környezetünkben sem.

A dump és restore parancsokat az ssh használatával még biztonságosabbá tehetjük.

Példa 18-1. A dump használata az ssh alkalmazással

# /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
          célfelhasználó@cél.gép.hu dd of=/nagyállományok/dump-usr-l0.gz

Vagy az RSH környezeti változó megfelelő beállításával használhatjuk a dump beépített módszerét:

Példa 18-2. A dump használata az ssh alkalmazással, az RSH környezeti változó beállításával

# RSH=/usr/bin/ssh /sbin/dump -0uan -f célfelhasználó@cél.gép.hu:/dev/sa0 /usr

18.12.2. tar

A tar(1) is az AT&T UNIX 6. verziójáig nyúlik vissza (tehát nagyjából 1975-ig). A tar az állományrendszerrel szoros együttműködésben dolgozik, állományokat és könyvtárakat ír a szalagra. A tar ugyan nem ismeri a cpio(1) által felkínált összes lehetőséget, de nincs is szüksége olyan szokatlan paranccsoros összekapcsolásokra, mint a cpio parancsnak.

A FreeBSD 5.3 vagy későbbi változataiban a GNU tar és az alapértelmezés szerinti bsdtar egyaránt elérhető. A GNU változat a gtar paranccsal hívható meg. Az rdump parancshoz hasonló felírásban képes kezelni a távoli eszközöket. Tehát így tudjuk használni a tar parancsot a komodo nevű Sun számítógép Exabíte szalagos meghajtójának elérésére:

# /usr/bin/gtar cf komodo:/dev/nsa8 . 2>&1

Ugyanez eltérhető a bsdtar használatával is, amikor az rsh programmal összekapcsolva küldünk át a távoli szalagos egységre.

# tar cf - . | rsh hálózati-név dd of=szalagos-eszköz obs=20b

Ha a hálózaton keresztül mentés során fontos számunkra a biztonság, akkor az rsh parancs helyett az ssh parancsot használjuk.

18.12.3. cpio

A cpio(1) eredetileg a UNIX szalagos programjai és szalagos egységei között közvetített. A cpio parancs (többek közt) képes a byte-ok sorrendjének felcserélésére, több különböző archívum formátuma szerint írni és adatokat közvetíteni más programok felé. Ez utóbbi lehetősége miatt a cpio kíválóan alkalmas a telepítőeszközök számára. A cpio nem képes bejárni a könyvtárszerkezetet, és az állományok listáját a szabványos bemeneten keresztül kell megadni neki.

A cpio nem támogatja a biztonsági mentés átküldését a hálózaton. Programok összekapcsolásával és az rsh használatával tudunk adatokat küldeni távoli szalagos meghajtókra.

# for f in könyvtár_lista; do
find $f >> mentési.lista
done
# cpio -v -o --format=newc < backup.list | ssh felhasználó@gép "cat > mentőeszköz"

Ahol a könyvtár_lista a menteni kívánt könyvtárak listája, a felhasználó@gép a mentést végző gép felhasználójának és hálózati nevének együttese, valamint a mentőeszköz, ahova a mentés kerül (például /dev/nsa0).

18.12.4. pax

A pax(1) az IEEE/POSIX® válasza a tar és cpio programokra. Az évek során a tar és a cpio különböző változatai egy kissé inkompatibilissé váltak. Ezért a szabványosításuk kiharcolása helyett inkább a POSIX létrehozott egy új archiváló segédprogramot. A pax megpróbálja írni és olvasni a cpio és tar formátumok legtöbb változatát, valamint emellett további saját formátumokat is kezel. A parancskészlete inkább a cpio parancséra emlékeztet, mintsem a tar parancséra.

18.12.5. Amanda

Az Amanda (Advanced Maryland Network Disk Archiver) egy kliens-szerver alapú mentési rendszer, nem pedig egy önálló program. Az Amanda szerver menti tetszőleges számú számítógép adatát egyetlen szalagra, melyek az Amanda klienst futtatják és hálózaton keresztül hozzá csatlakoznak. A nagy mennyiségű és nagy kapacitású lemezekkel rendelkező rendszerekben közvetlenül a mentéshez szükséges idő nem áll rendelkezésre a feladat elvégzéséhez. Az Amanda viszont képes megoldani ezt a problémát. Az Amanda képes egy “saját lemez” használatával egyszerre több állományrendszerről is biztonsági mentést készíteni. Az Amanda “archívumkészleteket” hoz létre: az Amanda konfigurációs állományában megadott állományrendszerekről készít teljes mentést egy adott idő alatt egy adott mennyiségű szalagra. Az “archívumkészlet” ezenkívül még tartalmaz egy napi inkrementális (vagy különbözeti) mentést is minden egyes állományrendszerről. A sérült állományrendszerek visszaállításához mindig a legújabb teljes biztonsági mentésre és a hozzátartozó inkrementális mentésekre van szükségünk.

A konfigurációs állomány segítségével precíz irányítást gyakorolhatunk a létrehozott mentések és az Amanda által keltett hálózati forgalom felett. Az Amanda a fentiek közül bármelyik programmal képes az adatokat szalagra rögzíteni. Az Amanda portként vagy csomagként is elérhető, alapértelmezés szerint nem települ.

18.12.6. Ne csináljunk semmit

A “Ne csináljunk semmit” nem egy újabb számítógépes program, hanem egy igen gyakran alkalmazott mentési stratégia. Nem kell beruházni. Nem kell semmilyen biztonsági mentési rendet követni. Egyszerűen semmit se csinálunk. Ha véletlenül valami történne az adatainkkal, akkor csak mosolyogjunk és törődjünk bele!

Amennyiben az időnk és adataink keveset vagy éppen semmit se érnek, akkor a “Ne csináljunk semmit” az elérhető legjobb biztonsági mentési megoldás számítógépünk számára. De legyünk óvatosak, mert a UNIX egy igen hasznos eszköz, és fél éven belül könnyen úgy találhatjuk magunkat, hogy mégis csak vannak értékes adataink.

A “Ne csináljunk semmit” tökéletesen megfelelő mentési módszer a /usr/obj és a hozzá hasonló módon a számítógépen automatikusan generált könyvtárak és állományok esetében. Ugyanilyen példa lehetne a kézikönyv HTML vagy PostScript® változata. Ezek a formátumok ugyanis az SGML források alapján keletkeznek, így a HTML vagy PostScript állományok mentése nem életbevágó. Az SGML állományokat viszont már annál inkább mentsük!

18.12.7. Melyik a legjobb?

dump(8) Pont. Elizabeth D. Zwicky komolyan letesztelte az itt felsorolt összes programot. A UNIX állományrendszerek jellegzetességeinek és rajtuk az összes adatunk megőrzésének egyértelműen a dump felel meg a legjobban. Elizabeth a minden egyes program tesztjéhez olyan állományrendszereket hozott létre, amelyek rengeteg különféle szokatlan helyzetet tartalmaztak (valamint néhány nem annyira szokatlant). Az érintett jellegzetességek: lyukas állományok, lyukas állományok és egy halom nulla, állományok érdekes karakterekkel a nevükben, olvashatatlan és írhatatlan állományok, eszközök, a mentés közben méretüket változtató állományok, a mentés közben keletkező és megszűnő állományok és még sok minden más. Az eredményeit a LISA V-ben jelentette meg 1991. októberében. Lásd A biztonsági mentéshez és archiváláshoz használt programok tesztje (angolul).

18.12.8. Az adatok helyreállítása vészhelyzetben

18.12.8.1. A katasztrófa előtt

Csupán négy lépést kell megtennünk az esetleges katasztrófák bekövetkezésének esetére.

Először is két példányban nyomtassuk ki az egyes lemezek lemezcímkéjét (például a bsdlabel da0 | lpr paranccsal) valamint az állományrendszerek táblázatát (az /etc/fstab állományt) és az összes rendszerindításkor megjelenő üzenetet.

Másodsorban gondoskodjunk róla, hogy a helyreállító lemezek (boot.flp és fixit.flp) használatakor minden eszközünk látható. Ezt a legkönnyebben úgy tudjuk ellenőrizni, hogy újraindítjuk a gépet a lemezről és átnézzük a rendszerindítás során megjelenő üzeneteket. Ha szerepel bennük minden eszköz és a rendszer indulása után működőképesek, akkor jöhet a következő lépés.

Ellenkező esetben létre kell hoznunk két saját rendszerindító lemezt, amelyeken a rendszermag olyan változata található, amely képes csatlakoztatni az összes lemezünket és el tudja érni a szalagos egységünket. A floppykon a következőknek kell meglennie: fdisk, bsdlabel, newfs, mount és a program, amellyel a biztonsági mentéseinket kezeljük. Az összes program legyen statikusan linkelt. Ha a dump programot használjuk, akkor a lemezekről ne felejtsük le a restore programot sem.

A harmadik lépésben igyekezzünk minél gyakrabban szalagra menteni. Mindig gondoljuk arra, hogy a legutolsó mentés óta létrehozott változatásaink teljesen el fognak veszni. A mentéseket tartalmazó szalagokat tegyük írásvédetté.

A negyedik lépésben ellenőrizzük a helyreállító lemezeket (vagy a boot.flp és fixit.flp állományokat, vagy a második lépésben készített saját lemezeinket) és mentéseket tartalmazó szalagokat. Jegyezzük le az eljárást. Ezeket a jegyzeteket is rakjuk el rendszerindító lemezekkel, a kinyomtatott adatokkal és a mentéseket tartalmazó szalagokkal együtt. Ezek a jegyzetek megvédenek minket attól, hogy a helyreállítás közbeni kétségbeesésünkben nehogy véletlenül tönkretegyük a biztonsági mentéseinket. (Hogy miként is? Például ha a tar xvf /dev/sa0 parancs helyett izgalmunkban a tar cvf /dev/sa0 parancsot gépeljük be, akkor azzal felülírjuk a biztonsági mentéseinket).

A fokozott biztonság kedvéért minden alkalommal készítsünk rendszerindító lemezeket és legalább két mentést. Az egyiket valamilyen távoli helyen tároljuk. Ez a távoli hely NE ugyanannak az épületnek az alagsora legyen! Számos cég alaposan megtanulta ezt a szabályt a Világkereskedelmi központ tragédiája kapcsán. Ez a távoli hely számítógépeinkből és merevlemezes meghajtóinkól is fizikailag jól elkülöníthető, jelentős távolságban legyen.

Példa 18-3. A rendszerindító lemezek létrehozásához használható szkript

#!/bin/sh
#
# Egy helyre&aacute;ll&iacute;t&oacute; lemez l&eacute;trehoz&aacute;sa.
#
# A lemez megform&aacute;z&aacute;sa.
#
PATH=/bin:/sbin:/usr/sbin:/usr/bin

fdformat -q fd0
if [ $? -ne 0 ]
then
	 echo "Rossz lemez, haszn&aacute;ljon m&aacute;sikat!"
	 exit 1
fi

# A rendszerind&iacute;t&oacute; blokkok r&ouml;gz&iacute;t&eacute;se a lemezre.
#
bsdlabel -w -B /dev/fd0c fd1440

#
# Az egyetlen part&iacute;ci&oacute; l&eacute;trehoz&aacute;sa.
#
newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/fd0a

#
# A lemez csatlakoztat&aacute;sa.
#
mount /dev/fd0a /mnt

#
# A sz&uuml;ks&eacute;ges k&ouml;nyvt&aacute;rak l&eacute;trehoz&aacute;sa.
#
mkdir /mnt/dev
mkdir /mnt/bin
mkdir /mnt/sbin
mkdir /mnt/etc
mkdir /mnt/root
mkdir /mnt/mnt			# a rendszerind&iacute;t&oacute; part&iacute;ci&oacute;hoz
mkdir /mnt/tmp
mkdir /mnt/var

#
# A k&ouml;nyvt&aacute;rak felt&ouml;lt&eacute;se.
#
if [ ! -x /sys/compile/MINI/kernel ]
then
	 cat << EOM
Ha m&eacute;g nem l&eacute;tezne a MINI rendszermag, akkor hozzunk l&eacute;tre egyet.
&Iacute;me hozz&aacute; egy minta konfigur&aacute;ci&oacute;s &aacute;llom&aacute;ny:
#
# MINI -- Egylemezes FreeBSD rendszermag.
#
machine         "i386"
cpu             "I486_CPU"
ident           MINI
maxusers        5

options         INET                    # a k&ouml;vetkez&#245;kh&ouml;z kell:  _tcp _icmpstat _ipstat
                                        #    _udpstat _tcpstat _udb 
options         FFS                     # Berkeley Fast File System
options         FAT_CURSOR              # k&ouml;v&eacute;r kurzor a syscons vagy pccons eset&eacute;n
options         SCSI_DELAY=15           # legy&uuml;nk pesszimist&aacute;k a SCSI eszk&ouml;z&ouml;kkel szemben
options         NCONS=2                 # 1 virtu&aacute;lis konzol
options         USERCONFIG              # a -c XXX seg&iacute;ts&eacute;g&eacute;vel megadhat&oacute; felhaszn&aacute;l&oacute;i konfigur&aacute;ci&oacute;

config          kernel	root on da0 swap on da0 and da1 dumps on da0

device          isa0
device          pci0

device          fdc0	at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr
device          fd0	at fdc0 drive 0

device          ncr0

device          scbus0

device          sc0	at isa? port "IO_KBD" tty irq 1 vector scintr
device          npx0	at isa? port "IO_NPX" irq 13 vector npxintr

device          da0
device          da1
device          da2

device          sa0

pseudo-device   loop            # az INET-hez kell
pseudo-device   gzip            # gzip-pel t&ouml;m&ouml;r&iacute;tett a.out v&eacute;grehajt&aacute;sa
EOM
	 exit 1
fi

cp -f /sys/compile/MINI/kernel /mnt

gzip -c -best /sbin/init > /mnt/sbin/init
gzip -c -best /sbin/fsck > /mnt/sbin/fsck
gzip -c -best /sbin/mount > /mnt/sbin/mount
gzip -c -best /sbin/halt > /mnt/sbin/halt
gzip -c -best /sbin/restore > /mnt/sbin/restore

gzip -c -best /bin/sh > /mnt/bin/sh
gzip -c -best /bin/sync > /mnt/bin/sync

cp /root/.profile /mnt/root

chmod 500 /mnt/sbin/init
chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt
chmod 555 /mnt/bin/sh /mnt/bin/sync
chmod 6555 /mnt/sbin/restore

#
# Egy minim&aacute;lis &aacute;llom&aacute;nyrendszeri t&aacute;bl&aacute;zat l&eacute;trehoz&aacute;sa.
#
cat > /mnt/etc/fstab <<EOM
/dev/fd0a    /    ufs    rw  1  1
EOM

#
# Egy mini&aacute;lis jelsz&oacute; &aacute;llom&aacute;ny l&eacute;trehoz&aacute;sa.
#
cat > /mnt/etc/passwd <<EOM
root:*:0:0:Charlie &:/root:/bin/sh
EOM

cat > /mnt/etc/master.passwd <<EOM
root::0:0::0:0:Charlie &:/root:/bin/sh
EOM

chmod 600 /mnt/etc/master.passwd
chmod 644 /mnt/etc/passwd
/usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd

#
# A lemez lev&aacute;laszt&aacute;sa &eacute;s err&#245;l a felhaszn&aacute;l&oacute; &eacute;rtes&iacute;t&eacute;se.
#
/sbin/umount /mnt
echo "A lemezt lev&aacute;lasztottam &eacute;s most m&aacute;r k&eacute;sz."

18.12.8.2. A katasztrófa után

Az alapvető kérdés: a hardver túlélte? Ha rendszeresen készítettünk biztonsági mentéseket, akkor a szoftverek miatt egyáltalán nem kell aggódnunk.

Ha a hardver megsérült, akkor a számítógép használatának újból megkezdése előtt javasolt cserélni a meghibásodott alkatrészeket.

Ha a hardverrel minden rendben találtunk, akkor nézzük meg a floppykat. Ha saját rendszerindító lemezt használunk, akkor indítsuk el egyfelhasználós módban (a boot: parancssornál írjuk be, hogy -s) és ugorjuk át a következő bekezdést.

Amennyiben viszont a boot.flp és fixit.flp állományok alapján készítettük a lemezeket, olvassunk tovább. Helyezzük a boot.flp tartalmú lemezt az elsődleges floppy meghajtóba és indítsuk el vele a számítógépet. Az eredeti telepítőmenü jelenik meg ezután a képernyőn. Innen válasszuk ki a Fixit -- Repair mode with CDROM or floppy (“Helyreállítás -- A rendszer helyreállítása CD-ről vagy floppyról”) menüpontot. Amikor kéri a telepítő, tegyük be a fixit.flp alapján készült lemezt. A restore és az összes többi számunkra fontos program a /mnt2/rescue könyvtárban található (vagy a FreeBSD 5.2-nél korábbi változatai esetén a /mnt2/stand könyvtárban).

Egyenként állítsuk vissza az egyes állományrendszereket.

A mount paranccsal próbáljuk meg csatlakoztatni az első lemezünk rendszerindító partícióját (például mount /dev/da0a /mt). Ha a lemezcímke megsérült, akkor bsdlabel alkalmazásával partícionáljuk újra a lemezt és címkézzük meg a korábban kinyomtatott címke adatainak megfelelően. A newfs segítségével újra hozzuk létre az állományrendszereket. Írható-olvasható módban csatlakoztassuk újra a floppy rendszerinító partícióját (mount -u -o rw /mnt). A biztonság mentést végző program és a biztonsági mentést tartalmazó szalagok használatával állítsuk helyre az állományrendszer tartalmát (például restore vrf /dev/sa0). Válasszuk le az állományrendszert (például umount /mnt). Mindegyik sérült állományrendszerre ismételjük a folyamatot.

Ahogy működőképessé vált a rendszerünk, mentsük az adatainkat új szalagokra. Akármi is okozta a rendszer összeomlását vagy az adatvesztést, ismét lecsaphat. Ha most áldozunk erre még egy órát, akkor azzal a későbbiekben számos kellemetlenségtől óvhatjuk meg magunkat.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.