
Jeśli zarządzasz serwerami Linux lub po prostu posiadasz komputer z danymi, których utraty nie możesz sobie pozwolić, naucz się korzystać z nich rsync do automatyzacji tworzenia kopii zapasowych To praktycznie obowiązkowe. Nie ma potrzeby instalowania drogiego pakietu ani polegania na zastrzeżonych narzędziach: dzięki kilku przemyślanym poleceniom możesz mieć solidny, wydajny i łatwy w utrzymaniu system tworzenia kopii zapasowych.
W tym przewodniku zobaczysz: Od podstaw rsync do zaawansowanej edycjiLokalne kopie zapasowe, zdalne kopie zapasowe przez SSH, kopie zapasowe w stylu Time Machine z migawkami, skrypty gotowe do produkcji, cron, timery systemd, wykluczenia, rotacje i weryfikacja. Zobacz nasze Porównanie metod tworzenia kopii zapasowych Aby wybrać strategię. Chodzi o to, aby artykuł zakończył się jasnym planem i poleceniami, które można praktycznie skopiować i dostosować do swojego otoczenia.
Czym jest rsync i dlaczego jest tak często używany do tworzenia kopii zapasowych?
Rsync to narzędzie wiersza poleceń przeznaczone do synchronizuj pliki i katalogi między dwiema lokalizacjami, na tym samym komputerze lub między różnymi maszynami, zwykle poprzez SSH lub przy użyciu własnego demona rsyncd.
Zaletą rsync w porównaniu z prostym cp lub scp jest to, że implementuje inteligentny algorytm różnicowy transfer blokowyPorównuje źródło i miejsce docelowe i wysyła tylko zmiany, a nie cały plik za każdym razem. Jeśli masz dużo danych i modyfikujesz tylko niewielkie fragmenty, oszczędność czasu i przepustowości jest ogromna.
Ponadto rsync może zachowaj praktycznie wszystkie metadaneuprawnienia, właściciele, grupy, znaczniki czasu, łącza symboliczne, urządzenia… Dlatego jest to tak przydatne w przypadku „poważnych” kopii zapasowych, gdzie ważna jest nie tylko zawartość, ale także konfiguracja systemu plików.
Kolejną ważną zaletą jest to, że rsync działa zarówno lokalnie, jak i zdalnieMożna go używać do synchronizowania dwóch folderów na tym samym serwerze, do pobierania danych ze zdalnego serwera na maszynę zapasową lub do przesyłania danych do zdalnego serwera NAS lub VPS przy użyciu protokołu SSH.

