Wielu administratorów serwerów, już podczas tworzenia swojej architektury, musi zmierzyć się z problemem robienia kopii zapasowych swoich plików. Jest to bardzo ważna czynność, ponieważ jeżeli coś pójdzie nie tak, to dzięki takim plikom można szybko przywrócić system do stanu sprzed awarii. Najprostszymi narzędziami do robienia podstawowych kopii bezpieczeństwa są tar, gzip i lftp. Pierwsza aplikacja tworzy nam paczkę z wymaganymi plikami, druga ją kompresuje, natomiast trzecia wysyła na zewnętrzny serwer, przeznaczony na takowe kopie. Oczywiście część osób może sobie dorzucić do tego jeszcze szyfrowanie danych w ramach maksymalnego bezpieczeństwa.

Jednakże po pewnym czasie okazuje się, że wspomniane kopie zapasowe stają się coraz większe, przez co zajmują sporo miejsca, trwają długi czas oraz przesyłają się na inne maszyny zbyt dużą ilość czasu. Co możemy w takiej sytuacji zaradzić? Poszukać jakiegoś narzędzia, która umożliwi nam tworzenie przyrostowych kopii bezpieczeństwa.

I tutaj pojawia się Duplicity. Jest to aplikacja do tworzenia kopii zapasowej wybranych katalogów w postaci zaszyfrowanych plików oraz następnie zapisanie ich w jakiejś lokalizacji (zarówno zdalnej jak i lokalnej). Do działania wykorzystywana jest biblioteka rsync, co pozwala w łatwy sposób tworzyć przyrostowe archiwa, które przechowują tylko zmienione dane części plików. Archiwa możemy szyfrować oraz przesyłać zdalnie na inny serwer, przy pomocy takich protokołów, jak: FTP, IMAP, RSYNC, S3, SSH/SCP, WEBDAV i wiele innych.

Polecenia w Duplicity

Instalacja Duplicity

Do pobrania i zainstalowania Duplicity będziemy potrzebowali repozytorium EPEL:
yum install epel-release

Następnie należy wydać następującą komendę:
yum install duplicity

Po chwili aplikacja będzie gotowa do użycia w systemie.

Pełna kopia zapasowa

Przykładowy zestaw poleceń do wykonywania lokalnie wszystkich czynności.

duplicity full --no-encryption [ścieżka do katalogu do zrobienia kopii] file://[ścieżka do miejsca wrzucenia pliku z kopią zapasową]
Wykonuje pełną kopię zapasową, bez szyfrowania archiwum.

Pełna kopia zapasowa z warunkami

duplicity --full-if-older-than [ilość dni]D --no-encryption [ścieżka do katalogu lub pliku do zrobienia kopii] file://[ścieżka do miejsca wrzucenia pliku z kopią zapasową]
Wykonuje pełną kopię zapasową, bez szyfrowania, jeżeli ostatnia jest starsza niż podana ilość dni.

Kopia przyrostowa

duplicity --no-encryption [ścieżka do katalogu lub pliku do zrobienia kopii] file://[ścieżka do miejsca wrzucenia pliku z kopią zapasową]
Wykonuje nam poszczególne kopie zapasowe, bez szyfrowania.

Usuwanie pełnych kopii zapasowych

duplicity remove-all-but-n-full [liczba] --no-encryption --force file://[ścieżka do backupów]
Kasuje wszystkie pełne kopie zapasowe, poza tymi ostatnimi, wpisanymi jako liczba. Wpisanie wartości 1, spowoduje skasowanie wszystkich pełnych backupów, oprócz tego najnowszego.

Usuwanie kopii przyrostowych

duplicity remove-all-inc-of-but-n-full [liczba] --no-encryption --force file://[ścieżka do backupów]
Usuwa wszystkie kopie przyrostowe, przypisane do pełnych kopii zapasowych. Parametr [liczba] oznacza ilość pełnych kopii zapasowych. Opcja --force jest wymagana do skasowania plików, zamiast ich wypisywania na ekran.

Przywrócenie całej kopii zapasowej

duplicity -t [ilość dni, np. 5D] --force --no-encryption file://[ścieżka do backupów] [ścieżka do miejsca wypakowania kopii zapasowej]

Wypakowanie konkretnego pliku z kopii zapasowej

duplicity -t [ilość dni, np. 1D] --force --no-encryption --file-to-restore [nazwa pliku lub katalogu] file://[ścieżka do backupów] [ścieżka do miejsca wypakowania kopii zapasowej]
Przywraca nam konkretny plik z archiwum, zamiast całej kopii zapasowej. Przy archiwach, przekraczających kilka gigabajtów, zaoszczędza nam to sporo czasu.

Usuwanie plików z okresem większym, niż dni lub miesiące

duplicity remove-older-than [wpisać dni lub miesiące, np. 15D, 1M] file://[ścieżka do backupów]

Wylistowanie plików z archiwum gdzie znajduje się backup

duplicity list-current-files [opcje] file:///[ścieżka do folderu z backupami]
Jest to bardzo przydatna opcja, jeżeli chcemy wypakować tylko konkretne pliki lub katalogi. Możemy także zastosować przełącznik grep i wyszukać konkretną frazę lub wrzucić wynik polecenia do pliku.

Wypisanie informacji o kopii zapasowej i powiązaniach

duplicity list-current-files [opcje] file:///[ścieżka do katalogu z backupami]

Inne opcje, czasami przydatne

--exclude-filelist list.txt
Jest lista plików lub katalogów, które zostaną wyłączone z kopii zapasowej.

--include-filelist list.txt
Jest lista plików lub katalogów, które zostaną włączone do kopii zapasowej.

--volsize [liczba]
Wpisujemy rozmiar woluminu w Mb. Domyślnie jest to wartość 25 Mb

--dry-run
Uruchamia nam proces obliczania, co będzie robione przy kopii zapasowej.

Generowane logi

Pełna kopia

--------------[ Backup Statistics ]--------------
StartTime 1454920750.31 (Mon Feb  8 09:39:10 2016)
EndTime 1454925064.82 (Mon Feb  8 10:51:04 2016)
ElapsedTime 4314.51 (1 hour 11 minutes 54.51 seconds)
SourceFiles 194
SourceFileSize 52990887865 (49.4 GB)
NewFiles 194
NewFileSize 52990887865 (49.4 GB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 194
RawDeltaSize 52990867385 (49.4 GB)
TotalDestinationSizeChange 53129872907 (49.5 GB)
Errors 0
-------------------------------------------------

Kopia przyrostowa

--------------[ Backup Statistics ]--------------
StartTime 1454926177.26 (Mon Feb  8 11:09:37 2016)
EndTime 1454926389.18 (Mon Feb  8 11:13:09 2016)
ElapsedTime 211.92 (3 minutes 31.92 seconds)
SourceFiles 205
SourceFileSize 55608643666 (51.8 GB)
NewFiles 12
NewFileSize 2617776281 (2.44 GB)
DeletedFiles 0
ChangedFiles 1
ChangedFileSize 518 (518 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 13
RawDeltaSize 2617756325 (2.44 GB)
TotalDestinationSizeChange 2624615624 (2.44 GB)
Errors 0
-------------------------------------------------

Listowanie plików z ostatniej kopii zapasowej

Synchronizing remote metadata to local cache...
Copying duplicity-full-signatures.20160208T083910Z.sigtar.gz to local cache.
Copying duplicity-full.20160208T083910Z.manifest to local cache.
Copying duplicity-inc.20160208T083910Z.to.20160208T100936Z.manifest to local cache.
Copying duplicity-new-signatures.20160208T083910Z.to.20160208T100936Z.sigtar.gz to local cache.
Last full backup date: Mon Feb  8 09:39:10 2016
Mon Feb  8 11:06:46 2016 .
Fri Feb  5 15:00:22 2016 random-file.1
Fri Feb  5 15:04:22 2016 random-file.10
Fri Feb  5 15:59:04 2016 random-file.100
Fri Feb  5 15:59:26 2016 random-file.101
Fri Feb  5 15:59:35 2016 random-file.102
Fri Feb  5 15:59:45 2016 random-file.103
Fri Feb  5 16:00:07 2016 random-file.104
Fri Feb  5 16:00:13 2016 random-file.105
Fri Feb  5 16:00:16 2016 random-file.106
Fri Feb  5 16:01:08 2016 random-file.107
Fri Feb  5 16:01:32 2016 random-file.108
Fri Feb  5 16:01:38 2016 random-file.109
......

Wypisanie informacji o kopii zapasowej i powiązaniach

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Mon Feb  8 09:39:10 2016
Collection Status
-----------------
Connecting with backend: LocalBackend
Archive dir: /root/.cache/duplicity/db7c0f583d45b95c45d4d76e12d54364

Found 0 secondary backup chains.

Found primary backup chain with matching signature chain:
-------------------------
Chain start time: Mon Feb  8 09:39:10 2016
Chain end time: Mon Feb  8 11:09:36 2016
Number of contained backup sets: 2
Total number of contained volumes: 2030
 Type of backup set:                            Time:      Num volumes:
                Full         Mon Feb  8 09:39:10 2016              2027
         Incremental         Mon Feb  8 11:09:36 2016                 3
-------------------------
No orphaned or incomplete backup sets found.

Testy wydajnościowe

Dla zobrazowania różnic, pomiędzy kopią zapasową przy użyciu duplicity, a Tarem zrobiliśmy kilka testów. Stworzyliśmy katalog z 50 GB losowo wygenerowanymi plikami. Następnie przeprowadziliśmy pełny backup przy pomocy duplicity oraz tarem. Potem stworzyliśmy dodatkowe 3 GB plików. Duplicity zrobiliśmy kopię przyrostową, a Tarem standardową kopię.

Duplicity

Jak możemy zauważyć na wykresie, Duplicity potrzebowało jedynie 3 minut do sprawdzenia, co się zmieniło i zrobienia kopii zapasowej różnic. Tar natomiast musiał zrobić wszystko.

Duplicity

Podsumowanie

Poniżej krótkie plusy i minusy korzystania z Duplicity.

Zalety:

  • Dobra dokumentacja projektu
  • Prosta składnia
  • Szybkość robienia przyrostowych kopii zapasowych
  • Oszczędność łącza internetowego
  • Łatwe zarządzanie kopiami zapasowymi

Wady:

  • Długi czas robienia pełnej kopii zapasowej
  • ravenpl

    Szkoda że nie porównaliście jeszcze z rsynciem…

    • Paweł

      +1 w miarę możliwości prośba o porównanie lub osobny artykuł, również o rsync.