Amanda telepítése (Jessie)

A AdminWiki wikiből

Ez a cikk az archívumok és biztonsági másolatok készítésére szolgáló Amanda (The Advanced Maryland Automatic Network Disk Archiver :-) backup szoftver telepítését és beállítását ismerteti.

Az Amanda kliens-szerver felépítésű, de az elnevezések kicsit félrevezetőek: a backup gépen telepített Amanda szerver (cron job) szólítja meg az Amanda klienseket, ahol a mentendő anyagot az inetd (xinetd) alatt futó Amanda kliensprogram készíti össze, és továbbítja az Amanda szerverre. Látható, hogy valójában, technikailag az Amanda kliensek működnek szerverként (inetd), ez pontatlanság az elnevezésben.

Tartalomjegyzék

Az Amanda mentés jellegzetességei

Elméleti megfontolások, ha a leírást csak telepítési checklist-ként használjuk, ez a rész átugorható.

Az Amandát eredetileg mágnesszalagos backup kezelésére tervezték, így a merevlemezen is virtuális szalagokat (valójában alkönyvtárakat) használ és minden backup feladat (task) minden session-jéhez (tipikusan napi egyszeri mentés) egy darab, megadott maximális méretű tárhelyet (virtuális szalagot) használ el. A szalagméretet soha nem lépi túl.

Az Amanda nagy előnye, hogy nem kell statikus mentési tervet készíteni; egy mentési feladathoz elegendő megmondani, hogy mely kliensgépek mely könyvtárait kell menteni ebben a feladatban (disklist), mekkora méretű a virtuális szalag, hány darabot használhat összesen (tapecycle) és hány mentésenként szeretnénk teljes (level-0, nem inkrementális) mentést készíteni (dumpcycle). Ezután az Amanada minden mentés elején kiszámolja, hogy az egyes könyvtárak level-0 illetve inkrementális mentéseihez aktuálisan mennyi hely kellene, és önállóan eldönti, hogy az adott mentésbe milyen könyvtár milyen szinten kerüljön bele - ha van felesleges hely, előrehozza a level-0 mentéseket, ha kifut a helyből, késlelteti azokat (és figyelmeztetést ír a mentési naplóba).

Az Amanda mentéséből - ha azt naponta, pl. éjszaka végezzük - legalább a dumpcycle és legfeljebb a tapecycle idejének megfelelően állítható vissza a tartalom (részben vagy egészben) bármelyik mentés időpontjának megfelelő állapotába; pl. 14 napos tapecycle és 7 napos dumpcycle esetén a legfeljebb 7 napja véletlenül letörölt állományt biztosan, a legfeljebb 13 napja letöröltet jó eséllyel állíthatjuk vissza. Vagyis az Amanda mentés nemcsak a klasszikus teljes adatvesztés ellen véd, hanem valamelyest az időben észlelt felhasználói hiba illetve szabotázs ellen is. Napi egyszeri, éjszakai mentés esetén azt mondhatjuk, hogy amelyik állomány egyszer már "nálunk aludt", azt utána jó eséllyel tudjuk visszaállítani.

Technikailag az Amanda virtuális szalagok egy-egy könyvtárnak, benne a taskhoz tartozó egyes kliens könyvtár mentések egy-egy, lényegében tar.gz állománynak felelnek meg. Így valamennyi szalagkönyvtárat végignézve, azokból a legfrissebb level-0 tar.gz-ket kiválogatva és pl. külső lemezre másolva a mentett tárterület majdnem konzisztens (pl. heti frissítéssel tűzkazettába tehető, vagy alkalmanként futtatva hosszú távra archiválható, tömörített) állapotát kapjuk - így működik az amanda-server-addons csomag on-demand archiváló scriptje.

(Egyebek: TODO!)

Amanda kliens telepítése

Minden gépre, amelyről szeretnénk biztonsági másolatot csinálni, telepíteni kell az Amanda klienst:

apt-get install amanda-client # technikailag szerver, +: openbsd-inetd (sajnos), openssl, sok Perl könyvtár

Az Amandának minden egyes file-ra kell olvasási jogot kell biztosítani, ami korábban csak úgy volt (egyszerűen) megoldható, ha az amandad root-ként futott. A Squeeze óta ezt megoldották (valószínűleg suid root - TODO: utánanézni!), így a korábbi változatokkal szemben a /etc/inetd.conf-ban nem kell (nem szabad) a démont futtató felhasználót root-ra módosítani.

Derítsük fel, hogy az Amanda szerverről indított kapcsolatkérés a telepítés alatti szerverre milyen IP címmel érkezik meg (ha a backup szerver a belső hálózaton van, DMZ és publikus zónabeli szerverek esetében ez a belső hálózat tűzfalának címe lesz). Ezt a címet (illetve ennek DNS reverse-ét) vegyük fel a /etc/amanadahosts állományba (az itt felsorolt hostokról az itt megjelölt távoli - jelen esetben backup - felhasználó nevében lehet majd menteni):

-rw------- backup backup /etc/amandahosts
localhost backup
IP_REVERSE backup

Együttműködés régebbi verziójú Amanda szerverrel

Debian Wheezy vagy későbbi Amanda szervergép esetén ez a változtatás nem szükséges.

A Debian Wheezy-ben szereplő verzió óta az Amanda alapértelmezett protokollja UDP-ről TCP-re változott (ld. itt), így az alapértelmezett /etc/inetd.conf-ban az ennek megfelelő TCP bejegyzés szerepel. Ha az Amanda szervergépünk korábbi (pl. Squeeze) verziójú, ezt vissza kell változtassuk UDP-re:

-rw-r--r-- root root /etc/inetd.conf

[...]
#:OTHER: Other services
#amanda stream tcp nowait backup /usr/lib/amanda/amandad amandad -auth=bsdtcp amdump amindexd amidxtaped
amanda dgram udp wait backup /usr/sbin/tcpd /usr/lib/amanda/amandad -auth=bsd amdump amindexd amidxtaped

A beállítás az inetd újraindításával érvényesíthető:

systemctl restart openbsd-inetd

Mindkét sort egyszerre nem tudjuk érvényben hagyni, így nem lehetséges ugyanazon kliensgépről párhuzamosan, régebbi és újabb verziót futtató Amanda szervergépre is menteni, de a Squeeze elavulásával ennek talán már nincs is nagy jelentősége.

Amanda átengedése a bástyagép tűzfalán

Az Amanda sajnos titkosítatlan adatkapcsolatot használ (és nem egyszerű tunnelezni - TODO: utánanézni!), valamint kliense nem standalone démon, hanem az inetd alatt fut, ezért igyekezzünk tűzfallal is korlátozni a hozzá kapcsolódást, vagyis a backup szerver lehetőleg ne legyen a kliens felől nézve a net zónában!

A házirend szerinti alapértelmezett tűzfalszabályok tartalmazzák a szükséges beállításokat arra az esetre, ha az Amanda szerver a trs zónában van (vagyis ekkor nincs teendőnk):

-rw-r----- root root /etc/shorewall/rules

# Accept Amanda connections from trs
Amanda/ACCEPT   trs     fw
ACCEPT          trs     fw      udp     0:65535 amanda
ACCEPT          trs     fw      tcp     amandaidx
ACCEPT          trs     fw      tcp     amidxtape

Ha az Amanda szerver nincs (és valamiért nem is lehet) a trs zónában, készíthetünk egy - pl. bkp nevű - zónát a /etc/shorewall/hosts állományban az Amanda szerver IP címe számára (javasolt), és fenti szabályokat a trs helyett bkp forrással, esetleg közvetlenül a net:IP.IP.IP.IP forrással is felvehetjük a /etc/shorewall/rules állományba (ez utóbbi kevésbé javasolt).

TCP keep alive módosítása

Nagy adatmennyiség mentésekor az Amanda kicsúszhat az iptables 30 perces TCP timeout-jából (ennyi idő után a kernel elbontja az inaktív TCP kapcsolatokat). Egy workaround lehet a kliens kernelében a TCP keep alive intervallumának csökkentése (ennyi időnként küld a kernel keep alive csomagot) az alapértelmezett 2 óráról pl. 15 percre:

-r-------- root root /etc/sysctl.d/local.conf

[...]
# reduce keep alive interval
net.ipv4.tcp_keepalive_time=900

illetve azonnali érvényesítés:

cat /proc/sys/net/ipv4/tcp_keepalive_time  # 7200
echo 900 >/proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_time  # 900

Amanda kliens gyorsteszt

A telepítés alatti kliens számára a fentiekben engedélyezett Amanda szervergépen (root-ként), egy tetszőleges, meglévő Amanda task disklist-jébe vegyük fel az alábbi sort:

-rw-r----- backup backup /etc/amanda/[taskname]/disklist

[...]
FULLY.QUALIFIED.HOSTNAME /boot  hard-disk-comp

ami a telepítés alatti kliens /boot könyvtárának mentését irányozza elő. Ezután (továbbra is az Amanda szervergépen, root-ként) adjuk ki a

su backup -c "/usr/sbin/amcheck [taskname]"  # Client check: [...] 0 problems found.

parancsot! Sikeres teszt esetén opcionálisan a tényleges mentést is kipróbálhatjuk az amdump paranccsal (vigyázat, ez a teljes task-ot lefuttatja!), de ez általában felesleges.

A tesztet követően ne felejtsük el az Amanda szervergépen a /etc/amanda/[taskname]/disklist tartalmát visszaállítani.

Amanda szerver telepítése

Amanda szervert telepíteni kell a dedikált backup szerverre, illetve minden olyan szerverre, amelyik önmagára amandázik. Debian csomagból telepíthető:

apt-get install amanda-server # Nincs lényeges függősége

Ezután a /usr partíciót írhatóan csatoljuk újra:

mount -o remount,rw /usr

és töltsük le, majd könyvtárhelyesen tömörítsük ki a legutóbbi kiadású amanda-server-addons.tgz csomagot! A csomag a következőket biztosítja:

  • script új Amanda task létrehozatalához (amanda-new);
  • scriptek "beragadt" Amanda taskok biztonságos leállításához (amanda-stop, amanda-tape-purge);
  • taszkonként egy generált cron job a napi mentéshez szükséges teendőkkel
    • előző délutáni tesztelés;
    • éjszakai mentés;
    • esetleg sikertelen ("beragadt") task reggeli leállítása, takarítás.
  • script és cron job heti archiváláshoz (csak a legfrissebb lvl-0 mentések archiválása külső mount point-ra).

A telepítést követően csatoljuk vissza a /usr partíciót read-only módban:

mount -o remount /usr

Amanda szerver beállítások

Az /etc/amandahosts-ban engedélyezni kell a root felhasználónak az amindexd és amidxtaped service-eknek a localhostról történő igénybe vételét:

-rw------- backup backup /etc/amandahosts

[...]
localhost root amindexd amidxtaped
127.0.0.1 root amindexd amidxtaped

Tekintettel arra, hogy a /etc/hosts bejegyzéseinek sorrendjétől függően a localhost IPv6-os címre is feloldódhat, érdemes az IPv4-es címet külön sorban közvetlenül is bejegyezni.

Amanda szerver gyorsteszt

Az alábbi opcionális teszttel mind a mentést, mind a visszaállítást ellenőrizhetjük a telepítés alatt álló szervergép saját Amanda kliensének használatával. Ügyeljünk arra, hogy a teszt során a localhost-ra csatlakozunk, vagyis ez a próba nem ellenőrzi a hálózati kapcsolatokat.

Az alábbi leírás szerint az amanda-new-val vegyünk fel egy Amanda feladatot alapértelmezett értékekkel és disklist-jében egyetlen (a root felhasználó home könyvtárát mentő) DLE bejegyzéssel:

localhost       /root           hard-disk-comp

Ezután futtassunk egy amcheck ellenőrzést, siker esetén végeztessünk az amdump-pal egy tényleges mentést is:

su backup -s "/bin/bash" -c "/usr/sbin/amcheck TASKNAME"
su backup -s "/bin/bash" -c "/usr/sbin/amdump TASKNAME"

Ellenőrizzük a mentett tartalmat az alábbi leírás szerint! Ha mindent rendben találtunk, szüntessük meg a teszt Amanda feladatot.

Az Amanda használata

Amanda feladatok felvétele

Az amanda-server-addons csomaggal települő amanda-new scripttel (rendszergazdaként) egyszerűen hozható létre naponta futtatandó Amanda task:

amanda-new TASKNAME "/var/backups" NO_OF_TAPES

ahol TASKNAME a feladat neve (ez könyvtár- és filenévként valamint cron job neveként is használatos, célszerű angol alfanumerikus jelekből és kötőjelekből összeállítani, aláhúzásjel kerülendő! - hasznos konvenció, hogy kezdődjék nagybetűvel), NO_OF_TAPES pedig a használandó szalagok száma (alapértelmezésben 14). A szalagokat (tape könyvtárak) a script a megadott (javaslat: /var/backups) útvonalon elhelyezett TASKNAME könyvtárban hozza létre és az Amanda igényei szerint fel is címkézi azokat. Létrehozatal után a könyvtárak innen elmásolhatóak (akár különböző partíciókra) és symlinkelhetőek.

Alapértelmezésben a scripttel definiált Amanda task annyi naponta készít teljes mentést, ahány szalagot definiálunk (dumpcycle = tapecycle). Érdemes lehet ezt a gyakoriságot duplázni, a task konfigurációs állományában a dumpcycle csökkentésével:

-rw-r----- backup backup /etc/amanda/TASKNAME/amanda.conf

[...]
dumpcycle 7             # the number of days in the normal dump cycle
tapecycle 14 tapes      # the number of tapes in rotation
[...]

A definiált taskot a

su backup -c "/usr/sbin/amcheck TASKNAME"

paranccsal próbálhatjuk ki, amely egyelőre csak a szerver oldalt ellenőrzi, mivel a mentendő partíciókat illetve könyvtárakat definiáló /etc/amanda/TASKNAME/disklist állomány még nem tartalmaz bejegyzéseket. Ha a fenti teszt hibátlanul lefut, kitölthetjük a disklist-et.

Visszaállítás Amanda mentésből

Az Amanda mentés technikailag egy tar.gz archívum, amelyből könyvtárakat illetve egyes állományokat külön-külön is vissza lehet állítani. Noha az Amanda képes lenne hálózaton keresztül, közvetlenül a mentett gépre is visszaállítani az állományokat (TODO!), a jelen leírásban a backup szervergép egy ideiglenes könyvtárába kérjük a kitömörítést.

A visszaállításhoz sajnos nincs szemléletes, karaktergrafikus felület(TODO!), így azt root-ként bejelentkezve, parancssorból kell végrehajtani.

mkdir /tmp/restore       # ideiglenes könyvtár - férjen el ezen a partíción a visszaállítandó anyag!
cd /tmp/restore          # lépjünk is bele
amrecover TASZK-NEVE

A következő parancsokat az amrecover (Telnethez vagy parancssori FTP klienshez hasonló) felületén adjuk ki:

setdate YYYY-MM-DD       # opcionális, a megadott napon készült mentés tartalmát kérjük
listhost                 # a taszkban megadott hostok (mentett gépek) felsorolása
sethost foo              # erről a gépről származó állományokat keresünk
listdisk                 # a kiválasztott gépről mentett DLE-k (lemezek vagy könyvtárak) listája
setdisk bar              # ebben a DLE-ben lévő állományokat keresünk

A lemez kiválasztása után a cd-vel lehet könyvtárat váltani és az ls paranccsal lehet annak tartalmát megtekinteni, illetve az add paranccsal jelölhetjük ki a listázott könyvtárakat vagy egyedi fájlokat visszaállításra:

cd dir/which/contains/filetorecover
ls                       # aktuális könyvtár tartalma more-ral megjelenítve
add filetorecover        # ezt kijelöljük visszaállításra
list                     # eddig ezeket jelöltük ki
[repeat if necessary]

