Do backupu danych z domowego serwerka na VPS’a używam programu rdiff-backup. W zasadzie jest to opensource’owy skrypt napisany w python’ie. Jego dużą zaletą jest to, że potrafi wykonywać backup inkrementacyjny, dzięki czemu można odzyskać nie tylko ostatnią wersję pliku, ale także wersję sprzed kilku dni. Dodatkowo umożliwia on wykonywanie backupu przez bezpieczny szyfrowany kanał ssh.

Skrypcik, jest w zasadzie połączeniem tego co można znaleźć  na stronie rdiff’a w sekcji examples o tu.

Co on robi? Backup inkrementacyjny na zdalną maszynę poprzez szyfrowane połączenie SSH i zapisuje podsumowanie w logu. Dodatkowo usuwa kopie starsze niż 2 tygodnie.

Aby skrypt nie pytał o hasło, trzeba sobie wygenerować klucz SSH i skopiować go na zdalną maszynę. Na google można znaleźć HOWTO.

A to sam skrypcik:

#!/bin/bash
if [ -x /usr/bin/rdiff-backup ]
then
 COMMAND=/usr/bin/rdiff-backup
 $COMMAND -v3 --print-statistics  /home/uzytkownik/Dokumenty/ uzytkownik@backup_host.net::backup >> ./backup.log
 $COMMAND --force --remove-older-than 2W  uzytkownik@backup_host.net::backup >> ./backup.log
fi

Działanie w zasadzie jest proste:

  • Sprawdza czy plik jest plikiem wykonywalnym (-x)
  • Jeśli jest, to przypisuje do zmiennej COMMAND ścieżkę bezwzględną do polecenia rdiff-backup (w zasadzie kosmetyka, ale po co powtarzać ileś razy tą samą ścieżkę skoro można to zrobić krócej)
  • Kolejna linijka zajmuje się backupem:
    • v3 – określa jak bardzo „gadatliwy” ma być program rdiff-backup
    • print-statistics – dzięki temu w logu będziemy mieli ładne podsumowanie tego co zostało zrobione przez program.
    • potem mamy katalog źródłowy
    • następnie host i katalog docelowy w formacie użytkownik_zdalnej_maszyny@adres_hosta::katalog_z_backup’em
    • >> ./backup.log – przekierowuje wyjście rdiff’a do logu w katalogu z którego wykonywaliśmy skrypt
  • Druga linijka odpowiada za usunięcie ze zdalnego hosta plików starszych niż: remove-older-than i zapisanie tego do logu. W moim przypadku są to dwa tygodnie. Opcja force powoduje usunięcie wszystkich plików starszych niż np. 2 tygodnie (domyślnie rdiff usuwa tylko jedną sesję podczas połączenia, czyli np. jeden dzień)

Na koniec trzeba dodać jeszcze nasz skrypt do cron’a:

0 3 * * * /usr/local/bin/backup.sh &>/dev/null
Jak widać u mnie backup wykonuje się o 3:00