Bekapi sa rsync-om
Kako da podesiš kopiranje fajlova na drugi server preko SSH-a, napraviš istoriju verzija pomoću hard linkova i izbegneš prekomerno brisanje sa opasnom opcijom --delete.
Ažurirano 23. avgust 2026.
rsync je najjednostavniji način da napraviš kopije: dostupan je svuda, prenosi samo izmenjene delove fajlova i radi preko SSH-a. Za male skupove podataka, to je dovoljno.
Osnovna komanda
rsync -avz --delete \
-e "ssh -i /root/.ssh/backup_key -p 22" \
/var/www/ backup@backup.example.com:/srv/backup/vds/www/
Objašnjenje zastavica:
-a— čuva dozvole, vlasnike, vremena i linkove;-v— prikazuje šta se dešava;-z— kompresuje tokom prenosa (korisno na propusnom opsegu do 500 Mbps ako ima mnogo podataka);--delete— briše na primaocu ono što više ne postoji na izvoru.
Kosa crta na kraju putanje izvora znači „sadržaj direktorijuma”; bez nje se kopira sam direktorijum.
/var/www/i/var/wwwdaju različite rezultate, a u kombinaciji sa--deleteta razlika briše pogrešnu stvar. Uvek prvo pokreni sa--dry-run.
rsync -avzn --delete /var/www/ backup@backup.example.com:/srv/backup/vds/www/
Zastavica -n je probni režim.
Ključ za pristup bez lozinke
Zakazano kopiranje zahteva prijavljivanje bez unosa lozinke:
ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""
ssh-copy-id -i /root/.ssh/backup_key.pub backup@backup.example.com
Na primaocu ograniči ovaj ključ na jednu komandu — tako ukradeni ključ neće dati shell. U ~/.ssh/authorized_keys na primaocu:
command="rrsync -wo /srv/backup",restrict ssh-ed25519 AAAA... backup
Istorija verzija sa hard linkovima
Običan rsync čuva samo trenutno stanje: ako si juče obrisao fajl i danas to primetio, nema odakle da ga vratiš. --link-dest ti daje istoriju: nepromenjeni fajlovi se ne kopiraju ponovo već se linkuju, pa trideset kopija zauzima malo više od jedne.
#!/bin/bash
set -euo pipefail
DEST=/srv/backup/vds
TODAY=$(date +%F)
rsync -a --delete \
--link-dest="$DEST/latest" \
/var/www/ "$DEST/$TODAY/"
ln -sfn "$DEST/$TODAY" "$DEST/latest"
find "$DEST" -maxdepth 1 -type d -mtime +30 -name "20*" -exec rm -rf {} +
Pokreni skriptu po rasporedu noću, i uvek sa logovanjem.
Izuzeci
rsync -avz --exclude-from=/root/backup-exclude.txt / backup@host:/srv/backup/vds/root/
/proc/
/sys/
/dev/
/run/
/tmp/
/var/lib/docker/
/var/cache/
*.log
Kopiranje celog korena retko je potrebno: korisnije je napraviti tačan spisak iz članka šta tačno treba bekapovati.
Kada rsync nije dobro rešenje
- Ako ti treba enkripcija skladišta i deduplikacija, koristi Restic.
- Ako se podaci stalno menjaju i integritet je važan, prvo napravi dump baze, pa onda rsyncuj dobijeni fajl.
- Primalac je nečije tuđe skladište kojem ne veruješ: rsync upisuje fajlove takve kakvi jesu, bez enkripcije na strani klijenta.
Česte greške
--deletesa pogrešnom putanjom izvora. Prazan direktorijum izvora briše primalac. Probni režim je obavezan.- Kopija na istom disku. To nije bekap, to je druga meta za isti kvar. Pogledaj kopije van lokacije.
- Kompresija za već kompresovane podatke.
-zsamo usporava arhive i slike. - Noćno pokretanje udari u usko grlo diska. Ograničenje brzine upisa zavisi od tiera: pogledaj brzinu diska. Pomažu
--bwlimit=20000i pokretanje van najopterećenijih sati. - Niko ne proverava rezultat. Loguj povratni kod i prati ga:
rsync ... || echo "backup failed" | mail -s alert you@example.com.