 Autor: [Tomasz Nowosielski](/autorzy/tomasz-nowosielski) Redaktor naczelny, analityk hostingu · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  rsync — synchronizacja i backup

# rsync — synchronizacja i backup plików na serwerze

Opublikowano: 9 kwietnia 2026 · Kategoria: Linux / Backup

rsync to podstawowe narzędzie każdego administratora serwera. Synchronizuje pliki wydajnie — przesyła tylko różnice między plikami (delta-transfer), obsługuje SSH, wyklucza katalogi i tworzy incremental backupy zajmujące ułamek miejsca dzięki hard linkom. Od prostego kopiowania plików po automatyczne backupy offsite z crona — wszystko w jednym narzędziu.

## Podstawy rsync — najważniejsze flagi

Flaga

Opis

`-a`

Archive mode: zachowuje uprawnienia, właściciela, daty, symlinki (= -rlptgoD)

`-v`

Verbose: wyświetla listę kopiowanych plików

`-z`

Kompresja w locie (przydatne przez sieć, zbędne lokalnie)

`--progress`

Pokazuje postęp transferu każdego pliku

`--delete`

Usuwa z destination pliki nieistniejące w source (lustro)

`--dry-run`

Symulacja — pokazuje co zostałoby zrobione, bez zmian

`--exclude`

Wyklucza pliki/katalogi pasujące do wzorca

`--link-dest`

Incremental backup z hard linkami do poprzedniego snapshotu

`--bwlimit`

Ogranicza prędkość transferu (KB/s)

## Synchronizacja lokalna i przez SSH

\# Kopiowanie lokalnego katalogu
rsync -avz /var/www/html/ /backup/html/

# UWAGA: ukośnik na końcu source ma znaczenie!
# /var/www/html/  → kopiuje ZAWARTOŚĆ katalogu (bez samego html/)
# /var/www/html   → kopiuje katalog html/ (z samą nazwą)

# Synchronizacja z pokazaniem postępu
rsync -avz --progress /duzy-katalog/ /backup/duzy-katalog/

# Lustro (usuwaj pliki nieistniejące w source)
rsync -avz --delete /var/www/html/ /mirror/html/

# Dry-run — sprawdź co zostanie zrobione
rsync -avz --delete --dry-run /var/www/html/ /mirror/html/

\# Synchronizacja przez SSH — lokalny backup zdalnego serwera
rsync -avz -e ssh user@zdalny-serwer:/var/www/html/ /lokalny/backup/

# Rsync przez SSH z niestandardowym portem
rsync -avz -e "ssh -p 2222" user@zdalny-serwer:/dane/ /backup/

# Upload lokalnych plików na zdalny serwer
rsync -avz /lokalny/projekt/ user@zdalny-serwer:/var/www/projekt/

## Wykluczanie plików i katalogów (--exclude)

\# Wyklucz jeden katalog
rsync -avz --exclude='.git' /projekt/ /backup/projekt/

# Wyklucz wiele wzorców
rsync -avz \\
  --exclude='.git' \\
  --exclude='node\_modules' \\
  --exclude='\*.log' \\
  --exclude='.env' \\
  --exclude='cache/' \\
  /var/www/aplikacja/ /backup/aplikacja/

# Wyklucz przez plik .rsync-filter (jak .gitignore)
rsync -avz --filter=':- .rsync-filter' /projekt/ /backup/projekt/

\# Zawartość .rsync-filter (w katalogu source)
# .git
# node\_modules/
# \*.tmp
# .env
# vendor/

## Incremental backup z --link-dest (hard linki)

Opcja `--link-dest` tworzy "snapshot" backupów: każdy nowy backup to osobny katalog z datą, ale niezmienione pliki są hard linkami do poprzedniego snapshotu — zajmują praktycznie zero dodatkowego miejsca.

\# Struktura katalogów po kilku dniach:
# /backup/
#   2026-04-07/  (pełny snapshot)
#   2026-04-08/  (hard linki do 07 + zmienione pliki)
#   2026-04-09/  (hard linki do 08 + zmienione pliki)

# Ręczne wywołanie incremental backup
PREV="/backup/2026-04-08"
CURR="/backup/2026-04-09"

rsync -avz \\
  --link-dest="$PREV" \\
  /var/www/html/ \\
  "$CURR/"

## Skrypt backup z datą i crona

Kompletny skrypt backupowy z automatycznym --link-dest, logowaniem i rotacją starych backupów:

#!/bin/bash
# /usr/local/bin/backup-rsync.sh

SOURCE="/var/www/html/"
BACKUP\_DIR="/backup/www"
DATE=$(date +%Y-%m-%d)
PREV\_DATE=$(date -d "yesterday" +%Y-%m-%d)
LOG="/var/log/backup-rsync.log"

echo "=== Backup $DATE start ===" >> "$LOG"

# Utwórz katalog docelowy
mkdir -p "$BACKUP\_DIR/$DATE"

# Incremental backup z hard linkami do poprzedniego dnia
rsync -avz \\
  --link-dest="$BACKUP\_DIR/$PREV\_DATE" \\
  --exclude='.git' \\
  --exclude='node\_modules' \\
  --exclude='\*.log' \\
  "$SOURCE" \\
  "$BACKUP\_DIR/$DATE/" \\
  >> "$LOG" 2>&1

