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

⚡ W skrócie · 8 min czytania

-   rsync zaawansowany: podstawy -avz, synchronizacja przez SSH, --exclude patterns, incremental backup z --link-dest, skrypt backup z datą, cron, rsync offsite, --bwlimit, --dry-run.
-   Podstawy rsync - najważniejsze flagi.
-   Synchronizacja lokalna i przez SSH.
-   Wykluczanie plików i katalogów (--exclude).
-   Incremental backup z --link-dest (hard linki).

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 "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 "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 "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/)
-   [BorgBackup - deduplikacja, szyfrowanie i remote backup przez SSH
    
    Kompletny przewodnik po BorgBackup: inicjalizacja repo, tworzenie archiwów, prune policy…
    
    ](/baza-wiedzy/borgbackup-deduplikacja-backup/)
-   [SaltStack - zarządzanie konfiguracją serwerów z master/minion
    
    SaltStack: architektura Salt master/minion z ZeroMQ, instalacja, targeting minionów (glob/grain/compound), States SLS…
    
    ](/baza-wiedzy/saltstack-konfiguracja/)
-   [Kubernetes PersistentVolume - zarządzanie storage w klastrze
    
    Kubernetes PV, PVC i StorageClass: access modes RWO/ROX/RWX, dynamiczne provisioning, reclaim policies Retain/Delete,…
    
    ](/baza-wiedzy/kubernetes-persistent-volumes/)
-   [Jaki VPS wybrać?](/jaki-vps-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 9 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)