Skip to main content
  1. Comandi/

rsync - remote file synchronization

·4 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Sincronizza file e directory tra sorgente e destinazione, trasferendo solo le parti modificate. Funziona localmente (come cp intelligente) o via rete SSH (come scp incrementale). La sua efficienza lo rende lo standard per backup, mirror e deploy.

Sintassi
#

rsync [opzioni] sorgente/ destinazione/

Warning

Lo slash finale su sorgente/ e' critico. rsync sorgente/ copia il CONTENUTO. rsync sorgente copia la DIRECTORY stessa. Comportamento diverso.

Comandi essenziali
#

ComandoFlagSignificato flagCosa fa
rsync -av sorgente/ dest/-a -varchive + verboseCopia ricorsiva preservando tutto, output verboso
rsync -av --delete sorgente/ dest/--deleteMirror esatto — cancella dalla dest i file non in sorgente
rsync -av --dry-run sorgente/ dest/--dry-runSimula senza toccare niente — sempre fare prima
rsync -av -e ssh utente@host:percorso/ dest/-ersh/executeUsa SSH come trasporto
rsync -av --progress sorgente/ dest/--progressMostra progresso per ogni file
rsync -av --exclude="*.log" src/ dst/--excludeEsclude file .log dalla sincronizzazione
rsync -avz sorgente/ dest/-zcompressComprime durante il trasferimento (utile su rete lenta)

Il flag -a — archive mode
#

-a e' una shorthand per -rlptgoD:

r = ricorsivo
l = mantieni i link simbolici
p = mantieni i permessi
t = mantieni i timestamp
g = mantieni il gruppo
o = mantieni il proprietario (richiede root)
D = mantieni device files e special files

Quasi sempre userai -a — preserva tutto quello che conta per un backup.

Uso locale — backup e sincronizzazione
#

# Backup di /etc con data nel nome
sudo rsync -av /etc/ /backup/etc-$(date +%Y%m%d)/

# Mirror esatto — la destinazione diventa identica alla sorgente
# ATTENZIONE: --delete rimuove dalla dest i file non in src
rsync -av --delete /home/barno/ /backup/home/

# Simula sempre prima con --dry-run
rsync -av --delete --dry-run /etc/ /backup/etc/
# Mostra cosa farebbe senza fare niente

# Escludi file temporanei e cache
rsync -av --exclude="*.tmp" --exclude=".cache/" /home/ /backup/home/

Uso remoto — sincronizzazione via SSH
#

# Da locale a remoto
rsync -av /home/barno/ utente@server:/backup/barno/

# Da remoto a locale
rsync -av utente@server:/var/log/ /backup/logs/

# Con SSH su porta non standard
rsync -av -e "ssh -p 2222" /dati/ utente@server:/backup/

# Con chiave SSH specifica
rsync -av -e "ssh -i ~/.ssh/id_ed25519" /dati/ utente@server:/backup/

# Compressione attiva — utile su connessioni lente
rsync -avz /dati/ utente@server:/backup/

rsync vs scp vs cp
#

cp                    scp                    rsync
──────────────────    ────────────────────   ──────────────────────────
locale only           locale → remoto        locale e remoto
copia tutto           copia tutto            copia solo le differenze
nessun resume         nessun resume          riprende da dove si e' fermato
no --delete           no --delete            --delete per mirror esatto
veloce per pochi      ok per file singoli    efficiente per grandi dataset
file piccoli

Backup incrementale — pattern pratico
#

# Pattern backup professionale
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d-%H%M)

# Backup con link hard — ogni backup sembra completo ma occupa solo lo spazio del delta
rsync -av --delete \
      --link-dest="$BACKUP_DIR/latest" \
      /etc/ \
      "$BACKUP_DIR/$DATE/"

# Aggiorna il puntatore "latest"
ln -sfn "$BACKUP_DIR/$DATE" "$BACKUP_DIR/latest"

--link-dest crea hard link ai file non modificati — ogni backup sembra un backup completo ma occupa solo lo spazio delle modifiche.

Scenario Reale — Blue Team
#

# Backup pre-modifica di configurazione critica
sudo rsync -av /etc/ssh/ /backup/etc-ssh-$(date +%Y%m%d)/
# Modifica sshd_config
# Se qualcosa va storto:
sudo rsync -av /backup/etc-ssh-20260327/ /etc/ssh/

# Mirror di log remoti per analisi locale
rsync -av utente@server-prod:/var/log/auth.log /analisi/auth-$(date +%Y%m%d).log

# Verifica integrita' dopo sincronizzazione
rsync -av --checksum sorgente/ dest/
# --checksum usa MD5 invece dei timestamp per confrontare i file
# piu' lento ma piu' accurato — utile in forensics
Tip

Usa sempre --dry-run prima di --delete. Vedere cosa verrebbe cancellato prima di cancellarlo e' una delle abitudini piu' importanti da costruire con rsync.

Dove l'ho usato
#

  • Sincronizzazione file tra Mac e server remoto
  • Backup locale su Mac

Collegato a
#

  • system — categoria
  • ssh — protocollo di trasporto per rsync remoto
  • scp — alternativa per trasferimenti singoli
  • sha256sum — verifica integrita' dopo sincronizzazione
  • compressione-arichivazione — alternativa per backup manuali con tar

Related