Amanda telepítése (Wheezy)
Jelenleg az Amanda (The Advanced Maryland Automatic Network Disk Archiver :-) backup szoftvert használjuk archívumok és biztonsági másolatok készítésére. Az Amanda kliens-szerver felépítésű, a backup gépen telepített Amanda szerver cron jobból meghívva szólítja meg a klienseket, ahol a másolatot az inetd (xinetd) alatt futó Amanda kliens készíti el, és továbbítja a szerverre.
Tartalomjegyzék
Az Amanda mentés jellegzetességei
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 sessionjé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.
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 # magával hozza az openbsd-inetd-t (sajnos)
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 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
A Wheezy-ben az Amanda alapértelmezett protokollja UDP-ről TCP-re változott (ld. itt), így az /etc/inetd.conf-ban ennek megfelelő bejegyzés szerepel. Ha az Amanda szerver korábbi verziójú (Squeeze), 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
Wheezy Amanda szerver esetén ez a változtatás nem szükséges.
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 semmiképpen se 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:
-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
ez esetben nincs teendőnk.
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 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:
echo 900 >/proc/sys/net/ipv4/tcp_keepalive_time
Gyorsteszt
TODO!
Amanda szerver telepítése
Még ne vedd komolyan, csak önmagára amandázó szerveren (azonos kliens verzió) van tesztelve!
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
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ú (Squeeze-hez legalább v.1.0.0) 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
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
Gyorsteszt
TODO!
Az amanda-archive telepítése és használata
Az amanda-archive olyan 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. Célszerűen periodikus archiválásra használható, pl. USB-n felcsatolt külső winchesterre (ez az eszköz utána elvihető és más helyen, pl. páncélszekrényben őrizhető, katasztrófa esetén elővehető).
Figyelem! Az amanda-archive 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á!
A scriptet az amanda-server-addons csomag tartalmazza. Az alábbi leírásban azt egy külső winchesterre történő, on-demand archiváláshoz fogjuk beállítani.
- 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
- Készítsünk egy mount gyökérkönyvtárat az autofs által kezelendő partíciókhoz:
mkdir /mnt/auto
definiáljunk egy beállító állományt ehhez a mount point-hoz a /etc/auto.master közepe táján:
-rw-r--r-- root root /etc/auto.master [...] #/net -hosts # # Amanda archive automounts /mnt/auto /etc/auto.amanda --timeout=60 # Include /etc/auto.master.d/*.autofs
- Formázzunk meg egy kellően nagy méretű merevlemezt egyetlen ext3 partícióval! Csatlakoztassuk ezt USB-n keresztül a backup szerverhez, és jegyezzük fel, hogy a kernel milyen eszköznevet rendelt hozzá (példánkban legyen /dev/sdg)!
- Készítsük el az auto.amanda állományt, amely megmondja, hogy ennek a lemeznek az első partícióját (példánkban /dev/sdg1) a /mnt/auto/amanda helyre kell felcsatolni:
-rw-r--r-- root root /etc/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
Indítsuk újra az autofs daemont:
invoke-rc.d autofs restart
- Gyorstesztként csatlakoztassuk újra a külső merevlemezt (pl. az USB-egység ki- majd bekapcsolásával)! 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 auto.master-ben beállított timeout) és 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.
- Végül ü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. Így 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, elindul az archiválás, és ha elkészült, a következő munkanap reggel 9 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). Az archívum állományok a 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 minden friss lvl-0 nem fér rá a megadott merevlemezre.
Az Amanda használata
Amanda taskok 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.
Amanda disklist receptek
A klasszikus megoldás a kliensgépek partícióinak (kivéve /tmp, swap) egyben történő mentése:
# server.mydomain.com # # /boot server.mydomain.com /dev/md0 hard-disk-comp # / server.mydomain.com /dev/md3 hard-disk-comp # /usr server.mydomain.com /dev/md4 hard-disk-comp # /var server.mydomain.com /dev/md5 hard-disk-comp # other partitions... (if any)
azonban a production serverek /var partíciója általában nagyon nagy, és az állandó változások miatt mentés közben is változik (TODO: snapshot).
Elegendő lehet a teljes gépek helyett csak a releváns szolgáltatások adatainak, beállításainak mentése (bár teljes katasztrófa esetén ebből a gép "klónképe" nem állítható helyre - új gépet kell telepíteni és a szolgáltatásokat arra visszaállítani, ami lényegesen időigényesebb). Az alábbiakban egyes, ebben a Wikiben ismertetett szolgáltatások Amanda mentésére szolgáló receptek következnek.
A disklist-ben néha trükköket kell(het) alkalmazni (TODO!), az alábbi feltételek kielégítése érdekében:
- include-olni csak egy szinten lehet, az include direktívában nem szerepelhet alkönyvtár, és ha van include (de csak ekkor!), a mentést futtató backup:disk Linux rendszerfelhasználónak legalább belépési (--x) engedéllyel kell rendelkeznie a mentési egység (disklist entry, DLE) gyökérkönyvtárába;
- exclude-olni csak shell mintákkal lehet, reguláris kifejezéseket az Amanda (GNU tar) nem értelmez.
Ennek áthidalására, ahol mélyebb könyvtárszerkezetből kellene include-olni, ott megtehetjük, hogy felveszünk mindent, és igyekszünk kizárni, ami nem kell. Ilyenkor a kizáró kifejezést igyekezzünk csak az első eltérésig felírni, mert a mintánál rövidebb pathname nem fog illeszkedni a kizárásra!
DNS service
# server.mydomain.com # # Bind9 settings server.mydomain.com /srv/chroot/bind/etc/bind hard-disk-comp # Bind9 logfiles server.mydomain.com /var/log/bind9 hard-disk-comp
ownCloud példány
Egy wsm2 környezetben, házirend szerint telepített ownCloud példányról pl. az alábbi disklist alapján készíthetünk mentéseket:
- a beállítások mentésénél TODO!;
- a naplók mentésénél második szintű könyvtárat kell menteni trükkös exclude-dal;
- a web statisztika mentésénél második szintű könyvtárat kell menteni trükkös exclude-dal;
- a virtualhost tárterülete trükkök nélkül menthető;
- a példában a /mnt/storage alatt elkülönített, terjedelmesnek feltételezett adatterületet az elsődleges könyvtárak ABC szerinti felosztásával osztjuk szét;
- a közös kódkészlet trükkök nélkül menthető.
# settings # relevant logfiles FULLY.QUALIFIED.SERVERNAME /var/log { hard-disk-comp include "\./apache2" include append "\./php5" exclude "./apache2/[!F][!U][!L][!L][!Y]*" exclude append "./php5/[!F][!U][!L][!L][!Y]*" } # statistics webpages FULLY.QUALIFIED.SERVERNAME /var/www/./awstats /var/www { hard-disk-comp include "\./awstats" exclude "./awstats/[!F][!U][!L][!L][!Y]*" } # web virtualhost itself FULLY.QUALIFIED.SERVERNAME /var/www/./web /var/www { hard-disk-comp include "\./FULLY\.QUALIFIED\.HOSTNAME*" } # database FULLY.QUALIFIED.SERVERNAME /var/backups/mysql/last { hard-disk-comp-full include "./*oc_INSTANCENAME*" } # file storage (divided, using mnemonics) # see: https://wiki.zmanda.com/index.php/How_To:Split_DLEs_With_Exclude_Lists FULLY.QUALIFIED.SERVERNAME /mnt/storage/FULLY.QUALIFIED.HOSTNAME/./a-a /mnt/storage/FULLY.QUALIFIED.HOSTNAME { hard-disk-comp exclude "\./[b-z]*" exclude append "\./[A-Z]*" exclude append "\./[0-9]*" } FULLY.QUALIFIED.SERVERNAME /mnt/storage/FULLY.QUALIFIED.HOSTNAME/./b-z /mnt/storage/FULLY.QUALIFIED.HOSTNAME { hard-disk-comp exclude "\./[a]*" } # code base FULLY.QUALIFIED.SERVERNAME /usr/local/share { hard-disk-comp include "\./owncloud*" }
ProFTPm hosting
# server.mydomain.com # # ProFTPm settings server.mydomain.com /etc/proftpm hard-disk-comp # FTP logfiles server.mydomain.com /var/log/proftpd hard-disk-comp # MySQL databases daily dump created by mysql-addons (all databases, not only ftp-related) server.mydomain.com /var/backups/mysql/last hard-disk-tar-full # FTP storage server.mydomain.com /var/opt/ftp hard-disk-comp
Samba fileserver
# server.mydomain.com # Settings and databases server.mydomain.com /etc/samba hard-disk-comp server.mydomain.com /var/lib/samba hard-disk-comp server.mydomain.com /var/log/samba hard-disk-comp # # Shares server.mydomain.com /var/opt/samba/homes hard-disk-comp server.mydomain.com /var/opt/samba/profiles hard-disk-comp server.mydomain.com /var/opt/samba/services hard-disk-comp # # Maybe separated according to shares and tape size. server.mydomain.com /var/opt/samba/share hard-disk-comp
VExim mail service
# server.mydomain.com # # Courier IMAP/POP3 settings server.mydomain.com /etc/courier hard-disk-comp # Exim4 MTA settings server.mydomain.com /etc/exim4 hard-disk-comp # Squirrelmail MUA settings server.mydomain.com /etc/squirrelmail hard-disk-comp # VExim codebase server.mydomain.com /usr/local/share/vexim2 hard-disk-comp # VExim-related MySQL databases daily dump created by vexim-addons server.mydomain.com /var/backups/mysql/vexim hard-disk-tar-full # Squirrelmail MUA storage (address books, user's settings, etc.) server.mydomain.com /var/lib/squirrelmail hard-disk-comp # Mail storage server.mydomain.com /var/mail/.vexim hard-disk-comp # Courier IMAP/POP3 authentication and activity logfiles server.mydomain.com /var/log/courier hard-disk-comp # Exim4 MTA logfiles server.mydomain.com /var/log/exim4 hard-disk-comp # Squirrelmail and VExim web interface server.mydomain.com /var/www/mail.geocom.hu hard-disk-comp
wsm2 webhosting
# server.mydomain.com # # Webserver settings server.mydomain.com /etc/apache2 hard-disk-comp # AwStats settings server.mydomain.com /etc/awstats hard-disk-comp # Optionally - may contain archived migrations, etc. server.mydomain.com /home/webadmin hard-disk-comp # MySQL databases daily dump created by mysql-addons (all databases, not only web-related) server.mydomain.com /var/backups/mysql/last hard-disk-tar-full # AwStats database server.mydomain.com /var/lib/awstats hard-disk-comp # Webserver logs server.mydomain.com /var/log/apache2 hard-disk-comp # PHP logs server.mydomain.com /var/log/php5 hard-disk-comp # Web storage server.mydomain.com /var/www hard-disk-comp
Visszaállítás Amanda backup-pal
TODO!
Recovery with amrecover ----------------------- As root on the tape server: mkdir /tmp/restore cd /tmp/restore amrecover TASZK-NEVE setdate (Optional) sethost foo setdisk bar cd dir/which/contains/filetorecover add filetorecover settape chg-multi list extract quit
Ha a visszaállított állománynevek karakterkódolása nem lenne megfelelő:
convmv -r -f [AMILYENRŐL] -t [AMILYENRE] /tmp/restore
A convmv természetesen nem nyúl bele a tartalomba, csak a neveket módosítja.
Amanda task törlése
TODO!
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
Irodalom
- Az Amanda honlapja
- Amanda wiki
- Amanda és iptables