Rsync dla systemu Linux: synchronizacja, kopiowanie i tworzenie kopii zapasowych plików

9 min czytania - 24 maja 2025

hero section cover
Spis treści
  • Rsync dla systemu Linux: jak synchronizować, kopiować i tworzyć kopie zapasowe plików jak profesjonalista
  • Czym jest rsync?
  • Dlaczego warto używać rsync zamiast cp lub scp
  • Typowe flagi rsync
  • Przykłady Rsync
  • Automatyzacja rsync za pomocą crona
  • Końcowe przemyślenia
Udostępnij

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ć:

FlagaCo robi
-aTryb archiwizacji. Zachowuje uprawnienia, własność, dowiązania symboliczne i sygnatury czasowe. Odpowiada opcji -rlptgoD.
-vVerbose. Wyświetla listę przesyłanych plików.
-zKompresja 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.
--deleteUsuwa pliki w miejscu docelowym, które nie istnieją w źródle. Wymagane do utworzenia prawdziwego kopii lustrzanej.
--excludePomiń pliki pasujące do wzorca.
--exclude-from=FILEOdczytuje wzorce wykluczeń z pliku. Bardziej przejrzyste niż łańcuchowanie wielu --exclude flag.
--dry-runPokaż, co by się stało, gdyby nie przesyłano niczego.
--bwlimit=KBPSOgranicz wykorzystanie przepustowości do kilobajtów na sekundę. Przydatne w przypadku kopii zapasowych uruchamianych w godzinach pracy.
--checksumPorównuj pliki na podstawie sum kontrolnych zamiast rozmiaru i czasu modyfikacji. Wolniejsze, ale wychwytuje skrajne przypadki.
-e sshUż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 /destination

Koń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:

  1. 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-host
  2. Skrypt, 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>&1

    Ustaw go jako wykonywalny za pomocą chmod +x.

  3. Wpis w cronie, aby go uruchomić. Edytuj za pomocą crontab -e:

    0 2 * * * /usr/local/bin/rsync-backup.sh

    To 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
  • -a w trybie archiwizacji, -z do kompresji, -P do wznowienia i śledzenia postępu, --delete do 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.

Blog

Polecane w tym tygodniu

Więcej artykułów
Zmęczenie oczu spowodowane korzystaniem z urządzeń cyfrowych: jak chronić wzrok w świecie, w którym spędzamy dużo czasu przed ekranem

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

Więcej artykułów
background image

Masz pytania lub potrzebujesz niestandardowego rozwiązania?

icon

Elastyczne opcje

icon

Globalny zasięg

icon

Natychmiastowe wdrożenie

icon

Elastyczne opcje

icon

Globalny zasięg

icon

Natychmiastowe wdrożenie