echo "=== Backup $DATE end (exit: $?) ===" >> "$LOG"

# Usuń backupy starsze niż 30 dni
find "$BACKUP\_DIR" -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \\; >> "$LOG" 2>&1

\# Nadaj uprawnienia i dodaj do crona
chmod +x /usr/local/bin/backup-rsync.sh

# Uruchamiaj codziennie o 2:30 w nocy
crontab -e
# Dodaj linię:
# 30 2 \* \* \* /usr/local/bin/backup-rsync.sh

## Backup offsite — rsync na zdalny serwer

Strategia 3-2-1 wymaga kopii offsite (poza główną lokalizacją). rsync przez SSH to najprostsze rozwiązanie:

\# Konfiguracja kluczy SSH bez passphrase (dla automatyzacji)
ssh-keygen -t ed25519 -f ~/.ssh/backup\_key -N ""
ssh-copy-id -i ~/.ssh/backup\_key.pub user@backup-server.example.com

# Synchronizacja backupów na zdalny serwer
rsync -avz \\
  -e "ssh -i ~/.ssh/backup\_key -o StrictHostKeyChecking=no" \\
  /backup/www/ \\
  user@backup-server.example.com:/offsite-backup/www/

# Ograniczenie przepustowości (nie blokuj głównego łącza)
# --bwlimit=5000  = max 5 MB/s
rsync -avz \\
  --bwlimit=5000 \\
  -e "ssh -i ~/.ssh/backup\_key" \\
  /backup/www/ \\
  user@backup-server.example.com:/offsite-backup/www/

## Weryfikacja i przywracanie z backupu

\# Sprawdź rozmiar backupów (prawdziwy vs z hard linkami)
du -sh /backup/www/2026-04-\*/       # Rozmiar per snapshot
du -sh --total /backup/www/         # Łączny rozmiar katalogów

# Policz unikalne dane (prawdziwe zużycie dysku)
df -h /backup                       # Wolne miejsce na partycji

# Przywróć pliki z konkretnego dnia (--dry-run najpierw!)
rsync -avz --dry-run \\
  /backup/www/2026-04-07/ \\
  /var/www/html/

# Przywróć po weryfikacji
rsync -avz \\
  /backup/www/2026-04-07/ \\
  /var/www/html/

## Najczęstsze pytania

Jaka jest różnica między rsync --delete a rsync bez --delete? +

Bez --delete: rsync kopiuje nowe i zmienione pliki z source do destination, ale nie usuwa plików które istnieją tylko w destination. Wynik: destination może zawierać stare pliki usunięte z source. Z --delete: rsync usuwa z destination wszystkie pliki których nie ma w source — destination staje się dokładnym lustrem source. Dla backupów: NIE używaj --delete w kombinacji z --link-dest, bo usuniesz poprzednie snapshoty.

Czy rsync --link-dest rzeczywiście oszczędza miejsce na dysku? +

Tak, bardzo efektywnie. Hard linki nie kopiują danych — wiele nazw plików wskazuje na te same bloki danych na dysku. Jeśli plik 100 MB nie zmienił się przez 30 dni, 30 backupów zajmuje łącznie 100 MB (nie 3 GB). Zmienione pliki są kopiowane jako nowe. Sprawdź zużycie miejsca: du -sh backup/2026-04-09/ da rozmiar jednego snapshotu, ale rzeczywiste unikalne dane są znacznie mniejsze.

Jak rsync obsługuje przerwane transfery? +

rsync obsługuje wznawianie transferów dzięki algorytmowi delta-transfer. Jeśli transfer zostanie przerwany w połowie, następne uruchomienie rsync zsynchronizuje tylko brakujące/zmienione części. Dla dużych plików użyj --partial (zachowaj częściowo przetransferowane pliki) i --progress (pokaż postęp). Kombinacja --partial --inplace minimalizuje użycie dysku przy wznawianiu — rsync nadpisuje plik bezpośrednio zamiast tworzyć tymczasową kopię.

Jak backupować przez rsync bez podawania hasła SSH? +

Użyj kluczy SSH bez passphrase (lub z ssh-agent). Wygeneruj parę kluczy: ssh-keygen -t ed25519 -C "backup-key" -f ~/.ssh/backup\_key -N "" (bez passphrase). Dodaj klucz publiczny do ~/.ssh/authorized\_keys na zdalnym serwerze: ssh-copy-id -i ~/.ssh/backup\_key.pub user@backup-host. Użyj w rsync: rsync -avz -e "ssh -i ~/.ssh/backup\_key" ... W skryptach cron ta metoda działa bez interakcji użytkownika.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z dużym dyskiem — idealny jako serwer backupów rsync

Backup storage

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikrus

Tani VPS jako backup target dla rsync — offsite backup od kilku złotych miesięcznie

Offsite

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

LH.pl

Hosting z automatycznym backupem — bez potrzeby konfigurowania rsync

Auto backup

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

## Powiązane strony

-   [Strategia backup 3-2-1 dla hostingu](/baza-wiedzy/backup-strategia-hosting)
-   [rsync — kopia zapasowa VPS (zaawansowane)](/baza-wiedzy/rsync-kopia-zapasowa-vps)
-   [MySQL backup i optymalizacja](/baza-wiedzy/mysql-baza-danych-hosting)
-   [Wszystkie artykuły](/baza-wiedzy/)