BackupNinja

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(Backupninja)
 
(egy szerkesztő 12 közbeeső változata nincs mutatva)
1. sor: 1. sor:
 
__FORCETOC__
 
__FORCETOC__
   
A backupninja egy konfigurációs felületet nyújt több különböző backup megoldás fölé. Jelen dokumentum az rdiff-backup-al vett konfigurációját taglalja.
+
A backupninja egy konfigurációs felületet nyújt több különböző backup-megoldás fölé. Jelen dokumentum az rdiff-backup-al vett konfigurációját tárgyalja, illetve magának az rdiff-backup-nak a működését.
   
   
10. sor: 10. sor:
 
apt-get install rdiff-backup backupninja
 
apt-get install rdiff-backup backupninja
   
Az rdiff-backup elég sok disztribúcióban megtalálható így ezt a megfelelő módon lehet telepíteni, a backupninja-t pedig a forrást[https://labs.riseup.net/code/projects/list_files/backupninja] letöltve, és kitömörítve a
+
Az rdiff-backup elég sok disztribúcióban megtalálható így ezt a megfelelő módon lehet telepíteni, a backupninja-t pedig a [https://labs.riseup.net/code/projects/list_files/backupninja forrást] letöltve, és kitömörítve a
   
 
./configure
 
./configure
20. sor: 20. sor:
 
== Rdiff-backup ==
 
== Rdiff-backup ==
   
Az rdiff-backup egy inkrementális, és teljes mentéseket is támogató program.
+
Az rdiff-backup egy inkrementális, és teljes mentéseket is támogató program. A mentési algoritmusa a librsync-re épül, ami egyezik az [http://samba.anu.edu.au/rsync/tech_report/ rsync alogritmusával]. Ebből adódóan inkább szöveges, mint bináris file-okhoz preferált a használata. Mindig a legutolsó mentés szerinti file-okat tárolja. A régebbi verziók diff láncokon keresztül érhetők el. A hosszú láncokat úgy lehet elkerülni, hogy mondjuk havonta új könyvtárba backupolunk. Az rdiff-backup képes ACL, és extended attribute-ok megőrzésére a mentés során a [http://pylibacl.sourceforge.net/ pylibacl], és a [http://pyxattr.sourceforge.net/ pyxattr] könyvtárak segítségével.
   
 
=== Mentés ===
 
=== Mentés ===
28. sor: 28. sor:
 
rdiff-backup /home /backup
 
rdiff-backup /home /backup
   
Ez alapesetben a /backup könyvtárba másolja a file-okat a /home könyvtárból, és létrehoz egy rdiff-backup-data könyvtárat, amiben a metaadatokat tárolja. Ennek eredményeként a backup könyvtárból akér cp-vel is visszamásolhatjuk az adott fileokat.
+
Ez alapesetben a /backup könyvtárba másolja a file-okat a /home könyvtárból, és létrehoz egy rdiff-backup-data könyvtárat, amiben a metaadatokat tárolja. Ennek eredményeként a backup könyvtárból akár cp-vel is visszamásolhatjuk az adott file-okat.
   
Természetesen lehet más hosztra is menteni, sőt akár két hoszt között is lehet vezérelni egy mentést egyetlen rdiff-backup paranccsal a következőképpen:
+
Lehet más hosztra is menteni. Ebben az esetben viszont egy rdiff-backup-nak kell szerver módban futnia a másik oldalon. Ezt az "rdiff-backup --server" parancs futtatásával érhetjük el. Nyilván érdemes erre valami init scriptet írni, ha az adott gépet mentések tárolására használjuk. Egy másik hosztra a következő paranccsal menthetünk:
   
rdiff-backup user1@host1::/home user2@host2::/backup
+
rdiff-backup /home user@host::/backup
   
A "-b" kapcsolóval lehet kikényszeríteni a teljes mentést.
+
Ez ssh fölött végzi a másolást. Egy további opció, hogy akár két gép között is levezérelhetjük a mentést. Ezt a következőképpen tehetjük:
  +
  +
rdiff-backup user@fromhost::/home user2@tohost::/backup
  +
  +
=== A backup könyvtár szerkezete ===
  +
  +
A backup könyvtár legfelső szintjén találhatóak a mentett file-ok, és könyvtárak. Mindig a legújabb verziók tárolódnak ezen a szinten. Az inkrementális mentés reverse diff-ekkel valósul meg, azaz egy file régebbi verzióját ezek visszatranszformálásával nyerhetjük. Másrészt minden backup könyvtárban található egy rdiff-backup-data nevű könyvtár, amiben a metaadatok tárolódnak. Ennek a szerkezete a következő:
  +
  +
backup.log # Ez az rdiff-backup adott backup directory-jához tartozó logfile-ja
  +
error_log.<datum>.data # Az adott <datum>-kori mentés hibái
  +
file_statistics.<datum>.data.gz # Ez az adott mentéskor a backup file-jainak változásáról készít statisztikát. Bővebben erről később.
  +
increments/<filenev eleresi uttal>.<datum>.diff.gz # Az adott file adott mentéshez tartozó reverse diff-je.
  +
increments/<filenev eleresi uttal>.<datum>.missing # Azt jelzi, hogy az adott időpontbeli mentésnél az adott file még nem létezett.
  +
increments.<datum>.dir # Nem jöttem rá, hogy ez mit tárol
  +
mirror_metadata.<datum>.diff.gz # Ebben a file <datum> mentési idejű állapotának metaadatai kerülnek. Bővebben erről később.
  +
session_statistics.<datum>.data # Ebben az adott mentésről tárol statisztikai adatokat. Bővebben erről később.
  +
  +
A <datum> formátuma a következő
  +
  +
<év>-<hónap>-<nap>T<óra>:<perc>:<másodperc>+<óra>:<perc>
  +
  +
Itt a második óra, és perc az időzónát jelöli. Bővebben erről a [http://www.w3.org/TR/NOTE-datetime.html specifikáció] oldalán.
  +
  +
Egy file_statistics file tartalma a következőképpen nézhet ki:
  +
  +
# Format of each line in file statistics file:
  +
# Filename Changed SourceSize MirrorSize IncrementSize
  +
search 1 32 NA NA
  +
tex.skeleton 1 297 NA NA
  +
tex.skeleton~ 1 254 NA NA
  +
  +
A Changed egy boolean változó, ami azt jelzi, hogy az előző mentés óta változott-e az adott file. Ez az első mentés az adott file-okról, ezért a mirror size-nak nincs értelme. Az IncrementSize akkor nem nulla, ha az adott file a legutóbbi mentés óta változott. Ekkor értéke "rdiff-backup-data/increments/" könyvtárbeli az adott filehoz, és mentéshez tartozó diff file mérete.
  +
  +
A mirror_metadata file akkor nem üres, ha létezik olyan file, ami az előző mentés óta változott. Ekkor a file régi metaadatait tárolja azért, hogy vissza lehessen állítani az eredeti állapotot. Egy file-hoz tartozó blokk a következőképpen néz ki:
  +
  +
File tex.skeleton
  +
Type reg
  +
Size 297
  +
SHA1Digest 4477d46c39cbc5a7fe2d9c5c46236557f13a7cab
  +
ModTime 1258391205
  +
Uid 0
  +
Uname root
  +
Gid 0
  +
Gname root
  +
Permissions 493
  +
  +
Az SHA1Digest a file sha1 hash-e. A Permissions mező formátumát nem sikerült megfejtenem, de nyilván nem megtévesztő a neve, mert a chmod-al való módosítások hatására ez is változott. A többi mező neve magáért beszél.
  +
  +
Egy session_statistics file a következőképpen néz ki:
  +
  +
StartTime 1260333670.00 (Wed Dec 9 05:41:10 2009)
  +
EndTime 1260333670.79 (Wed Dec 9 05:41:10 2009)
  +
ElapsedTime 0.79 (0.79 seconds)
  +
SourceFiles 5
  +
SourceFileSize 597 (597 bytes)
  +
MirrorFiles 1
  +
MirrorFileSize 0 (0 bytes)
  +
NewFiles 4
  +
NewFileSize 597 (597 bytes)
  +
DeletedFiles 0
  +
DeletedFileSize 0 (0 bytes)
  +
ChangedFiles 1
  +
ChangedSourceSize 0 (0 bytes)
  +
ChangedMirrorSize 0 (0 bytes)
  +
IncrementFiles 0
  +
IncrementFileSize 0 (0 bytes)
  +
TotalDestinationSizeChange 597 (597 bytes)
  +
Errors 0
  +
  +
Úgy gondolom ez nem szorul különösebb magyarázatra. Egy mentés statisztikai adatait tartalmazza. Ennek tartalma az "rdiff-backup --print-statistics
  +
" paranccsal is lekérdezhető.
   
 
=== Visszaállítás ===
 
=== Visszaállítás ===
46. sor: 46. sor:
 
A másik visszaállítási mód, hogy pontosan megmondjuk, hogy egy adott file melyik állapotát akarjuk visszaállítani. Egy példa erre:
 
A másik visszaállítási mód, hogy pontosan megmondjuk, hogy egy adott file melyik állapotát akarjuk visszaállítani. Egy példa erre:
   
rdiff-backup host::/backup/rdiff-backup-data/increments/file.2003-03-05T12:21:41-07:00.diff.gz /home/file
+
rdiff-backup host::/backup/rdiff-backup-data/increments/file.<datum>.diff.gz /home/file
  +
  +
Ha a legújabb mentett verzióra van szükségünk, akkor akár ki is másolhatjuk a backup könyvtár gyökeréből.
   
 
=== Szűrés ===
 
=== Szűrés ===
   
A programnak sokféle szűrő flagje van. Ezek az include, és exclude flagek kategóriájába esnek. Arra lehet használni ezeket, hogy adott szűrőnek megfelelő file-okat bevegyünk a mentésbe, vagy éppen kihagyjunk belőle. Néhány exclude flag, és funkciója a teljesség igénye nélkül:
+
A program sokféle szűrőmetódust támogat, amivel egy adott mentéshez hozzáadhatunk, vagy épp abból elvehetünk file-okat. Fontos tudni, hogy egy file-ra mindig a rá illeszkedő első szűrőszabály érvényes, még akkor is ha egy késöbbi szűrőszabály is illeszkedik rá. A hozzáadást a "--include" előtagú flagekkel, míg a kihagyást a "--exclude" előtagú flagekkel lehet kikényszeríteni.
   
--exclude <shell minta> # Ez egy tetszőleges shell mintára illeszt,
+
A legegyszerűbb a "--include/--exclude" flag. Ezek után adhatunk meg egy mintát, amelyekben a következő speciális karakterek szerepelhetnek zárójelek között, hogy a shell ne fejtse ki őket:
és azt kihagyja a mentésből
 
--exclude-fifos # Az elérési utakon található fifokat nem menti. Hasonló létezik
 
socket-re, dev file-ra, és egyéb speciális file-okra is.
 
--exclude-regexp <reguláris kifejezés> # a Reguláris kifejezésre illeszkedő file-ok nem
 
lesznek mentve
 
--exclude-filelist <filelista.txt> # Ez parseolja a filelista.txt file-t, és minden sorát
 
egy filenévként értelmezve úgy viselkedik, mintha mindegyikre kiadtuk volna
 
a --exclude filenév parancsot.
 
   
Akárhány szűrő parancsot ki lehet adni, de egy adott file-ra a legelső illeszkedő fog vonatkozni
+
* '*' minden olyan stringre illeszkedik, ami nem tartalmaz '/' karaktert
  +
* '**' minden minden stringre illeszkedik
  +
* '?' egy karakterre illeszkedik
  +
* '[<karakterek>]' csak a zárójelek között megadott karakterek/karaktertartományokra illeszkedik
   
További információ a szűrők, és az időformátumok részletes leírása található a program man oldalán[http://rdiff-backup.nongnu.org/rdiff-backup.1.html] található.
+
Mindezek elé még fűzhetünk egy "ignorecase:"-t is, aminek jelentése egyértelmű. A "--exclude" illeszkedik, ha a minta illeszkedik a file nevére, vagy a file egy olyan könyvtárban van, amire illeszkedik a minta. A "--include" ezeken túl akkor is illeszkedik egy könyvtárra, ha egy benne lévő file-ra illeszkedik a minta. A backupninja konfigurációs file-jaiban csak ilyen flag-ekhez tartozó minták adhatók meg.
  +
  +
A "--(include|exclude)-regexp" után [http://docs.python.org/library/re.html#regular-expression-syntax python reguláris kifejezések] adhatók meg szintén zárójelek között.
  +
  +
A "--(include|exclude)-filelist" után egy filenevet megadva a file minden sorát include-oljuk, vagy exclude-oljuk. A sor elejére egy '-' karaktert írva ellentétes viselkedést válthatunk ki a szűrésnél. Hasonló ezekhez a flag-ekhez a "--(include|exclude)-globbing-filelist", ahol az adott file minden sorában mintákat adhatunk meg úgy ahogy a "--(include|exclude)" flageknél.
  +
  +
A mindenféle speciális fileokat is lehet szűrni a "--(include|exclude)-special-files" flaggel. Ez a device, a socket, a pipe, és a szimbolikus link típusú file-okat szűri. Lehet külön-külön is szűrni ezeket.
  +
  +
Meg lehet adni a minimális, és maximális fileméretet a "--(min|max)-file-size" flaggel.
  +
  +
Tekintve, hogy általában automatizáltan mentünk értelmesebb lenne összeállítani valamilyen konfigurációs nyelvet, ami a fenti sokféle szűrőt helyettesíti. Sajnos reményeim ellenére ezt a backupninja nem valósítja meg.
  +
  +
=== Egyéb hasznos opciók ===
  +
  +
Valójában egy flag van még, ami mindenképpen említésre érdemes. A "--remove-older-than <időformátum>" flaggel a backup-ból, minden adott időnél régebbi reverse-diff-et eltávolíthatunk.
  +
  +
További információ, valamint a szűrők, és az időformátumok részletes leírása a program [http://rdiff-backup.nongnu.org/rdiff-backup.1.html man oldalán] található.
  +
  +
Láthatóan az rdiff-backup alapból semmilyen eszközt nem ad a kezünkbe arra nézve, hogy a backup-okat automatizáljuk. Írhatunk persze erre egy scriptet, amihez készítünk egy jobot a cron.d-ben, vagy használhatjuk a következőkben bemutatandó backupninja rdiff action-jét erre.
   
 
== Backupninja ==
 
== Backupninja ==
   
A backupninja lényegében egy konfiguráció wrapper különböző backup programok egységes kezeléséhez.
+
A backupninja lényegében egy konfiguráció wrapper különböző backup programok egységes kezeléséhez. Ez a program egy shellscriptgyüjtemény. A backupninja script óránként egyszer fut le mint egy cron job. Ez futtatja a /usr/local/share/backupninja könyvtárban található handler-eket, amik a /etc/backup.d/ könyvtárban található konfigurációs file-ok(action-ök) alapján vezérlik a különböző megoldásokat.
   
 
Adott egy fő konfigurációs file, ami default esetben a /etc/backupninja.conf. Ebben a következő változók szerepelnek:
 
Adott egy fő konfigurációs file, ami default esetben a /etc/backupninja.conf. Ebben a következő változók szerepelnek:
73. sor: 73. sor:
 
scriptdirectory # Értéke a backupninja script-jeit tartalmazó könyvtár neve.
 
scriptdirectory # Értéke a backupninja script-jeit tartalmazó könyvtár neve.
   
A különböző backup-okat vezérlő configfile-ok default-ból a /etc/backup.d könyvtárban vannak, és a suffix-ük dönti el, hogy hogyan értelmeződnek. A file-okat a karakterek rendezési sorrendje szerint dolgozza fel a backupninja, így ha a sorrend fontos akkor ajánlott a sysvinit-hez hasonló file-elnevezési konvenciót használni. Ezeket a file-okat action file-oknak hívják. Minden action file-ban értelmeződik a következő változó:
+
A különböző backup-okat vezérlő configfile-ok default-ból a /etc/backup.d könyvtárban vannak, és a suffix-ük dönti el, hogy hogyan értelmeződnek. A file-okat a karakterek rendezési sorrendje szerint dolgozza fel a backupninja, így ha a sorrend fontos akkor ajánlott a sysvinit-hez hasonló fileelnevezési konvenciót használni. Ezeket a file-okat action file-oknak hívják. Minden action file-ban értelmeződik a következő változó:
   
 
when = friday at 10:30 # Azaz a mentés minden péntek délelőtt 10:30-kor kezdődjön
 
when = friday at 10:30 # Azaz a mentés minden péntek délelőtt 10:30-kor kezdődjön
   
Ebből a változóból több is szerepelhet. Ekkor minden időpontban történik mentés. Ha nincs specifikálva ez a változó, akkor minden nap éjjel egykor fog végrehajtódni a mentés. A formátum a dokumentációból nekem nem volt teljesen világos, de 10-nél kisebb számok esetén nullát kell írni eléjük.
+
Ebből a változóból több is szerepelhet. Ekkor minden időpontban történik mentés. Ha nincs specifikálva ez a változó, akkor minden nap éjjel egykor fog végrehajtódni a mentés. A formátum a dokumentációból nekem nem volt teljesen világos, de 10-nél kisebb számok esetén nullát kell írni eléjük. A fenti kis konfigurációs file részlet ellentmondásban van avval, hogy a backupninja csak óránként egyszer fut le, de gondolom csak ilyen gyakran olvassa újra a konfigfile-okat.
   
 
=== Action file-ok ===
 
=== Action file-ok ===
   
Ezek a konfigurációs file-jai a különböző backup programoknak. Az rdiff-backup, a mysql, a postgresql, és a levelek mentésére szolgáló maildir file szintaxisát mutatom be röviden.
+
Ezek a konfigurációs file-jai a különböző backup programoknak. Az rdiff-backup, a mysql, és a levelek mentésére szolgáló maildir file szintaxisát mutatom be röviden.
   
 
==== MySQL ====
 
==== MySQL ====
   
A konfigurációs file suffix-ja a ".mysql". A következő változókat lehet definiálni ebben:
+
A konfigurációs file suffix-a a ".mysql". A következő változókat lehet definiálni ebben:
   
 
dbusername,dbpassword,dbhost,databases,backupdir,compress # Ezeket nem részletezném,
 
dbusername,dbpassword,dbhost,databases,backupdir,compress # Ezeket nem részletezném,
 
mivel intuíciónk nem csal.
 
mivel intuíciónk nem csal.
hotcopy # yes esetén a mysqlhotcopy[http://linux.die.net/man/1/mysqlhotcopy] programot használja mentésre, ami az adatbázis
+
hotcopy # yes esetén a [http://linux.die.net/man/1/mysqlhotcopy mysqlhotcopy] programot használja mentésre, ami az adatbázis
 
bináris file-jairól készít másolatot.
 
bináris file-jairól készít másolatot.
sqldump # yes esetén a mysqldump[http://www.manpagez.com/man/1/mysqldump/] programot használja a backup készítéséhez, ami egy
+
sqldump # yes esetén a [http://www.manpagez.com/man/1/mysqldump/ mysqldump] programot használja a backup készítéséhez, ami egy
 
sql scriptként készít mentést az adatbázisról.
 
sql scriptként készít mentést az adatbázisról.
  +
  +
==== Levelek ====
  +
  +
A levelek backupolásáért felelős config file suffix-a ".maildir". A konfigurációs fileban a következő változóknak adhatunk értéket:
  +
  +
keepdaily,keepweekly,keepmonthly # Azt lehet ezekkel megadni, hogy a napi,heti, havi mentésekből
  +
hányat tartson meg.
  +
srcdir # A maildir helye
  +
desthost,destdir,destuser # Milyen hoszt milyen könyvtárába, és milyen userként mentjük a leveleket.
  +
  +
Ennek a handler-je rsync-el menti a megfelelő könyvtárakat.
  +
  +
==== rdiff-backup ====
  +
  +
A suffix itt ".rdiff". Ez a konfigurációs file kicsit bonyolultabb az előzőeknél. Két szekciója van. A szekciók "[szekciónév]"-el kezdődnek, és egy következő szekcióig, vagy a file végéig tartanak. A [source] szekció változói a következők:
  +
  +
type # Ebből most cask a local támogatott, gondolom ezáltal a más gépek közötti rdiff vezérlése nem.
  +
keep # Ez az ridff-backup "--remove-older-than" flaghez tartozó változójának ad értéket napokban
  +
mérve. Ez vezérli azt, hogy maximálisan milyen régi backup-okat tartsunk meg.
  +
include # Ebből több is lehet, és mindegyik egy sima "--include" változójának felel meg.
  +
exclude # Az előzőhöz hasonló
  +
  +
A [dest] szekció változói:
  +
  +
type # Ebben az esetben remote, és local is lehet.
  +
host # Ez az a host ahova backupolni fogunk
  +
directory # A könyvtár ahova a backup-olás menni fog.
  +
user # Ezen usernév alatt történik a backupolás.
  +
  +
Az opciók könnyen megfeleltethetőek rdiff-backup parancsoknak, de a lehetséges parancsok csak egy szűk részhalmazát fedik le. Írhatók viszont az action file-okhoz saját handler-ek is, de akár az rdiff-hez tartozó default handler-t is kiegészíthetjük, hogy több parancssori opciót lehessen vele állítani.
  +
  +
=== Handler-ek ===
  +
  +
A handler-ek sima shellscript-ek. Olvashatunk róluk a [https://labs.riseup.net/code/wiki/backupninja/Handlers handlerekről szóló oldalon], vagy a /usr/local/share/backupninja könyvtárban található handler-ek forrásából.

A lap jelenlegi, 2009. december 12., 20:06-kori változata


A backupninja egy konfigurációs felületet nyújt több különböző backup-megoldás fölé. Jelen dokumentum az rdiff-backup-al vett konfigurációját tárgyalja, illetve magának az rdiff-backup-nak a működését.


Tartalomjegyzék

[szerkesztés] 1 Telepítés, és előfeltételek

Debian alatt a következőképpen lehet telepíteni:

apt-get install rdiff-backup backupninja

Az rdiff-backup elég sok disztribúcióban megtalálható így ezt a megfelelő módon lehet telepíteni, a backupninja-t pedig a forrást letöltve, és kitömörítve a

./configure
make
sudo make install

hármassal telepíthetünk.

[szerkesztés] 2 Rdiff-backup

Az rdiff-backup egy inkrementális, és teljes mentéseket is támogató program. A mentési algoritmusa a librsync-re épül, ami egyezik az rsync alogritmusával. Ebből adódóan inkább szöveges, mint bináris file-okhoz preferált a használata. Mindig a legutolsó mentés szerinti file-okat tárolja. A régebbi verziók diff láncokon keresztül érhetők el. A hosszú láncokat úgy lehet elkerülni, hogy mondjuk havonta új könyvtárba backupolunk. Az rdiff-backup képes ACL, és extended attribute-ok megőrzésére a mentés során a pylibacl, és a pyxattr könyvtárak segítségével.

[szerkesztés] 2.1 Mentés

A /home könyvtárat a /backup-ba a következőképpen backupolhatjuk:

rdiff-backup /home /backup

Ez alapesetben a /backup könyvtárba másolja a file-okat a /home könyvtárból, és létrehoz egy rdiff-backup-data könyvtárat, amiben a metaadatokat tárolja. Ennek eredményeként a backup könyvtárból akár cp-vel is visszamásolhatjuk az adott file-okat.

Lehet más hosztra is menteni. Ebben az esetben viszont egy rdiff-backup-nak kell szerver módban futnia a másik oldalon. Ezt az "rdiff-backup --server" parancs futtatásával érhetjük el. Nyilván érdemes erre valami init scriptet írni, ha az adott gépet mentések tárolására használjuk. Egy másik hosztra a következő paranccsal menthetünk:

rdiff-backup /home user@host::/backup

Ez ssh fölött végzi a másolást. Egy további opció, hogy akár két gép között is levezérelhetjük a mentést. Ezt a következőképpen tehetjük:

rdiff-backup user@fromhost::/home user2@tohost::/backup

[szerkesztés] 2.2 A backup könyvtár szerkezete

A backup könyvtár legfelső szintjén találhatóak a mentett file-ok, és könyvtárak. Mindig a legújabb verziók tárolódnak ezen a szinten. Az inkrementális mentés reverse diff-ekkel valósul meg, azaz egy file régebbi verzióját ezek visszatranszformálásával nyerhetjük. Másrészt minden backup könyvtárban található egy rdiff-backup-data nevű könyvtár, amiben a metaadatok tárolódnak. Ennek a szerkezete a következő:

backup.log # Ez az rdiff-backup adott backup directory-jához tartozó logfile-ja
error_log.<datum>.data # Az adott <datum>-kori mentés hibái
file_statistics.<datum>.data.gz # Ez az adott mentéskor a backup file-jainak változásáról készít statisztikát. Bővebben erről később.
increments/<filenev eleresi uttal>.<datum>.diff.gz # Az adott file adott mentéshez tartozó reverse diff-je.
increments/<filenev eleresi uttal>.<datum>.missing # Azt jelzi, hogy az adott időpontbeli mentésnél az adott file még nem létezett.
increments.<datum>.dir # Nem jöttem rá, hogy ez mit tárol
mirror_metadata.<datum>.diff.gz # Ebben a file <datum> mentési idejű állapotának metaadatai kerülnek. Bővebben erről később.
session_statistics.<datum>.data # Ebben az adott mentésről tárol statisztikai adatokat. Bővebben erről később.

A <datum> formátuma a következő

<év>-<hónap>-<nap>T<óra>:<perc>:<másodperc>+<óra>:<perc>

Itt a második óra, és perc az időzónát jelöli. Bővebben erről a specifikáció oldalán.

Egy file_statistics file tartalma a következőképpen nézhet ki:

# Format of each line in file statistics file:
# Filename Changed SourceSize MirrorSize IncrementSize
search 1 32 NA NA
tex.skeleton 1 297 NA NA
tex.skeleton~ 1 254 NA NA

A Changed egy boolean változó, ami azt jelzi, hogy az előző mentés óta változott-e az adott file. Ez az első mentés az adott file-okról, ezért a mirror size-nak nincs értelme. Az IncrementSize akkor nem nulla, ha az adott file a legutóbbi mentés óta változott. Ekkor értéke "rdiff-backup-data/increments/" könyvtárbeli az adott filehoz, és mentéshez tartozó diff file mérete.

A mirror_metadata file akkor nem üres, ha létezik olyan file, ami az előző mentés óta változott. Ekkor a file régi metaadatait tárolja azért, hogy vissza lehessen állítani az eredeti állapotot. Egy file-hoz tartozó blokk a következőképpen néz ki:

File tex.skeleton
  Type reg
  Size 297
  SHA1Digest 4477d46c39cbc5a7fe2d9c5c46236557f13a7cab
  ModTime 1258391205
  Uid 0
  Uname root
  Gid 0
  Gname root
  Permissions 493

Az SHA1Digest a file sha1 hash-e. A Permissions mező formátumát nem sikerült megfejtenem, de nyilván nem megtévesztő a neve, mert a chmod-al való módosítások hatására ez is változott. A többi mező neve magáért beszél.

Egy session_statistics file a következőképpen néz ki:

StartTime 1260333670.00 (Wed Dec  9 05:41:10 2009)
EndTime 1260333670.79 (Wed Dec  9 05:41:10 2009)
ElapsedTime 0.79 (0.79 seconds)
SourceFiles 5
SourceFileSize 597 (597 bytes)
MirrorFiles 1
MirrorFileSize 0 (0 bytes)
NewFiles 4
NewFileSize 597 (597 bytes)
DeletedFiles 0
DeletedFileSize 0 (0 bytes)
ChangedFiles 1
ChangedSourceSize 0 (0 bytes)
ChangedMirrorSize 0 (0 bytes)
IncrementFiles 0
IncrementFileSize 0 (0 bytes)
TotalDestinationSizeChange 597 (597 bytes)
Errors 0

Úgy gondolom ez nem szorul különösebb magyarázatra. Egy mentés statisztikai adatait tartalmazza. Ennek tartalma az "rdiff-backup --print-statistics " paranccsal is lekérdezhető.

[szerkesztés] 2.3 Visszaállítás

A visszaállításra két lehetőségünk van. Az egyik, hogy megadunk egy időtartamot. Ez egy minimumot jelent a backup korára. A következőképpen használhatjuk ezt:

rdiff-backup -r 3D host::/backup /home

A 3D három napot jelent. Ebben az esetben, ha van egy 2, és egy 4 napos mentésünk, akkor a 4 nappal ezelőtti állapot lesz visszaállítva.

A másik visszaállítási mód, hogy pontosan megmondjuk, hogy egy adott file melyik állapotát akarjuk visszaállítani. Egy példa erre:

rdiff-backup host::/backup/rdiff-backup-data/increments/file.<datum>.diff.gz /home/file

Ha a legújabb mentett verzióra van szükségünk, akkor akár ki is másolhatjuk a backup könyvtár gyökeréből.

[szerkesztés] 2.4 Szűrés

A program sokféle szűrőmetódust támogat, amivel egy adott mentéshez hozzáadhatunk, vagy épp abból elvehetünk file-okat. Fontos tudni, hogy egy file-ra mindig a rá illeszkedő első szűrőszabály érvényes, még akkor is ha egy késöbbi szűrőszabály is illeszkedik rá. A hozzáadást a "--include" előtagú flagekkel, míg a kihagyást a "--exclude" előtagú flagekkel lehet kikényszeríteni.

A legegyszerűbb a "--include/--exclude" flag. Ezek után adhatunk meg egy mintát, amelyekben a következő speciális karakterek szerepelhetnek zárójelek között, hogy a shell ne fejtse ki őket:

  • '*' minden olyan stringre illeszkedik, ami nem tartalmaz '/' karaktert
  • '**' minden minden stringre illeszkedik
  • '?' egy karakterre illeszkedik
  • '[<karakterek>]' csak a zárójelek között megadott karakterek/karaktertartományokra illeszkedik

Mindezek elé még fűzhetünk egy "ignorecase:"-t is, aminek jelentése egyértelmű. A "--exclude" illeszkedik, ha a minta illeszkedik a file nevére, vagy a file egy olyan könyvtárban van, amire illeszkedik a minta. A "--include" ezeken túl akkor is illeszkedik egy könyvtárra, ha egy benne lévő file-ra illeszkedik a minta. A backupninja konfigurációs file-jaiban csak ilyen flag-ekhez tartozó minták adhatók meg.

A "--(include|exclude)-regexp" után python reguláris kifejezések adhatók meg szintén zárójelek között.

A "--(include|exclude)-filelist" után egy filenevet megadva a file minden sorát include-oljuk, vagy exclude-oljuk. A sor elejére egy '-' karaktert írva ellentétes viselkedést válthatunk ki a szűrésnél. Hasonló ezekhez a flag-ekhez a "--(include|exclude)-globbing-filelist", ahol az adott file minden sorában mintákat adhatunk meg úgy ahogy a "--(include|exclude)" flageknél.

A mindenféle speciális fileokat is lehet szűrni a "--(include|exclude)-special-files" flaggel. Ez a device, a socket, a pipe, és a szimbolikus link típusú file-okat szűri. Lehet külön-külön is szűrni ezeket.

Meg lehet adni a minimális, és maximális fileméretet a "--(min|max)-file-size" flaggel.

Tekintve, hogy általában automatizáltan mentünk értelmesebb lenne összeállítani valamilyen konfigurációs nyelvet, ami a fenti sokféle szűrőt helyettesíti. Sajnos reményeim ellenére ezt a backupninja nem valósítja meg.

[szerkesztés] 2.5 Egyéb hasznos opciók

Valójában egy flag van még, ami mindenképpen említésre érdemes. A "--remove-older-than <időformátum>" flaggel a backup-ból, minden adott időnél régebbi reverse-diff-et eltávolíthatunk.

További információ, valamint a szűrők, és az időformátumok részletes leírása a program man oldalán található.

Láthatóan az rdiff-backup alapból semmilyen eszközt nem ad a kezünkbe arra nézve, hogy a backup-okat automatizáljuk. Írhatunk persze erre egy scriptet, amihez készítünk egy jobot a cron.d-ben, vagy használhatjuk a következőkben bemutatandó backupninja rdiff action-jét erre.

[szerkesztés] 3 Backupninja

A backupninja lényegében egy konfiguráció wrapper különböző backup programok egységes kezeléséhez. Ez a program egy shellscriptgyüjtemény. A backupninja script óránként egyszer fut le mint egy cron job. Ez futtatja a /usr/local/share/backupninja könyvtárban található handler-eket, amik a /etc/backup.d/ könyvtárban található konfigurációs file-ok(action-ök) alapján vezérlik a különböző megoldásokat.

Adott egy fő konfigurációs file, ami default esetben a /etc/backupninja.conf. Ebben a következő változók szerepelnek:

loglevel # Értéke 1, és 5 között lehet, és minél nagyobb a szám annál több dolgot logol
reportemail # Az az email cím, ahova sikeres backup, vagy probléma esetén email-t kell küldeni.
reportsuccess # yes, vagy no lehet az értéke, és yes esetén küld levelet a 
reportemail-es címre sikeres backup esetén
reportwarning # Értéke szintén yes/no lehet, és akkor küld email-t, ha volt valami 
probléma a mentéssel.
logfile # Értéke a logfile helye.
scriptdirectory # Értéke a backupninja script-jeit tartalmazó könyvtár neve.

A különböző backup-okat vezérlő configfile-ok default-ból a /etc/backup.d könyvtárban vannak, és a suffix-ük dönti el, hogy hogyan értelmeződnek. A file-okat a karakterek rendezési sorrendje szerint dolgozza fel a backupninja, így ha a sorrend fontos akkor ajánlott a sysvinit-hez hasonló fileelnevezési konvenciót használni. Ezeket a file-okat action file-oknak hívják. Minden action file-ban értelmeződik a következő változó:

when = friday at 10:30 # Azaz a mentés minden péntek délelőtt 10:30-kor kezdődjön

Ebből a változóból több is szerepelhet. Ekkor minden időpontban történik mentés. Ha nincs specifikálva ez a változó, akkor minden nap éjjel egykor fog végrehajtódni a mentés. A formátum a dokumentációból nekem nem volt teljesen világos, de 10-nél kisebb számok esetén nullát kell írni eléjük. A fenti kis konfigurációs file részlet ellentmondásban van avval, hogy a backupninja csak óránként egyszer fut le, de gondolom csak ilyen gyakran olvassa újra a konfigfile-okat.

[szerkesztés] 3.1 Action file-ok

Ezek a konfigurációs file-jai a különböző backup programoknak. Az rdiff-backup, a mysql, és a levelek mentésére szolgáló maildir file szintaxisát mutatom be röviden.

[szerkesztés] 3.1.1 MySQL

A konfigurációs file suffix-a a ".mysql". A következő változókat lehet definiálni ebben:

dbusername,dbpassword,dbhost,databases,backupdir,compress # Ezeket nem részletezném, 
mivel intuíciónk nem csal.
hotcopy # yes esetén a mysqlhotcopy programot használja mentésre, ami az adatbázis 
bináris file-jairól készít másolatot.
sqldump # yes esetén a mysqldump programot használja a backup készítéséhez, ami egy 
sql scriptként készít mentést az adatbázisról.

[szerkesztés] 3.1.2 Levelek

A levelek backupolásáért felelős config file suffix-a ".maildir". A konfigurációs fileban a következő változóknak adhatunk értéket:

keepdaily,keepweekly,keepmonthly # Azt lehet ezekkel megadni, hogy a napi,heti, havi mentésekből 
hányat tartson meg.
srcdir # A maildir helye
desthost,destdir,destuser # Milyen hoszt milyen könyvtárába, és milyen userként mentjük a leveleket.

Ennek a handler-je rsync-el menti a megfelelő könyvtárakat.

[szerkesztés] 3.1.3 rdiff-backup

A suffix itt ".rdiff". Ez a konfigurációs file kicsit bonyolultabb az előzőeknél. Két szekciója van. A szekciók "[szekciónév]"-el kezdődnek, és egy következő szekcióig, vagy a file végéig tartanak. A [source] szekció változói a következők:

type # Ebből most cask a local támogatott, gondolom ezáltal a más gépek közötti rdiff vezérlése nem.
keep # Ez az ridff-backup "--remove-older-than" flaghez tartozó változójának ad értéket napokban
mérve. Ez vezérli azt, hogy maximálisan milyen régi backup-okat tartsunk meg.
include # Ebből több is lehet, és mindegyik egy sima "--include" változójának felel meg.
exclude # Az előzőhöz hasonló

A [dest] szekció változói:

type # Ebben az esetben remote, és local is lehet.
host # Ez az a host ahova backupolni fogunk
directory # A könyvtár ahova a backup-olás menni fog.
user # Ezen usernév alatt történik a backupolás.

Az opciók könnyen megfeleltethetőek rdiff-backup parancsoknak, de a lehetséges parancsok csak egy szűk részhalmazát fedik le. Írhatók viszont az action file-okhoz saját handler-ek is, de akár az rdiff-hez tartozó default handler-t is kiegészíthetjük, hogy több parancssori opciót lehessen vele állítani.

[szerkesztés] 3.2 Handler-ek

A handler-ek sima shellscript-ek. Olvashatunk róluk a handlerekről szóló oldalon, vagy a /usr/local/share/backupninja könyvtárban található handler-ek forrásából.

Személyes eszközök