Terminal pogryzł człowieka: duplicity
W mrokach niepewności jakie spowiły nasze obecne czasy, coraz bardziej na miejscu wydaje się być zapytanie „Obywatelu, czy zrobiłeś już kopię bezpieczeństwa swoich danych?”. I prawidłowo odpowiedzią jest „Tak jest!”. Szczególnie, że mamy co backupować. Rozliczenia PIT, dowody wpłat, elektroniczne faktury, pisma, adnotacje urzędowe i wszystko, co może być kiedyś opacznie zinterpretowane i wykorzystane przeciwko nam. Do tego dochodzą nasze np. zdjęcia, filmiki z komórki i inne pliki dokumentujących szlak naszego życia. Przy tak sporej kolekcji okazuje się, że często najlepszymi rozwiązaniami są te najbardziej niepozorne. Jak choćby tekstowe narzędzie duplicity.
Duplicity znajdziemy w repozytoriach niemal wszystkich dystrybucji, zatem nikt nie będzie miał trudności z jego zainstalowaniem. To co wyróżnia duplicity na tle innych narzędzi umożliwiających tworzenie kopii zapasowych, to jego bajeczny wachlarz obsługiwanych protokołów. Bo jeżeli zdecydujemy się odkładać nasze dane gdzieś w sieci, to dla tego programu niestraszne są ssh, scp, ftp, ftps, rsync, imap, webdav. Co więcej, dla duplicity przeszkody nie stanowią również różne niuanse zaszyte w komercyjnych rozwiązaniach chmurowych – bez większych ceregieli utworzymy swoje archiwum bezpieczeństwa zarówno na popularnym Dropboksie jak i Amazon S3, kontenerze w Azure, OneDrive, B2 oraz OwnCloud (webdav). Zasada wykorzystania tego rozwiązania jest prosta – stworzyć archiwum, skonfigurować połączenie, wrzucić skrypt wykonujący backupy do crontaba i zapomnieć o całości na najbliższe lata – o ile nie będziemy potrzebowali przywrócić jakiegoś pliku.
O czym warto wspomnieć, to dwie umiejętności duplicity – tworzenia kopii „zwykłych” oraz przyrostowych, a także szyfrowania naszego archiwum. Dzięki temu ten niewielki programik staje się bardzo ciekawą propozycją zarówno dla zwykłego użytkownika (pracującego na desktopie) a także i profesjonalistów zarządzających serwerami.
Zatem, czym można nakarmić duplicity… Na początek zestaw standardowych komend, z których nas będzie interesowało póki co full/incremental (czyli jaki rodzaj kopii bezpieczeństwa ma wykonać program), następnie verify, list-current-files oraz przede wszystkim restore. Jak można się domyślić, to wszystko pozwala na stworzenie kopii, zweryfikowanie poprawności, wylistowania zarchiwizowanych plików oraz przywrócenie wybranego.
Usage: duplicity [full|incremental] [opcje] katalog_źródłowy url_docelowy duplicity [restore] [opcje] url_źródłowy katalog_docelowy duplicity verify [opcje] url_źródłowy katalog_docelowy duplicity collection-status [opcje] url_docelowy duplicity list-current-files [opcje] url_docelowy duplicity cleanup [opcje] url_docelowy duplicity remove-older-than data [opcje] url_docelowy duplicity remove-all-but-n-full liczba [opcje] url_docelowy duplicity remove-all-inc-of-but-n-full liczba [opcje] url_docelowy
Można nad tym zapanować. Ale jak określać co chcemy backupować i gdzie? Nic prostszego. Wybieramy jeden z obsługiwanych protokołów:
Backendy oraz ich formaty URL: cf+http://nazwa_kontenera file:///katalog ftp://użytkownik[:hasło]@zdalny_adres[:port]/katalog ftps://użytkownik[:hasło]@zdalny_adres[:port]/katalog hsi://użytkownik[:hasło]@zdalny_adres[:port]/katalog imap://użytkownik[:hasło]@zdalny_adres[:port]/katalog rsync://użytkownik[:hasło]@zdalny_adres[:port]::/moduł/katalog rsync://użytkownik[:hasło]@zdalny_adres[:port]/ścieżka_względna rsync://użytkownik[:hasło]@zdalny_adres[:port]//ścieżka_absolutna s3://zdalny_adres/nazwa_bucketa[/prefiks] s3+http://nazwa_bucketa[/prefiks] scp://użytkownik[:hasło]@zdalny_adres[:port]/katalog ssh://użytkownik[:hasło]@zdalny_adres[:port]/katalog swift://nazwa_kontenera tahoe://alias/katalog webdav://użytkownik[:hasło]@zdalny_adres/katalog webdavs://użytkownik[:hasło]@zdalny_adres/katalog gdocs://użytkownik[:hasło]@zdalny_adres/katalog pydrive://użytkownik@zdalny_adres/katalog mega://użytkownik[:hasło]@zdalny_adres/katalog copy://użytkownik[:hasło]@zdalny_adres/katalog dpbx:///katalog onedrive://katalog azure://nazwa_kontenera b2://account_id[:application_key]@nazwa_bucketa/[katalog/]
… i dopisujemy co należy:
Dla pełnej kopii na innych dysk:
duplicity full /home/user/moje_wazne_pliki file:///home/backup
Uwaga na trzy ukośniki po nazwie protokołu (file://). Dwa ukośniki są przynależne do protokołu, trzeci jest dlatego, że podajemy ścieżkę bezwzględną (/home/backup). Jeżeli chcemy tworzyć kopie przyrostowe to zastępujemy full parametrem incremental.
Jeżeli będziemy chcieli coś przywrócić z takiej kopii, to:
duplicity -t plik_sprzed_ilu_dni --force --file-to-restore nazwa_pliku/lub_katalogu file:///home/backup gdzie_chcemy_zapisac_przywrocony_plik
Parametr -t jest opcjonalny.
Prawda, że banalne? Jak wykorzystać jednak nieco bardziej skomplikowane lokalizacje? Najpopularniejsze będzie SSH/SCP (wymaga zainstalowania paczki python-paramiko). Tworząc dwój klucz PGP i umieszczając go na zdalnym serwerze pominiemy kłopotliwe umieszczanie haseł w skryptach:
ssh-keygen -t rsa
ssh-copy-id user@zdalny_host
duplicity incremental /home/user/moje_wazne_pliki scp://user@zdalny_host/nasze_zdalne_archiwum
Nic nie stoi na przeszkodzie, by dane gromadzić w naszej chmurce OwnCloud:
duplicity incremental /home/user/moje_wazne_pliki webdavs://user:haslo_usera@zdalny_host/nasze_zdalne_archiwum
Ta cała metoda nabiera znamion łatwej, prostej i przyjemnej, gdy podane powyżej polecenia tworzące backup dodamy sobie np. do crontaba. Wtedy np. jeden raz dziennie kopia wykona się samoczynnie.
Gdyby dla kogoś wersja duplicity w repozytorium Ubuntu 16.04/Mint 18.xx była nieodpowiednia, możemy jeszcze skorzystać z autorskiego PPA:
sudo add-apt-repository ppa:duplicity-team/ppa
sudo apt-get update
sudo apt-get install duplicity