Rsync dla systemu Linux: synchronizacja, kopiowanie i tworzenie kopii zapasowych plików
9 min czytania - 24 maja 2025

Jak używać rsync w systemie Linux do przyrostowych transferów, zdalnej synchronizacji przez SSH, zaplanowanych kopii zapasowych za pomocą crona i unikania pułapki trailing-slash.
Rsync dla systemu Linux: jak synchronizować, kopiować i tworzyć kopie zapasowe plików jak profesjonalista
Rsync to standardowe narzędzie do kopiowania plików między systemami Linux. Działa szybciej niż cp lub scp w przypadku wszystkich zadań wykonywanych więcej niż raz, odzyskuje dane po przerwach w połączeniu sieciowym i przesyła tylko te elementy, które faktycznie uległy zmianie. W tym poście omówiono działanie rsync, flagi, o których warto wiedzieć, przykłady, z których będziesz korzystać najczęściej, oraz sposób planowania zadań za pomocą crona.
Czym jest rsync?
Rsync to narzędzie wiersza poleceń służące do kopiowania i synchronizacji plików między lokalizacjami. Działa lokalnie, przez SSH na zdalnym hoście lub w połączeniu z demonem rsync. Kluczowa różnica w stosunku do cp lub scp: rsync najpierw porównuje źródło i miejsce docelowe, a następnie przesyła tylko różnice. W przypadku katalogu o wielkości 100 GB, w którym zmieniło się 200 MB, rsync przenosi 200 MB. cp a scp przenoszą całość.
Jest dostarczane wraz z każdą nowoczesną dystrybucją Linuksa. Jeśli go brakuje: apt install rsync lub dnf install rsync.
Dlaczego warto używać rsync zamiast cp lub scp
Trzy powody, dla których rsync wygrywa w przypadku każdego nietrywialnego kopiowania:
- Jest przyrostowy. Kolejne uruchomienia przenoszą tylko zmienione bajty, a nie całe pliki. W przypadku kopii zapasowych i serwerów lustrzanych sprawia to, że zadanie trwające całą noc zajmuje tylko kilka minut.
- Wytrzymuje przerwy w działaniu. Dzięki
--partial, plik o rozmiarze 50 GB, który został przesłany w połowie, wznawia się od miejsca, w którym się zatrzymał, zamiast zaczynać od nowa. - Zachowuje metadane. Tryb archiwizacji (
-a) zachowuje uprawnienia, własność, dowiązania symboliczne i sygnatury czasowe. Ma to kluczowe znaczenie dla plików systemowych, drzew źródłowych i wszystkiego, gdzie atrybuty mają znaczenie.
W przypadku jednorazowego kopiowania małych plików scp wystarczy. W przypadku wszelkich powtarzających się operacji, zadań wymagających dużej przepustowości lub takich, które mogą wymagać wznowienia, należy używać rsync.
Typowe flagi rsync
Flagi, z których faktycznie będziesz korzystać:
| Flaga | Co robi |
|---|---|
-a | Tryb archiwizacji. Zachowuje uprawnienia, własność, dowiązania symboliczne i sygnatury czasowe. Odpowiada opcji -rlptgoD. |
-v | Verbose. Wyświetla listę przesyłanych plików. |
-z | Kompresja podczas przesyłania. Przydatne w przypadku wolnych lub kosztownych łączy, mniej przydatne w sieci LAN lub w przypadku treści już skompresowanych. |
-P | Łączy --partial i --progress. Wznów przerwane transfery, pokaż bieżący postęp. |
--delete | Usuwa pliki w miejscu docelowym, które nie istnieją w źródle. Wymagane do utworzenia prawdziwego kopii lustrzanej. |
--exclude | Pomiń pliki pasujące do wzorca. |
--exclude-from=FILE | Odczytuje wzorce wykluczeń z pliku. Bardziej przejrzyste niż łańcuchowanie wielu --exclude flag. |
--dry-run | Pokaż, co by się stało, gdyby nie przesyłano niczego. |
--bwlimit=KBPS | Ogranicz wykorzystanie przepustowości do kilobajtów na sekundę. Przydatne w przypadku kopii zapasowych uruchamianych w godzinach pracy. |
--checksum | Porównuj pliki na podstawie sum kontrolnych zamiast rozmiaru i czasu modyfikacji. Wolniejsze, ale wychwytuje skrajne przypadki. |
-e ssh | Użyj SSH do transferu. Domyślne w większości nowoczesnych instalacji. |
Domyślnie porównywany jest rozmiar pliku i czas modyfikacji, co jest szybkie i prawie zawsze poprawne. Należy to zmienić --checksum , jeśli proces wdrażania przepisuje znaczniki czasu bez zmiany treści lub jeśli podejrzewasz uszkodzenie na poziomie bitów.
Przykłady Rsync
Skopiuj katalog lokalnie:
rsync -av /source/path/ /destination/path/Synchronizacja z serwerem zdalnym przez SSH:
rsync -avz /local/dir/ user@remote:/remote/dir/Przeprowadź próbę przed wykonaniem jakichkolwiek destrukcyjnych działań:
rsync -avz --dry-run /local/dir/ user@remote:/dir/Zrównoważ dwa katalogi, uwzględniając usunięcia w miejscu docelowym:
rsync -av --delete /source/ /destination/Wykluczenie logów i katalogu tymczasowego:
rsync -av --exclude='*.log' --exclude='tmp/' /src/ /dest/Wznów duży transfer, który mógł zostać przerwany:
rsync -avP user@remote:/backups/big.img /local/Jeśli sesja SSH zostanie przerwana, uruchom to samo polecenie ponownie. Dzięki -P, rsync wznowi transfer od miejsca, w którym się zatrzymał, zamiast zaczynać od początku.
Ogranicz przepustowość do 50 MB/s dla kopii zapasowej poza godzinami szczytu, aby nie przeciążać łącza wychodzącego:
rsync -avz --bwlimit=50000 /local/dir/ user@remote:/dir/Pułapka w postaci końcowego ukośnika
Najczęstszy błąd przy użyciu rsync:
rsync -av /source /destination/ # copies the 'source' directory INTO /destination
rsync -av /source/ /destination/ # copies the CONTENTS of /source into /destinationKońcowy ukośnik w ścieżce źródłowej oznacza „wszystko w tym katalogu”. Brak końcowego ukośnika oznacza „sam ten katalog”. Jeśli nie masz pewności, uruchom najpierw z opcją --dry-run pierwszym, jeśli nie masz pewności, zwłaszcza w połączeniu z --delete.
Automatyzacja rsync za pomocą crona
Do zaplanowanych kopii zapasowych potrzebne są trzy rzeczy:
Dostęp SSH bez hasła do miejsca docelowego. Zadania cron nie mogą wpisywać haseł. Wygeneruj klucz i skopiuj go na host kopii zapasowej:
ssh-keygen -t ed25519 ssh-copy-id user@backup-hostSkrypt, a nie pojedynczy wiersz w crontab. Łatwiejszy do przetestowania, łatwiejszy do logowania:
#!/bin/bash LOG=/var/log/rsync-backup.log rsync -az --delete /etc/ user@backup:/backups/$(hostname)/etc/ >> "$LOG" 2>&1Ustaw go jako wykonywalny za pomocą
chmod +x.Wpis w cronie, aby go uruchomić. Edytuj za pomocą
crontab -e:0 2 * * * /usr/local/bin/rsync-backup.shTo uruchamia skrypt co noc o 02:00.
Dwa udoskonalenia, które warto wprowadzić w środowisku produkcyjnym: otocz skrypt w flock , aby długotrwałe zadanie nie nakładało się na uruchomienie następnej nocy, oraz przekieruj wyjście przez logger , aby błędy trafiały do dziennika systemowego, skąd mogą je wychwycić narzędzia monitorujące.
Końcowe przemyślenia
Rsync to jedno z niewielu narzędzi Linuksa, w przypadku którego czas poświęcony na naukę flag zwraca się niemal natychmiast. Główne punkty:
- Przesyłanie przyrostowe i obsługa wznawiania sprawiają, że rsync jest właściwym wyborem do wszystkiego, co uruchamiasz więcej niż raz
-aw trybie archiwizacji,-zdo kompresji,-Pdo wznowienia i śledzenia postępu,--deletedo tworzenia prawdziwych kopii lustrzanych- Zwróć uwagę na końcowy ukośnik w ścieżce źródłowej, zwłaszcza w przypadku
--delete - Połącz to z cronem i kluczami SSH, aby uzyskać automatyczne, zaplanowane kopie zapasowe
W przypadku dużych zadań tworzenia kopii zapasowych, które przenoszą dane między obiektami, uruchomienie rsync na serwerze VPS z nieograniczoną przepustowością oznacza, że okna tworzenia kopii zapasowych nie są ograniczone limitami transferu.

Zmęczenie oczu spowodowane korzystaniem z urządzeń cyfrowych: jak chronić wzrok w świecie, w którym spędzamy dużo czasu przed ekranem
Cały dzień wpatrujesz się w ekran? Dowiedz się, jak zmniejszyć zmęczenie oczu spowodowane pracą z ekranem, korzystając ze sprawdzonych technik i narzędzi. Ten przewodnik jest niezbędny dla osób pracujących zdalnie, programistów i wszystkich osób z branży technologicznej.
4 min czytania - 21 maja 2025
Dlaczego warto mieć wydajny serwer VPS z nieograniczonym transferem danych
8 min czytania - 9 maja 2025

Masz pytania lub potrzebujesz niestandardowego rozwiązania?
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie