Rsnapshot to “weteran” w świecie IT. Istnieje od lat, nie ma panelu, nie ma chmury, nie ma fajerwerków. Ma za to jedną sztuczkę, dzięki której wciąż świetnie się sprawdza.

Robi kopie przyrostowe. Pierwszy backup waży tyle, co Twoje dane, a każdy kolejny tylko tyle, ile się od tamtej pory zmieniło. Pliki, które się nie zmieniły, są twardo dowiązane (tzw. “hardlink”) do poprzedniej kopii. Wyglądają jak pełne kopie, a drugi raz miejsca nie zajmują. Sprytne i optymalne przede wszystkim.

Na Mikrusie#

Samego pakietu rsnapshot tu nie stawiamy. Mamy za to własny odpowiednik działający na identycznej zasadzie (rsync plus twarde dowiązania). Nazywa się rsnappush i wypycha dane na darmową przestrzeń backupową Strych (200 MB) albo na dokupiony dysk Storage.

Włączasz w panelu usługę “Backup” (Strych), a potem odpalasz gotowy skrypt z NOOBS-a:

curl -s https://noobs.mikr.us | bash
sudo /opt/noobs/scripts/chce_backup.sh

Skrypt sam sprawdza, czy masz Storage. Jeśli tak, backupuje na /storage/backup. Jeśli nie, wysyła dane przez SSH na Strych. Na koniec ustawia codzienny cron, który zabezpiecza /etc/, /home/ i /var/log/.

Wolisz mieć pełną kontrolę nad tym, co i jak często leci do backupu? Czytaj dalej. Reszta wpisu dotyczy prawdziwego rsnapshot, który możesz zainstalować również na Mikrusie. Działa tam dokładnie tak samo, jak na każdym innym VPS-ie z Ubuntu czy Debianem.

Na dowolnym serwerze (Ubuntu/Debian)#

sudo apt update
sudo apt install rsnapshot

Konfiguracja#

Konfiguracja siedzi w /etc/rsnapshot.conf. I od razu najważniejsza pułapka tego narzędzia: wcięcia muszą być tabulatorami, nie spacjami. Wkleisz config z edytora, który po cichu zamienia taby na spacje, i dostaniesz błąd składni. Wszyscy przez to przechodzą. Naprawdę wszyscy.

sudo nano /etc/rsnapshot.conf

Minimalna konfiguracja: backup katalogu /etc/, 7 kopii dziennych i 4 tygodniowe:

config_version	1.2
snapshot_root	/root/snapshoty/
cmd_cp	/bin/cp
cmd_rm	/bin/rm
cmd_rsync	/usr/bin/rsync
cmd_ssh	/usr/bin/ssh
cmd_logger	/usr/bin/logger
cmd_du	/usr/bin/du
retain	daily	7
retain	weekly	4
backup	/etc/	dane/

Trzy linijki zasługują na komentarz.

snapshot_root to miejsce, dokąd trafiają kopie. Jeśli masz Storage, możesz tu wpisać katalog na nim, np. /storage/snapshoty/.

retain daily 7 i retain weekly 4 mówią, ile ostatnich kopii dziennych i tygodniowych trzymać, zanim najstarsze zaczną być nadpisywane.

backup /etc/ dane/ to co backupować i pod jaką “etykietą” w katalogu docelowym. Pod etykietą rsnapshot odtwarza pełną ścieżkę źródła, więc /etc/ wyląduje jako dane/etc/.

Zanim cokolwiek odpalisz, sprawdź, czy config jest poprawny:

sudo rsnapshot configtest

Chcesz zobaczyć Syntax OK. Wszystko inne oznacza, że gdzieś zamiast taba wkradła się spacja.

Pierwszy backup#

sudo rsnapshot daily

Wynik znajdziesz w /root/snapshoty/daily.0/dane/etc/.

Teraz ciekawostka. Odpal to samo polecenie jeszcze raz. Pojawi się katalog daily.1/, czyli poprzednia kopia przesunięta o jedno oczko. A niezmienione pliki w obu katalogach to fizycznie ten sam plik na dysku. Drugi backup nie zajmuje więc prawie nic poza tym, co faktycznie się zmieniło.

Automatyzacja przez cron#

sudo crontab -e

Linijka, która robi backup codziennie o 3:00 w nocy:

0 3 * * * /usr/bin/rsnapshot daily

Masz w configu retain weekly? To jeszcze druga linijka, na przykład w niedzielę o 3:30:

30 3 * * 0 /usr/bin/rsnapshot weekly

Backup ze zdalnego serwera#

Rsnapshot potrafi też ściągać dane z innej maszyny przez SSH. Przydaje się, gdy kopia jednego serwera ma leżeć na drugim, a to, szczerze mówiąc, jest dużo zdrowszy układ niż backup obok oryginału.

W linijce backup podajesz adres zdalny zamiast lokalnej ścieżki:

backup	[email protected]:/etc/	zdalny-serwer/

111.111.111.111 zamień na adres zdalnego serwera. Potrzebne jest logowanie kluczem SSH bez hasła (ssh-copy-id [email protected]). Inaczej rsnapshot daily odpalony z crona nie będzie miał jak podać hasła i backup po cichu się nie zrobi.

Przywracanie danych#

Tu najlepsza wiadomość. Żadnych specjalnych komend. Kopie to zwykłe pliki, więc po prostu kopiujesz je z powrotem:

cp -a /root/snapshoty/daily.0/dane/etc/hostname /etc/hostname

Najczęstsze błędy#

Błąd składni, bo spacje zamiast tabulatorów. Absolutny numer jeden przy pierwszej konfiguracji. Patrz sekcja Konfiguracja.

Z crona backup się nie robi, a ręcznie działa. Najczęściej brakuje klucza SSH bez hasła przy backupie zdalnym. Albo w cronie jest samo rsnapshot zamiast pełnej ścieżki /usr/bin/rsnapshot.

Backup puchnie z dnia na dzień, choć dane stoją w miejscu. Sprawdź, czy snapshot_root leży na systemie plików, który obsługuje twarde dowiązania. Lokalny dysk i Storage - tak. Montowania sieciowe typu FUSE - bywa różnie.