Dirvish
Contents
/etc/dirvish/master.conf
## Example dirvish master configuration file: bank: /storage/dirvish_bank image-default: %Y%m%d log: bzip2 index: bzip2 exclude: lost+found/ core *~ .nfs* dev/ proc/ tmp/ mnt/ Runall: fileserver_data 22:00 mailserver_data 22:00 # mailserver_filesystem 22:00 expire-default: +15 days expire-rule: # MIN HR DOM MON DOW STRFTIME_FMT * * * * 1 +3 months # * * 1-7 * 1 +1 year # * * 1-7 1,4,7,10 1 * 10-20 * * * +4 days # * * * * 2-7 +15 days
default.conf
De gebruikte config heeft de betreffende dirvish-bank in /storage/dirvish_bank/fileserver_data/ staan. Een dirvish-bank is een dirvish-bank, omdat er de file /dirvish/default.conf in staat met de volgende inhoud:
client: root@192.168.1.5 tree: /storage/networkdrive xdev: 0 index: gzip
Voorbeeld na een paar weken aan dirvish-backup:
backupserver:/storage/dirvish_bank/fileserver_data# ls 20080203 20080224 20080304 20080307 20080310 20080313 20080316 20080210 20080302 20080305 20080308 20080311 20080314 dirvish 20080217 20080303 20080306 20080309 20080312 20080315
Met onder elke "datum-directory" de volgende structuur:
backupserver:/storage/dirvish_bank/fileserver_data# ls -l 20080203/ total 4636 -rw-r--r-- 1 root root 4718902 Feb 4 10:51 index.gz -rw-r--r-- 1 root root 759 Feb 4 10:51 log -rw-r--r-- 1 root root 842 Feb 4 10:51 summary drwxrwxr-x 20 1017 users 4096 Jan 15 15:29 tree
Onder de directory "tree" is een volledige snapshot te vinden van de datastructuur van dat moment.
Dirvish-bank initialiseren
Om een vault te kunnen gebruiken moet deze eerst een keer aangemaakt worden. Dit doe je dmv het volgende commando:
dirvish --vault fileserver_data --init
N.B. Dit maakt een complete rsync backup van je data, dus kan een grotere netwerk/server belasting veroorzaken dan een normale backup.
cronjob
De cronjob om de backups te maken ziet er als volgt uit:
# m h dom mon dow command 0 22 * * * /usr/sbin/dirvish-expire --quiet ; /usr/sbin/dirvish-runall --quiet
Automatisch inloggen via ssh op een andere machine
Genereer eerst een eigen ssh-identity.
ssh-keygen -t dsa
Eventueel kun je een passphrase opgeven, maar dat is in dit geval niet praktisch. Dit maakt de private id_dsa en public key id_dsa.pub aan in /root/.ssh/ Hierna kopieer je die key naar de andere machine (waarop je automatisch wilt inloggen):
ssh-copy-id -i id_dsa root@mail
Zorg wel dat de hostname mail bestaat en maak deze desnoods aan in de /etc/hosts Hierna kun je zonder een wachtwoord in te hoeven vullen, inloggen op de andere pc ("mail" in dit geval) Rsync en dergelijke hebben nu ook geen wachtwoord meer nodig.
Kopieren van Dirvish-vault
Ik heb een script geschreven wat op de CH3SNAS automatisch na het booten de backup-server kopieert naar zijn eigen schijven. Op de CH3SNAS heb ik met funplug eerst een Linux-distributie gezet.
Script kijkt wat de laatste lokale backup is, en haalt vervolgens alles wat nieuwer is van de backupserver (inclusief --link-dest)
#!/bin/sh hostname=192.1.132.15 dirvishbank=/storage/dirvish_bank/ remote_dirvishbank=/storage/dirvish_bank/ expire_days=100 TODAY=`date +%Y%m%d` dobackup(){ echo "Doing backup of $dirvishbank / $dirvishvault" cd /$dirvishbank/$dirvishvault/ LATEST_LOCAL=`ls | tail -n 1` remote_allfiles=`ssh root@$hostname ls /storage/dirvish_bank/$dirvishvault/ --file-type | grep '/$' |sort -n |grep '[0-9]'` for file in $remote_allfiles do remote_latest=$file done remote_backups=`ssh root@$hostname ls /storage/dirvish_bank/$dirvishvault/ --file-type | grep '/$' |sort -n |grep '[0-9]' |grep -B 26 $remote_latest |grep todo=`echo $remote_backups $LATEST_LOCAL/ |xargs -n 1 echo|sort -n | uniq |grep -A 26 $LATEST_LOCAL/ |grep -v $LATEST_LOCAL/` for ARG in $todo do echo "Transferring $dirvishvault using $LATEST_LOCAL as link-dest, processing $ARG" rsync -e 'ssh -ax -c blowfish' -vrltH --delete -pgo --stats -D --numeric-ids -x --link-dest=/$dirvishbank/$dirvishvault/$LATEST_LOCAL root@$hostname:$remote_dirvishbank/$dirvish LATEST_LOCAL=$ARG done } dirvishvault=system_files/ dobackup dirvishvault=mailserver_data/ dobackup dirvishvault=tekensysteem_data/ dobackup dirvishvault=fileserver_data/ dobackup
Er is geen dirvish-expire op de CH3NAS (eventueel een keer kijken naar waarom dat (een perl-script) niet werkt). Oude backups (meer dan 100 dagen) verwijderen met:
find /storage/dirvish_bank/VAULT -maxdepth 1 -mtime +100 -type d -exec rm -r {} \;
Op dit moment 2 schijven in de CH3NAS, eenmaal 500 en eenmaal 300G:
# df -h Filesystem Size Used Available Use% Mounted on rootfs 9.7M 7.2M 2.0M 78% / /dev/root 9.7M 7.2M 2.0M 78% / /dev/sda2 457.5G 132.8G 324.7G 29% /mnt/HD_a2 /dev/sdb2 292.4G 191.2G 101.2G 65% /mnt/HD_b2 /dev/sda4 486.2M 9.0k 486.2M 0% /mnt/HD_a4 /dev/sdb4 486.2M 5.0k 486.2M 0% /mnt/HD_b4
In /storage/dirvish_bank staan symlinks, zodat alle backups van de dirvish-backups uniform te benaderen zijn:
/storage/dirvish_bank # ls -l lrwxrwxrwx 1 root root 38 Jan 26 13:37 fileserver_data -> /mnt/HD_a2/dirvishbank/fileserver_data lrwxrwxrwx 1 root root 46 Jan 26 13:37 fileserver_installation -> /mnt/HD_b2/dirvishbank/fileserver_installation lrwxrwxrwx 1 root root 38 Jan 26 13:37 mailserver_data -> /mnt/HD_b2/dirvishbank/mailserver_data lrwxrwxrwx 1 root root 46 Jan 26 13:37 mailserver_installation -> /mnt/HD_b2/dirvishbank/mailserver_installation lrwxrwxrwx 1 root root 36 Jan 28 13:30 system_files -> /mnt/HD_a2/dirvishbank/system_files/
fileserver_data en system_files komen dus op de schijf van 500, de rest op de 300G.