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.

Jak hostować modele Ollama AI na serwerach dedykowanych
Dowiedz się, jak hostować modele Ollama AI na serwerach dedykowanych, aby zapewnić bezpieczeństwo danych, skalowalność i zwiększyć wydajność.
5 min czytania - 8 września 2025
Jak zainstalować i korzystać z Redis na serwerze VPS
9 min czytania - 7 stycznia 2026

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