Josef Kufner

Zálohování pomocí rsync

Notebook je vystaven daleko více příležitostem k jeho zničení a s ním i zničení dat na jeho disku. Právě proto jsem si usmyslel, že jej podrobím pravidelnému a plně automatizovanému zálohování. Díky záznamu v /etc/crontab na notebooku se zálohování provádí každý den v 4.04.

# /etc/crontab
# backup
4 4     * * *   root    /root/backup/cron-zaloha.sh

O samotné zálohování se stará celkem jednoduchý script, který nejdříve zkontroluje dostupnost zálohovacího počítače (ten mám v sousední místnosti a využívá se jako mailserver, router a všeobecně přístupný desktop – puštěn je stále). Pokud ping projde, spustí se vlastní zálohování, jehož výsledek je zaslán mailem rootovi na notebooku. Jako bonus je přidána tabulka volného místa na disku. Přihlašování po ssh je řešeno rsa klíči, takže není třeba žádného hesla.

#!/bin/bash
#
# Zalohovani FS z cronu
# /root/backup/cron-zaloha.sh
#

log=/var/tmp/backup-mail-$$
target=rsync://jkpc/daily-backup
info=true
cmd="rsync -ax --delete-after --exclude=/var/tmp/ --exclude=/mnt/ / $target"

ping jkpc -c 2 -W 3 >/dev/null 2>&1 || exit

echo started at `date` >$log
echo $cmd >>$log
echo >>$log

( eval $cmd \
        >>$log 2>&1
) && (
        echo "" >> $log
        echo "All seems be OK." >> $log
        echo "" >> $log
        su pepa -c "ssh jkpc 'df -h /dev/hda[231]'" >> $log
        [ "$info" == "true" ] && mail -s "[Info] Backup to $target" root < $log
) || (
        echo "" >> $log
        su pepa -c "ssh jkpc 'df -h /dev/hda[231]'" >> $log
        mail -s "[Error] Backup to $target" root < $log
)

rm $log

Na zálohovacím počítači je z inetd spouštěn rsync s touto konfigurací:

# /etc/rsyncd.conf
[daily-backup]
        comment = Denni backup notbooka
        path = /home/backup/jknb-daily
        use chroot = yes
        pid file = /var/run/rsync.dailybackup.pid
        read only = no
        list = yes
        uid = root
        gid = root
        hosts allow = 192.168.1.2 192.168.1.3
        dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.bz2 *.tbz
# /etc/inetd.conf
rsync   stream  tcp     nowait  root   /usr/bin/rsync rsyncd --daemon

Obnovení

Když se neco stane a je potřeba využít záložní kopii, tak stačí:

rsync -av rsync://jkpc/daily-backup /

Vřele doporučuji mít na zálohovacím počítači připravený staticky skompilovaný rsync a v šuplíku cd slaxe či jiné live distribuce.