Dit is een Nederlandstalige howto over hoe je backups kunt maken met rdup — waarbij gezegd moet worden dat ik de auteur van rdup ben. rdup is geen point en click applicatie, 't is bedoelt als een powertool voor mensen die (meer) controle willen over hun backups.

Wat is rdup?

rdup is een platform voor backups. Het genereert een lijst van files die moeten worden gebackupped. Verder levert het de tools om deze lijst te verwerken. Het delegeert encryptie, compressie, transport en format-conversie naar andere programmas op een echte Unix manier.

nicehacks.org

Of met andere woorden:

rdup is de eerste backup tool die geen backups maakt!

Eerst een (semi)waarschuwing, als je "gewoon" je data van machine A naar B wilt kopieren en verder niks geavanceerders nodig hebt (encryptie, compressie of whatever), dan wil je waarschijnlijk rsync of rsnapshot gaan gebruiken.

Goed, als je nog leest, dan wil je waarschijnlijk meer geavanceerde backups maken dan je tot nu toe hebt gaan. Met rdup kun je:

  • alle bestanden laten converteren, denk aan encryptie, maar elk Unix filter kan hiervoor gebruikt worden (rev, sort, grep, gzip, etc.);
  • pad encryptie, oftewel /home/miekg wordt iets als /Xyfgs==/maAXX== in je backup;
  • remote storage; bewaar je backup offsite;
  • verschillende output formaten: tar, pax of files op disk.

In dit artikeltje wil ik het hebben over:

  • Installatie;
  • Backups met rdup-simple;
  • Remote backup;
  • Restore.

Installatie

We gaan hier rdup zelf even compileren, daarvoor heb je wel wat extra pakketten nodig. Op een Debian/Ubuntu machine:

# apt-get install libglib2.0-0 libglib2.0-dev libpcre3-dev libpcre3 \
libarchive-dev libarchive1 mcrypt automake autoconf gcc libc6-dev

Dan rdup downloaden vanaf miek.nl/projects/rdup/rdup.tar.bz2. Je krijgt dan automatische de laatste versie, nu rdup-1.1.2. Nu uitpakken, compileren en installeren:

$ tar xvf rdup-1.1.2.tar.bz2
$ cd rdup-1.1.2
$ ./configure && make
# make install

Als alles goed gegaan is heb je nu rdup geinstalleerd in /usr/local, en zou /usr/local/bin/rdup -V moeten werken en:

rdup 1.1.2

weer geven. rdup zit ook in de meeste distributies, maar dan is je installatie niet altijd up to date en er zijn de laatste tijd nogal wat wijzingen geweest. Je kunt ook het GIT repository uit checken, zie daarvoor miek.nl/projects/rdup.

Backups maken

rdup bestaat uit een 3-tal commando's:

  • rdup: dit zoekt uit wat er gebackupped moet worden;
  • rdup-tr: transformeer rdup output naar iets anders (tar, pax, ...). In deze howto zullen we hiermee vooralsnog weinig doen;
  • rdup-up: update een bestaande directory met een nieuwe backup.

Verder zit er een hulp script dat een aantal zaken makkelijker kan maken, dit script heet rdup-simple en is een wrapper rond de drie genoemde commando's. Het werkt als volgt:

$ /usr/local/bin/rdup-simple ~ /backup/

Maakt een backup van je homedir (~) naar /backup/ waar rdup-simple een datum structuur aanmaakt, je krijgt dus iets te zien als 201003/15 als je op 15 maart 2010 een backup maakt.

Met de -z vlag van rdup-simple wordt de hele backup gezipped. Met -k KEYFILE worden alle files gecodeerd met de sleutel die in de file KEYFILE staat. Deze vlaggen kunnen ook gecombineerd worden:

$ echo "mijn sleutel" > KEY
$ /usr/local/bin/rdup-simple -z -k KEY ~ /backup

geeft je een gecomprimeerde en gecodeerde backup in /backup:

 $ file /backup/201003/15/home/miekg/bin/cgo
 /backup/201003/15/home/miekg/bin/cgo: mcrypt 2.5 encrypted
 data, algorithm: rijndael-128, keysize: 32 bytes, mode: cbc,

Inderdaad gecodeerd. Ook maar even controleren of het gzipped is. Eerst decoderen:

 $ mcrypt -d -f KEY < /backup/201003/15/home/miekg/bin/cgo > /tmp/cgo.plain 
 $ file /tmp/cgo.plain  
 /tmp/cgo.plain: gzip compressed data, from Unix, last modified: Sun Feb  7 12:03:36 2010

Ja, die is dus ook gezipped; rdup-simple zal altijd eerst comprimeren en dan coderen.

Going places