Ha kijelötük a visszaállítandó állományokat, utasítsuk az Amandát az összes szükséges virtuális mágnesszalag használatára (tape changer), és indítsuk el a kitömörítést:

settape chg-multi        # szalagcsere engedélyezett
extract                  # kitömörítés indul

A művelet során az Amanda engedélyt kér az aktuális (példánkban /tmp/restore) könyvtár használatára, ezután ide előbb a nulladik szintű (utolsó, teljes) mentésből tömöríti ki a kért állományokat, majd ezeket felülírja az esetleges első, második, stb. szintű mentések tartalmával, amíg el nem éri a kívánt napi állapotot. Nagyobb tömörítvények esetén a visszaállítás órákig eltarthat, és eközben minden szalagváltást manuálisan engedélyezni kell (TODO!). A végén a

quit

paranccsal léphetünk kis az amrecover-ből. A visszaállított állományokat az aktuális könyvtárban, az eredeti könyvtár hierarchiával és jogosultságokkal találjuk. Ügyeljünk arra, hogy a tar az ACL-es jogosultságokat nem menti (TODO!), így az eredeti helyre visszamásolás során a jogosultságokat felül kell vizsgálni!

Ha a mentett és a backup szervergépek eltérő beállítása miatt a visszaállított állománynevek karakterkódolása nem lenne megfelelő, azt pl. a convmv segítségével korrigálhatjuk:

convmv -r -f [AMILYENRŐL] -t [AMILYENRE] /tmp/restore  # csak a neveket módosítja, a tartalmat nem

A visszanyert állományokat a backup szerverről tetszőleges eszközzel elvihetjük (az adatkezelésnél ügyeljünk arra, hogy a mentésben bizalmas tartalom is előfordulhat!). Ha végeztünk, takarítsuk el az ideiglenes könyvtárat:

rm -Rf /tmp/restore

Amanda feladat törlése

Az Amanda, illetve az amanda-new egy-egy feladathoz az alább listázott állományokat hozza létre. Ezek letörlésével a feladat eltávolítható. Egyéb nyilvántartást az Amanda nem használ, a törlés teljes és konzisztens lesz.

Cron job file:           /etc/cron.d/amanda-cron-TASKNAME
Configuration directory: /etc/amanda/TASKNAME
Tape root directory:     /var/backups/TASKNAME
Libs root directory:     /var/lib/amanda/TASKNAME
Logs root directory:     /var/log/amanda/TASKNAME

Az amanda-archive használatba vétele

Az amanda-archive egy shell script, amelyik végignézi egy megadott Amanda tárhely összes DLE mentéseit, azok közül kiválogatja a legfrissebb nullás szintű (lvl-0) mentéseket, és ezeket a szalagfejléc levágásával, egyszerű .tar.gz állományokként kimásolja egy megadott tárterületre. A scriptet az amanda-server-addons csomag tartalmazza.

Ebben a leírásban az amanda-archive-ot periodikus archiválásra használjuk: cron-ból időzítve (naponta egyszer) megkíséreljük egy USB-n csatolt, külső merevlemez fájlrendszerét automatikusan felcsatoltatni az autofs szolgáltatással, kimásolni rá a legfrissebb lvl-0 archívumokat, majd automatikusan lecsatolni a merevlemezt. Ehhez elég a megfelelő időben fizikailag csatlakoztatni, illetve a másolás végeztével kikapcsolni és elvinni a külső merevlemezt - a szervergépre belépni nem kell. Az így készített másolat tűzkazettában vagy páncélszekrényben őrizhető, katasztrófa esetén elővehető, illetve tetszőleges időben (célszerűen hetente) frissíthető.

Figyelem! Az amanda-archive fenti használata biztonsági kockázatot jelent, hiszen kérdés nélkül kimásol egy tárterületet a behelyezett adathordozóra. Csak akkor használjuk, ha a szervergéphez (illetve a külső csatlakozóhoz) illetéktelen nem fér hozzá!