Zainstaluj i przetestuj rsync na różnych dystrybucjach
Chociaż wiele dystrybucji ma już zainstalowany rsync, to dobry pomysł Sprawdź instalację i zaktualizuj do najnowszej wersji. zarówno na komputerze źródłowym, jak i docelowym przed zamontowaniem automatycznych kopii zapasowych.
W systemach opartych na Debianie lub Ubuntu możesz zrobić coś tak prostego, jak:
rsync --version
sudo apt update
sudo apt install rsync
W dystrybucjach takich jak RHEL, CentOS, Rocky Linux i innych pochodnych procedura byłaby bardzo podobna, zmieniając menedżera pakietów, ale z tą samą ideą upewnij się, że rsync jest dostępny i aktualny w obu skrajnościach.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Podstawowe opcje rsync, z których będziesz korzystać cały czas
Choć rsync dysponuje bogatym zestawem parametrów, w praktyce podczas tworzenia kopii zapasowych przez 90% czasu będziesz korzystać z... mały zestaw opcji to należy zapamiętać.
Ogólna struktura polecenia jest dość prosta, ale jest jeden szczegół, który daje wiele możliwości: ukośnik na końcu ścieżki zmienia zachowanie.
Składnia ogólna:
rsync ORIGEN DESTINO
Kluczowa różnica leży w sposobie traktowania katalogu źródłowego:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# Skopiuj TYLKO zawartość katalogu do miejsca docelowego
rsync -av /źródło/katalog/ /kopia zapasowa/
Niektóre z najczęściej używanych opcji tworzenia kopii zapasowych są szczególnie praktyczne, ponieważ Łączą wiele rzeczy w krótkim tekście.:
- -a: tryb pliku. Odpowiednik -rlptgoD (rekurencyjny, zachowuje dowiązania symboliczne, uprawnienia, znaczniki czasu, grupę, właściciela i pliki specjalne).
- -v: Tryb „szczegółowy”. Pokazuje, co robi i do jakich plików uzyskuje dostęp.
- -z:kompresuje dane podczas przesyłania, idealne do wykonywania zdalnych kopii przez Internet.
- -h:sprawia, że rozmiary wyglądają „ładnie” (MB, GB…), idealnie dla ludzi.
- -P:łączy postępy i częściowe pliki, aby zobaczyć, jak postępują prace i móc je wznowić.
- -Usunąć: usuwa w miejscu docelowym pliki, które nie istnieją już w źródle, pozostawiając dokładną replikę.
- -n / –dry-run:symuluje wykonanie bez dotykania czegokolwiek, fantastyczne, żeby niczego nie zepsuć.
- –wykluczyć / –wykluczyć-z: umożliwia wykluczenie wzorców lub całej listy tras, których nie chcesz kopiować.
- –link-dest:tworzy twarde łącza do poprzedniej kopii, będące podstawą przyrostowych kopii zapasowych typu Time Machine.
Lokalne kopie podręczników i pierwsze przykłady
Pierwszym krokiem przed zautomatyzowaniem czegokolwiek jest posiadanie jasne i sprawdzone polecenia kopiowania ręcznegoPrzyjrzyjmy się typowym przypadkom, które później wykorzystamy w skryptach.
Jeśli chcesz sklonować swój katalog domowy do lokalny dysk zapasowyMinimalne polecenie wyglądałoby tak:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
Ten rsync skanuje Twój strona główna kompletna z zachowaniem uprawnień, dat i strukturyi kopiuje tylko to, czego brakuje lub co uległo zmianie od ostatniego razu, co samo w sobie stanowi bardzo schludną kopię przyrostową, nie komplikującą sprawy.
Innym klasycznym przykładem jest synchronizacja dane projektu, zdjęcia lub dokumenty pomiędzy dwoma folderami na tym samym serwerze lub nawet na różnych dyskach, aby zawsze mieć nową lokalną grę.
rsync -av /media/fotos/ /backup/fotos/
Jeśli chodzi o wrażliwe dane systemowe, takie jak: /etc lub /var/wwwTo normalne, że chcemy mieć kopię lustrzaną, która usuwa z kopii zapasowej to, co zniknęło z oryginału. Właśnie tu pojawia się słynna opcja usuwania.
rsync -av --delete /var/www/ /backup/www/
Bezpieczne zdalne kopie zapasowe z użyciem protokołu SSH
Rsync naprawdę błyszczy, gdy połączysz go z SSH do wysyłania kopii z serweraW ten sposób możesz przechowywać swoje dane na innym węźle w sieci, serwerze NAS lub serwerze VPS w internecie. Dzięki temu nie jesteś zależny od jednego urządzenia i spełniasz część słynnej zasady 3-2-1 (co najmniej jedna kopia poza siedzibą firmy).
Najlepiej byłoby skonfigurować uwierzytelnianie kluczem publicznym zamiast ciągłego ręcznego wpisywania haseł. Po skopiowaniu klucza na serwer zapasowy, polecenia stają się bardzo intuicyjne.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Przenoszenie danych ze zdalnego serwera na maszynę zapasową
rsync -avz backup@remote-server:/var/www/ /backups/www/
W nieco bardziej wyrafinowanych scenariuszach możesz dostosować Szyfrowanie SSH, port lub kompresja z samego rsync za pomocą -e, na przykład jeśli twój serwer nasłuchuje na innym porcie lub chcesz zoptymalizować wolne łącze.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Przydatną sztuczką w przypadku słabych połączeń lub współdzielonych sieci jest użycie –bwlimit, aby uniknąć przeciążenia łącza i nie zostawiaj nikogo bez dostępu do Internetu, gdy będziesz wykonywać potężną kopię zapasową.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Pełne, różnicowe i przyrostowe kopie zapasowe z rsync
Chociaż rsync wykonuje już transfery różnicowe na poziomie bloków, z perspektywy strategii tworzenia kopii zapasowych warto to rozważyć trzy rodzaje kopii: pełna, różnicowa i przyrostowaktóre można zaimplementować bezpośrednio za pomocą opcji rsync.
Pełna kopia jest prosta: odtwarza całą zawartość źródła w miejscu docelowym, idealnie jak początkowa kopia zapasowa lub aby mieć czyste odniesienie.
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
Kopiowanie różnicowe opiera się na tym fundamencie i koncentruje się na zachowaniu zgodności miejsca docelowego ze źródłem, kopiowaniu zmian i usuwaniu tego, co już nie istnieje. To właśnie zazwyczaj masz na myśli, mówiąc o… mieć lustro systemu.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
Najbardziej soczystą częścią jest „prawdziwa” przyrostowa kopia zapasowa, w której oprócz synchronizacji, Zapisujesz historie według daty bez duplikowania danychW tym miejscu pojawia się opcja –link-dest, która tworzy twarde dowiązania do poprzedniej kopii plików, które nie zostały zmienione.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
Dzięki temu podejściu każdy folder kopii zapasowej wydaje się być kompletną kopią, ale wewnętrznie Identyczne pliki współdzielą bloki na dyskuDzięki temu znacznie zmniejszono ilość zajmowanego miejsca i można łatwo przeglądać historyczne migawki.
Kopie zapasowe w stylu Time Machine ze migawkami i twardymi linkami
Wiele osób chce odtworzyć w Linuksie wygodę macOS Time Machine ze swoimi migawkami według datyZ rsync jest to całkowicie możliwe poprzez połączenie --link-dest, odrobiny powłoki i odrobiny organizacji.
Chodzi o to, aby utrzymać bieżący katalog, który wskazuje na ostatnią dobrą kopię zapasową i jednocześnie utworzyć foldery ze znacznikiem czasu (data-godzina) reprezentujące każdą migawkę. Niezmienione pliki są łączone twardymi linkami z poprzednią migawką, a nowe bloki są zapisywane tylko wtedy, gdy występują rzeczywiste różnice.
Typowe polecenie w tym schemacie mogłoby wyglądać następująco:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Następnie skrypt zajmuje się aktualizacją łącza symbolicznego aktualny, aby zawsze wskazywał na najnowszą migawkęi zachować krótką historię uporządkowaną według daty. Dzięki temu możesz przeglądać starsze kopie, po prostu wchodząc do interesującego Cię folderu.
Automatyzacja przychodzi naturalnie: zapisujesz skrypt w czymś takim jak /usr/local/bin/rsync-time-machine i zaplanuj jego codzienne uruchamianie za pomocą cron w czasie, który najbardziej Ci odpowiada.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Zautomatyzuj codzienne tworzenie kopii zapasowych za pomocą cron
Nadchodzi moment, w którym robienie kopii ręcznie nie ma już sensu; normalną rzeczą jest Zaplanuj kopie zapasowe za pomocą cron dzięki czemu uruchamiają się automatycznie poza godzinami szczytu (np. wczesnym rankiem) i możesz o nich zapomnieć, poza okazjonalnym sprawdzaniem logów.
Proces jest zawsze taki sam: przygotowujesz skrypt, który tworzy kompletną kopię ze wszystkimi opcjami (wykluczeniami, dziennikami itp.), nadajesz mu uprawnienia do wykonywania i podłączasz go do pliku crontab odpowiedniego użytkownika lub użytkownika root, jeśli wiąże się to z modyfikacją całego systemu.
Przykład prostego skryptu do kopiowania lokalnego może wyglądać następująco:
#!/bin/bash
SOURCE_DIR="/home"
BACKUP_DIR="/backup/home"
LOG_FILE="/var/log/backup/rsync-local.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
mkdir -p «$BACKUP_DIR» «$(dirname «$LOG_FILE»)»
echo „Rozpoczęto tworzenie lokalnej kopii zapasowej” >> „$LOG_FILE”
rsync -av –delete
–exclude='*.tmp' \
–exclude='.cache' \
–exclude='Pobrania/*' \
«$SOURCE_DIR/» «$BACKUP_DIR/» >> «$LOG_FILE» 2>&1
jeśli ; wtedy
echo » Kopia zapasowa ukończona pomyślnie» >> «$LOG_FILE»
więcej
echo » Kopia zapasowa z błędami » >> «$LOG_FILE»
fi
Gdy już masz skrypt, na przykład, /usr/local/bin/rsync-local-backup.sh Następnie oznaczasz go jako wykonywalny i dodajesz do crona, aby uruchamiał się o określonej porze.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
Wewnątrz crontab możesz umieścić coś takiego:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
Timery systemd: nowoczesna alternatywa dla crona
W nowoczesnych systemach często warto Użyj timerów systemd zamiast cronszczególnie jeśli chcesz lepiej integrować usługi, zarządzać zależnościami sieciowymi lub mieć scentralizowane logi w journalctl.
Chodzi o zdefiniowanie usługi, która uruchamia skrypt kopii zapasowej, oraz timera wskazującego, kiedy ma on zostać uruchomiony. Usługa może wyglądać następująco:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Typ=jednorazowy
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Użytkownik=root
StandardOutput=dziennik
StandardError=dziennik
Limit czasu s=7200
WantedBy = multi-user.target
A powiązany timer będzie zdefiniowany następująco: codzienna kopia zapasowa o 2:00 w nocy z pewną dozą przypadkowości, aby nie przytłoczyć wszystkiego na raz:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
W kalendarzu=*-*-* 02:00:00
Trwały=prawda
RandomizedDelaySec=10min
WantedBy=timers.target
Teraz pozostaje już tylko ponowne załadowanie systemd, aktywacja timera i sprawdzenie, czy programuje się prawidłowo i czy Dziennik serwisowy pokazuje, że kopie są uruchamiane, gdy jest na to czas.
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Zorganizuj rotacyjne kopie zapasowe: dzienne, tygodniowe i miesięczne
Jeśli chcesz czegoś bardziej rozbudowanego niż pojedyncza statyczna kopia, możesz utworzyć strukturę rotacyjne kopie zapasowe: dzienne, tygodniowe i miesięcznekorzystając z twardych linków, aby zaoszczędzić miejsce i znaleźć możliwość czyszczenia starych plików.
Klasyczny wzorzec polega na posiadaniu bieżącego katalogu, który jest aktualizowany za każdym razem za pomocą rsync, a następnie klonowaniu tego drzewa za pomocą twardych łączy do folderów dziennych, tygodniowych i miesięcznych, w zależności od dnia.
#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_ROOT="/backup/www"
CURRENT="$BACKUP_ROOT/current"
DAILY="$BACKUP_ROOT/daily"
WEEKLY="$BACKUP_ROOT/weekly"
MONTHLY="$BACKUP_ROOT/monthly"
DATE=$(date +%Y%m%d)
DOW=$(date +%u)
DOM=$(date +%d)
mkdir -p «$BIEŻĄCY» «$DZIENNY» «$TYGODNIOWY» «$MIESIĘCZNY»
rsync -av –delete –link-dest=»$BIEŻĄCY» \
«$SOURCE_DIR/» «$CURRENT/»
&& cp -al «$CURRENT» «$DAILY/$DATE»
&& cp -al «$CURRENT» «$WEEKLY/$DATE»
&& cp -al «$CURRENT» «$MONTHLY/$DATE»
znajdź «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
znajdź «$WEEKLY» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
znajdź «$MONTHLY» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
Dzięki temu systemowi masz dość rozsądne okno historyczne bez zapełniania dysku pełnymi kopiami, a każda migawka pozostaje możliwa do przeglądania jak normalny folder.
Jeśli Twoje dane zmieniają się szybko lub są bardzo duże, możesz dostosować liczbę dni i częstotliwość retencji, a nawet połączyć to ze migawkami LVM lub ZFS, aby zapewnić spójność baz danych lub maszyn wirtualnych.
Monitoruj, weryfikuj i dowiedz się, czy Twoje kopie zapasowe są przydatne.
Codzienne wykonywanie zadań tworzenia kopii zapasowych jest świetne, ale jeśli nikt nie sprawdzi wyniku Niewiele to pomoże. Ważne jest, aby skonfigurować podstawowe monitorowanie, aby wiedzieć, czy i kiedy wykonano ostatnią kopię zapasową.
Prostą taktyką jest pozostawienie małego znacznika w folderze docelowym za każdym razem, gdy kopia zapasowa zakończy się pomyślnie, na przykład pliku .last-backup-success z datą. Następnie zewnętrzny skrypt, a nawet sprawdzenie w Nagios/Icinga, może ostrzec Cię, jeśli plik jest zbyt stary.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Innym zdrowym nawykiem jest sprawdzanie Sprawdź logi rsync pod kątem błędów lub nietypowych prędkości transferuSkrypt, który wyodrębnia statystyki, takie jak „Liczba plików”, „Całkowity rozmiar”, „Przyspieszenie” i tym podobne, pozwala szybko sprawdzić, jak wszystko działa.
I oczywiście, co naprawdę robi różnicę, to przyzwyczajenie się do tego od czasu do czasu. zrobić prawdziwą renowacjęWeź konkretny plik, przywróć jego wersję z wczoraj lub z zeszłego tygodnia i sprawdź, czy otwiera się poprawnie. To jedyny sposób, aby mieć pewność, że jeśli pewnego dnia coś pójdzie nie tak, kopie zapasowe będą działać.
Jeśli skonsolidujesz wszystkie te elementy — dobrze skonfigurowany rsync, automatyzację z cron lub systemd, rozsądną rotację, monitorowanie i testowanie przywracania — otrzymasz solidny, elastyczny i niedrogi system tworzenia kopii zapasowych dla systemu Linux, który w pełni wykorzystuje zalety wolnego oprogramowania, nie zmuszając Cię do rezygnacji z wygody i niezawodności.
