We wpisie Tworzenie kopii zapasowej plików przy użyciu aplikacji duplicity oraz duply opisałem, w jaki sposób skonfigurować aplikację duplicity wraz ze skryptem duply w celu wykonywania kopii zapasowych. Chciałbym teraz to trochę uszczegółowić, pod kątem automatycznego wykonywania kopii zapasowej.

Zakładam, że posiadasz już skonfigurowaną aplikację duply i możesz spokojnie za jej pomocą zrobić kopię wybranych plików. Teraz czas aby to zautomatyzować przy zachowaniu takich warunków:

  • kopia zapasowa ma być wykonywana raz dziennie (przyrostowa)
  • raz w tygodniu ma zostać uruchomione robienie pełnej kopii bezpieczeństwa
  • informacje z polecenia duply i duplicty powinny być zapisane w jakimś logu
  • chcemy zostawić sobie tylko dwa najnowsze pełne backupy

Więc do dzieła :).

Na początek zacznijmy od ostatniego punktu: zostawiamy tylko dwie ostatnie kopie bezpieczeństwa. Za takie zachowanie odpowiada definicja zmiennej MAX_FULL_BACKUPS w pliku conf definiującym dany profil duply:

52
53
54
55
# Number of full backups to keep. Used for the "purge-full" command.
# See duplicity man page, action "remove-all-but-n-full".
# defaults to 1, if not set
MAX_FULL_BACKUPS=2

Ustawienie tej wartości na 2 powoduje zostawienie tylko dwóch ostatnich pełnych kopii bezpieczeństwa (oczywiście, wraz z przyrostowymi backupami).

Co warto zauważyć, stare kopie bezpieczeństwa nie zostaną automatycznie usunięte podczas robienia kopii. Należy powołać polecenie duply odpowiednim parametrem, aby zostały one usunięte:

# duply PROFIL purge-full --force

Wywołanie samego polecenia purge-full spowoduje wyświetlenie informacji o tym co ma zostać usunięte, a dodanie do tego jeszcze przełącznika --force spowoduje usunięcie starych plików.

Teraz czas na zdefiniowanie lokalizacji, gdzie będą zapisywane logi z tworzenia kopii bezpieczeństwa. Załóżmy, że mają one znaleźć się w katalogu /var/log/duply, więc:

# mkdir -p /var/log/duply

Ostatnim krokiem będzie poinformowanie aplikacji cron kiedy ma uruchomić odpowiednie skrypty. Można to zrobić poprzez odpowiednią modyfikację pliku /etc/crontab lub też dodając nowy plik z definicją do katalogu /etc/cron.d.

Wybierzmy drugą opcję, czyli należy utworzyć plik /etc/cron.d/duply o takiej zawartości:

1
2
3
4
5
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

10 2 * * 0      root    (duply PROFIL full && duply system_backup purge-full --force; duply system_backup status) 2>&1 | tee /var/log/duply/duply-$(date +\%Y\%m\%d-\%H\%M\%S).log
10 2 * * 1-6    root    (duply PROFIL backup; duply system_backup status) 2>&1 | tee /var/log/duply/duply-$(date +\%Y\%m\%d-\%H\%M\%S).log

Oto co jest zdefiniowane:

  • definicja zmiennych środowiskowych używanych podczas wywoływania skryptów, ważne jest poprawne zdefiniowanie zmiennej PATH
  • linia 4 – definicja wywołania robienia pełnej kopii bezpieczeństwa, będzie ona wykonywana w każdą niedziele o godzinie 2:10, najpierw zostanie wykonana pełna kopia, następnie zostaną usunięte stare kopie bezpieczeństwa, zostanie wypisany status archiwum i to wszystko zostanie zapisane do pliku /var/log/duply/duply-DATA-GODZINA.log, gdzie DATA i GODZINA to odpowiednio data i godzina rozpoczęcia kopii bezpieczeństwa
  • linia 5 – wykonanie przyrostowej kopii bezpieczeństwa w każdy dzień tygodnia (poza niedzielą) o godzinie 2:10, następnie statusu archiwum, i podobnie zapisanie tych informacji w logu.

Od tej pory kopie bezpieczeństwa powinny wykonywać się automatycznie o zadanych porach.

Źródła