Az autofs telepítése

Ha még nem lenne telepítve, Debian csomagból telepítsük az autofs Debian csomagot, amely képes egy külső (pl. USB-n csatolt) merevlemez felismerésekor az azon lévő partíció(ka)t automatikusan mountolni:

apt-get install autofs # + függőségek

Ha még nem lenne elkészítve, készítsünk egy mount gyökérkönyvtárat az autofs által kezelendő partíciókhoz:

mkdir /mnt/auto

Ha még nem lenne elkészítve, készítsük el az alapértelmezett overlay könyvtárat az egyes autofs mount point-ok beállító állományai számára (ezt valószínűleg a Debian csomagnak kellene elkészítenie):

mkdir /etc/auto.master.d

AutoFS beállítások

Definiáljunk egy beállító állományt az /mnt/auto/amanda mount point számára (a kiterjesztés lényeges!):

-rw-r--r-- root root /etc/auto.master.d/amanda.autofs

# Amanda archive automounts
/mnt/auto       /etc/auto.master.d/auto.amanda --timeout=60

Formázzunk meg egy kellően nagy méretű merevlemezt egyetlen ext4 partícióval, csatlakoztassuk ezt USB-n keresztül a telepítés alatti backup szerverhez, és jegyezzük fel, hogy a kernel milyen eszköznevet rendelt hozzá (példánkban legyen /dev/sdg)!

Ezután készítsük el az előző bejegyzésben hivatkozott auto.amanda állományt, amely megmondja, hogy ennek a lemeznek az első partícióját (példánkban /dev/sdg1) a /mnt/auto alatti amanda helyre kell felcsatolni:

-rw-r--r-- root root /etc/auto.master.d/auto.amanda

# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage

amanda  -fstype=auto,rw         :/dev/sdg1

A beállítások az autofs daemon újraindításával érvényesítheőek:

systemctl restart autofs

AutoFS gyorsteszt

Gyorstesztként csatlakoztassuk újra az előbb használt külső merevlemezt (pl. az USB-egység ki- majd bekapcsolásával), és rövid várakozás után adjuk ki az

ls /mnt/auto/amanda

parancsot, amelynek a merevlemez tartalmát kell mutatnia. Írjunk a merevlemezre, ellenőrizzük ennek sikerességét, majd várjunk legalább egy percig (ennyi az amanda.autofsr-ben beállított timeout), ezután az

ls /mnt/auto

paranccsal ellenőrizzük, hogy az amanda könyvtár eltűnt (az autofs lecsatolta).

Ha a teszt sikeres volt, az autofs megfelelően kezeli a külső merevlemezt, azaz archiválás előtt elég azt fizikailag csatlakoztatni, és az archiválás befejeződése után egyszerűen le lehet venni a backup szerverről anélkül, hogy arra be kellene lépni.

Az archiválás beütemezése

Ütemezzük be a mentést az amanda-server-addons által telepített cron job (/etc/cron.d/amanda-cron-weekly) kommentjének eltávolításával. Az alapértelmezett cron bejegyzés szerint minden hétköznap és vasárnap reggel 9-kor elindul az archiválás (de azonnal kilép, ha nincsen csatlakoztatva a megadott merevlemez) - azaz ha bármely munkanap reggel 9-ig csatlakoztatjuk a merevlemezt, megkezdődik az archiválás, és ha elkészült, a következő munkanap reggel 9 óra előtt a merevlemez bármikor levehető (a szombat kihagyása miatt a pénteken feltett merevlemezre is csak egy mentés készül). A mentés elkészültéről a cron e-mailben értesíti a rendszergazdát.

Az archívum (tar.gz) állományok a merevlemezen létrehozott ext4 partíció gyökérkönyvtárába kerülnek, amelyet a script még az archiválás megkezdése előtt kiürít - nem bántja azonban az esetleges alkönyvtárakat. A script igyekszik gazdálkodni a tárterülettel, illetve kezeli azt az esetet, amikor nem minden friss lvl-0 fér rá a megadott merevlemezre.

Irodalom