Als je gewoon lokaal een backup maakt die niet gecodeerd is, kun je net zo goed rsync of rsnapshot gebruiken. Het wordt pas leuk als je jouw backup bij iemand anders wilt neerzetten en dan natuurlijk gecodeerd en eventueel ook met pad-encryptie. Deze functionaliteit is ook in rdup-simple ingebouwd.

Met:

$ rdup-simple ~ ssh://user@remotehost/backup/mijnhost

stuur je een backup van je home directory naar remotehost in de directory /backup/mijnhost. Die backup staat daar zonder encryptie en dat kan natuurlijk niet, dus:

$ echo "mijn geheime sleutel" > KEY  # voor de file encryptie
$ echo "pad sleutel12345" > PADKEY   # pad encryptie, precies 16 lang
$ rdup-simple -z -k KEY -X PADKEY ~ \
ssh://user@remotehost/backup/encryptedhost

Nu krijgen we dus een backup die gecodeerd is plus waarin elk pad gecodeerd is en waarin de files gecomprimeerd zijn. Dit is dus absoluut niet te lezen voor buitenstaanders, en ook niet meer voor jezelf als de encryptie sleutels kwijt raakt! De backup ziet er dan ongeveer zo uit:

$ ls -Rl /backup/encryptedhost
/backup/encryptedhost/201003/16:
drwxr-xr-x 3 miekg miekg 4.0K Mar 16 11:29 MaSchL_1t1U6LCJMQ5OdKg\=\=/
/backup/encryptedhost/201003/16/MaSchL_1t1U6LCJMQ5OdKg==:
-rwxr-xr-x 1 miekg miekg  397 Feb 20  2009 0Z0qU5amjVCNA0oadhW3Uw\=\=*
-rwxr-xr-x 2 miekg miekg 1.3K Feb 20  2009 2FFibrYPg_uAkEuN3Ff0tg\=\=*
-rwxr-xr-x 1 miekg miekg  557 Apr 13  2009 doxnpTxs3ImH__swNVZLMeSigknQ7JiWlJYYGu54Foo\=*
lrwxrwxrwx 1 miekg miekg   24 Mar 16 11:29 iZgUeeB4vURP7wIST_JXlw\=\= -> 2FFibrYPg_uAkEuN3Ff0tg\=\=*

Dat die laatste file is een symlink is, is zo'n beetje het enige dat te onderscheiden is.

Terug zetten backup

Ik geloof in het KISS principe en dus maakt rdup-simple alleen maar backups, er zit zelfs geen support in om oude backups op te ruimen, want daar hebben we al een andere tool voor (rm -rf). Het terug zetten van een backup is feitelijk een omgekeerde backup maken. We grijpen dan terug op de rdup commando's.

Laten we de backup die we gemaakt hebben met /usr/local/bin/rdup-simple -z -k KEY ~ /backup eens terug zetten naar een directory /tmp/restore.

$ rdup -Pmcrypt,-d,-f,KEY,-q -Pgzip,-d,-c /dev/null \
/backup/201003/15/home/miekg | rdup-up -t /tmp/restore

Apropos: dit is bijna identiek aan hoe rdup-simple de pipeline samenstelt voor de backup...

We laten rdup hier alle bestanden uit de backup directory oplepelen (rdup /dev/null /backup/....) en laten rdup deze eerst door mcrypt -d -f KEY -q sturen, in de commando regel hierboven is dat:

-Pmcrypt,-d,-f,KEY,-q

En daarna nog een keer door gzip -d -c, met:

-Pgzip,-d,-c

Dit wordt dan allemaal opgevangen door rdup-up en die zet het in /tmp/restore neer. Nu krijg je in je restore directory wel het hele backup pad (tmp/backup/201003/16/home/miekg) terug, dus de files waar het om gaat staan vrij "diep". Gelukkig kun je hier om heen werken door de -s N vlag te gebruiken van rdup-up deze sloopt N pad elementen uit je restore, dus met

$ rdup -Pmcrypt,-d,-f,KEY,-q -Pgzip,-d,-c /dev/null \
/backup/201003/15/home/miekg | rdup-up -t -s 5 /tmp/restore

Wordt /tmp/backup/201003/16/home (5 slashes) van het pad afgesnoept en staat de restore gelijk onder /tmp/restore. Je zou in dit geval zelfs -r /tmp/backup/201003/16/home/miekg kunnen gebruiken, welke niet slashes telt maar gewoon dat pad-deel eraf sloopt.

Meer info

Er is nog wel meer te vertellen over rdup, maar ik wil het hierbij laten en eventueel nog een artikel erover schrijven. Heb je nog vragen en/of opmerkingen dan kun je direct naar mij mailen of kijken op de rdup pagina.

Tags: rdup, dutch

0 comments

Comments are closed

If you really, really want to comment, please mail miek@miek.nl.

0 comments in moderator queue