
Ako upravljate Linux serverima ili jednostavno imate računar s podacima koje ne možete priuštiti da izgubite, učenje korištenja rsync za automatizaciju sigurnosnih kopija To je praktično obavezno. Nema potrebe za postavljanjem skupog paketa ili oslanjanjem na vlasničke alate: uz nekoliko dobro osmišljenih naredbi, možete imati solidan, efikasan i jednostavan za održavanje sistem za pravljenje sigurnosnih kopija.
Kroz cijeli ovaj vodič vidjet ćete Od osnova rsync-a do naprednog uređivanjaLokalne sigurnosne kopije, udaljene sigurnosne kopije putem SSH-a, sigurnosne kopije u stilu Time Machinea sa snimcima podataka, skripte spremne za produkciju, cron, sistemski tajmeri, izuzeća, rotacije i verifikacija. Pogledajte naše Poređenje metoda pravljenja sigurnosnih kopija odlučiti o strategiji. Ideja je da završite članak s jasnim planom i naredbama koje praktično možete kopirati i prilagoditi svom okruženju.
Šta je rsync i zašto se toliko koristi za pravljenje sigurnosnih kopija?
Rsync je alat komandne linije dizajniran za sinhronizirajte datoteke i direktorije između dvije lokacije, bilo na istom računaru ili između različitih mašina, obično putem SSH-a ili sa vlastitim rsyncd daemon-om.
Prednost rsync-a u odnosu na jednostavan cp ili scp je u tome što implementira pametni algoritam diferencijalni blokovski prijenosUpoređuje izvor i odredište i šalje samo promjene, a ne cijelu datoteku svaki put. Ako imate puno podataka i mijenjate samo male dijelove, uštede vremena i propusnosti su ogromne.
Osim toga, rsync može sačuvati gotovo sve metapodatkedozvole, vlasnici, grupe, vremenske oznake, simboličke veze, uređaji… Zato je toliko koristan za "ozbiljne" sigurnosne kopije, gdje nije važan samo sadržaj, već i način na koji je postavljen datotečni sistem.
Još jedna važna prednost je što rsync funkcioniše i lokalno i daljinskiMožete ga koristiti za sinhronizaciju dvije mape na istom serveru, za preuzimanje podataka sa udaljenog servera na vašu mašinu za sigurnosnu kopiju ili za slanje podataka na udaljeni NAS ili VPS pomoću SSH-a.

Instalirajte i testirajte rsync na različitim distribucijama
Iako mnoge distribucije već dolaze s instaliranim rsync-om, dobra je ideja Provjerite instalaciju i ažurirajte na noviju verziju. i na izvornom i na odredišnom računaru prije montiranja automatskih sigurnosnih kopija.
Na Debian ili Ubuntu sistemima, možete uraditi nešto jednostavno kao što je:
rsync --version
sudo apt update
sudo apt install rsync
U distribucijama poput RHEL-a, CentOS-a, Rocky Linuxa ili drugih derivata, postupak bi bio vrlo sličan, mijenjajući upravitelj paketa, ali s istom idejom... Provjerite da li je rsync dostupan i ažuriran u oba ekstrema.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Osnovne rsync opcije koje ćete koristiti stalno
Iako rsync ima dobar arsenal parametara, u praksi ćete za sigurnosne kopije potrošiti 90% svog vremena koristeći... mali skup opcija to bi trebalo zapamtiti.
Ukupna struktura naredbe je prilično jednostavna, ali postoji jedan detalj koji dodaje mnogo mogućnosti: kosa crta na kraju putanje mijenja ponašanje.
Generička sintaksa:
rsync ORIGEN DESTINO
Ključna razlika leži u načinu na koji se tretira izvorni direktorij:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# Kopiraj SAMO sadržaj direktorija na odredište
rsync -av /source/dir/ /backup/
Neke od najčešće korištenih opcija za sigurnosno kopiranje su posebno praktične jer Oni kombinuju mnogo toga u kratkom tekstu.:
- -a: način rada datoteke. Ekvivalentno opciji -rlptgoD (rekurzivno, čuva simboličke veze, dozvole, vremenske oznake, grupu, vlasnika i posebne datoteke).
- -v: "Opširni" način rada. Prikazuje šta radi i kojim datotekama pristupa.
- -z: komprimira podatke tokom prenosa, idealno za udaljene kopije preko interneta.
- -h: čini da veličine izgledaju "lijepo" (MB, GB...), savršeno za ljude.
- -P: kombinuje datoteke napretka i djelomične datoteke kako bi se vidjelo kako stvari stoje i kako bi se mogao nastaviti.
- –Izbriši: briše na odredištu datoteke koje više ne postoje na izvoru, ostavljajući tačnu repliku.
- -n / –probni rad: simulira izvršenje bez dodirivanja ičega, fantastično za ne kvarenje stvari.
- –isključi / –isključi-iz: omogućava vam da isključite obrasce ili potpunu listu ruta koje ne želite kopirati.
- –link-dest: kreira čvrste veze s prethodnom kopijom, osnovu inkrementalnih sigurnosnih kopija tipa Time Machine.
Ručne lokalne kopije i prvi primjeri
Prvi korak prije automatizacije bilo čega je imati jasne i provjerene komande za ručno kopiranjePregledajmo tipične slučajeve koje ćemo kasnije koristiti unutar skripti.
Ako želite klonirati svoj početni direktorij u lokalni disk za sigurnosnu kopijuMinimalna naredba bi izgledala ovako:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
Ovaj rsync skenira vaš početna stranica kompletna, čuvajući dozvole, datume i strukturui kopira samo ono što nedostaje ili se promijenilo od prošlog puta, što je već vrlo uredna inkrementalna kopija bez komplikacija.
Još jedan klasičan primjer je sinhronizacija podaci o projektu, fotografije ili dokumenti između dvije mape na istom serveru ili čak različitih diskova, kako bi druga lokalna igra uvijek bila svježa.
rsync -av /media/fotos/ /backup/fotos/
Kada su u pitanju osjetljivi sistemski podaci, kao što su /etc ili /var/wwwNormalno je željeti kopiju koja je tačna identična kopija, uklanjajući iz sigurnosne kopije ono što nestaje u originalu. Tu dolazi do izražaja poznata opcija brisanja.
rsync -av --delete /var/www/ /backup/www/
Sigurne udaljene sigurnosne kopije putem SSH-a
Ono gdje rsync zaista blista je kada ga kombinujete sa SSH za slanje kopija sa serveraNa ovaj način možete pohraniti svoje podatke na drugom čvoru u vašoj mreži, NAS-u ili VPS-u na internetu. Na taj način niste ovisni o jednom uređaju i poštujete dio poznatog 3-2-1 pravila (barem jedna kopija van lokacije).
Idealno bi bilo da konfigurirate autentifikaciju javnim ključem umjesto da stalno ručno unosite lozinke. Nakon što kopirate ključ na server za sigurnosne kopije, naredbe postaju vrlo intuitivne.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Prenošenje podataka sa udaljenog servera na vašu mašinu za pravljenje rezervnih kopija
rsync -avz sigurnosna kopija@udaljeni-server:/var/www/ /sigurnosne kopije/www/
U nešto preciznijim scenarijima, možete prilagoditi SSH enkripcija, port ili kompresija iz samog rsync-a sa -e, na primjer ako vaš server sluša na drugom portu ili želite optimizirati sporu vezu.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Koristan trik kada su veze slabe ili mreže dijeljene je korištenje –bwlimit kako bi se izbjeglo preopterećenje veze i ne ostavljajte nikoga bez interneta dok pokrećete masovnu sigurnosnu kopiju.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Potpune, diferencijalne i inkrementalne sigurnosne kopije pomoću rsync-a
Iako rsync već vrši diferencijalne transfere na nivou bloka, sa stanovišta strategije pravljenja sigurnosnih kopija, vrijedi ga razmotriti. Tri vrste kopija: pune, diferencijalne i inkrementalnekoje možete direktno implementirati pomoću rsync opcija.
Potpuna kopija je jednostavna: ona rekreira sav sadržaj izvora na odredištu, idealna kao početna sigurnosna kopija ili za čistu referencu.
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
Diferencijalno kopiranje se gradi na toj osnovi i fokusira se na održavanje odredišta usklađenim s izvorom, kopiranje promjena i uklanjanje onoga što više ne postoji. To je ono što obično mislite kada govorite o... imati ogledalo sistema.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
Najzanimljiviji dio je "prava" inkrementalna sigurnosna kopija, gdje pored sinhronizacije, Spremate historije po datumu bez dupliranja podatakaOvdje dolazi do izražaja opcija –link-dest, koja kreira čvrste veze prema prethodnoj kopiji za datoteke koje se nisu promijenile.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
S ovim pristupom, svaka mapa sigurnosne kopije izgleda kao potpuna kopija, ali interno Identične datoteke dijele blokove na diskuOvo znatno smanjuje korišteni prostor i omogućava jednostavnu navigaciju kroz historijske snimke.
Sigurnosne kopije u stilu Time Machinea sa snimcima i tvrdim linkovima
Mnogi ljudi žele replicirati u Linuxu praktičnost macOS Time Machine sa svojim snimcima po datumuSa rsync-om je to sasvim moguće kombinovanjem --link-dest, malo ljuske i malo organizacije.
Ideja je održavati trenutni direktorij koji ukazuje na posljednju ispravnu sigurnosnu kopiju, a istovremeno kreirati mape s vremenskom oznakom (datum-vrijeme) koji predstavljaju svaki snimak. Nepromijenjene datoteke su povezane čvrstim vezama s prethodnim snimkom, a novi blokovi se upisuju samo kada postoje stvarne razlike.
Tipična naredba u toj shemi može biti nešto poput:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Zatim se skripta brine o ažuriranju simboličke veze trenutno tako da uvijek ukazuje na najnoviji snimaki da održavate malu historiju organiziranu po datumu. Pomoću toga možete pregledavati starije kopije jednostavnim ulaskom u mapu koja vas zanima.
Automatizacija dolazi prirodno: skriptu spremate u nešto poput /usr/local/bin/rsync-vremenska-mašina i zakažite ga da se pokreće svakodnevno s cronom u vrijeme koje vam najviše odgovara.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Automatizirajte sigurnosne kopije pomoću crona na dnevnoj bazi
Dolazi trenutak kada ručno pravljenje kopija više nema smisla; normalna stvar koju treba uraditi je Zakazivanje sigurnosnih kopija pomoću crona tako da se automatski pokreću van vršnih sati (na primjer, rano ujutro) i da možete zaboraviti na njih osim da povremeno provjeravate zapise.
Proces je uvijek isti: pripremite skriptu koja pravi kompletnu kopiju sa svim opcijama (izuzeća, logovi itd.), date joj dozvole za izvršavanje i uključite je u crontab odgovarajućeg korisnika ili root-u ako uključuje dodirivanje cijelog sistema.
Primjer jednostavnog skripta za lokalno kopiranje može biti:
#!/bin/bash
SOURCE_DIR="/home"
BACKUP_DIR="/backup/home"
LOG_FILE="/var/log/backup/rsync-local.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
mkdir -p «$BACKUP_DIR» «$(naziv_dira «$LOG_FILE»)»
echo "Lokalna sigurnosna kopija je započela" >> "$LOG_FILE"
rsync -av –delete
–isključi='*.tmp' \
–isključi='.keš' \
–exclude='Preuzimanja/*' \
«$IZVORNI_DIREKTOR/» «$DIREKTOR_SIGURNE_KOPISE/» >> «$DATOTEKA_LOGA» 2>&1
ako; onda
echo » Sigurnosna kopija uspješno završena» >> «$LOG_FILE»
drugo
echo » Sigurnosna kopija sa greškama» >> «$LOG_FILE»
fi
Nakon što unesete skriptu, na primjer, /usr/local/bin/rsync-local-backup.sh I označen kao izvršni fajl, dodajete ga u cron tako da se pokreće u određeno vrijeme.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
Unutar crontab-a možete staviti nešto poput:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
Systemd tajmeri: moderna alternativa cronu
U modernim sistemima često se isplati Koristite systemd tajmere umjesto cronaposebno ako želite bolje integrirati servise, upravljati mrežnim ovisnostima ili imati centralizirane logove u journalctl-u.
Ideja je definirati servis koji pokreće vašu skriptu za sigurnosnu kopiju i tajmer koji pokazuje kada je pokrenuti. Servis bi mogao biti nešto poput:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Type = oneshot
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Korisnik=root
StandardOutput=dnevnik
StandardError=dnevnik
Vremensko ograničenje u sekundama=7200
WantedBy = multi-user.target
A pridruženi tajmer bi bio definisan na sljedeći način, za dnevna sigurnosna kopija u 2 ujutro s određenom nasumičnošću kako ne bi sve odjednom bilo preopterećeno:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
NaKalendaru=*-*-* 02:00:00
Trajno=tačno
Nasumično kašnjenje u sekundama = 10 minuta
WantedBy=timers.target
Nakon toga, sve što preostaje je ponovo učitati systemd, aktivirati tajmer i provjeriti da li se ispravno programira i da Servisni dnevnik pokazuje da se kopije pokreću kada je vrijeme za to..
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Organizujte rotirajuće sigurnosne kopije: dnevne, sedmične i mjesečne
Ako želite nešto malo složenije od jedne statičke kopije, možete postaviti strukturu od rotirajuće sigurnosne kopije: dnevne, sedmične i mjesečnekorištenje tvrdih linkova za uštedu prostora i pronalaženje za čišćenje starih datoteka.
Klasičan obrazac uključuje posjedovanje trenutnog direktorija koji se ažurira svaki put pomoću rsync-a, a zatim kloniranje tog stabla s tvrdim vezama do dnevnih, sedmičnih i mjesečnih mapa, ovisno o danu.
#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_ROOT="/backup/www"
CURRENT="$BACKUP_ROOT/current"
DAILY="$BACKUP_ROOT/daily"
WEEKLY="$BACKUP_ROOT/weekly"
MONTHLY="$BACKUP_ROOT/monthly"
DATE=$(date +%Y%m%d)
DOW=$(date +%u)
DOM=$(date +%d)
mkdir -p «$TRENUTNO» «$DNEVNO» «$SEDMIČNO» «$MJESEČNO»
rsync -av –delete –link-dest=»$CURRENT» \
«$IZVORNI_DIREKTOR/» «$TRENUTNI/»
&& cp -al «$TRENUTNO» «$DNEVNO/$DATUM»
&& cp -al «$TRENUTNO» «$SEDMIČNO/$DATUM»
&& cp -al «$TRENUTNO» «$MJESEČNO/$DATUM»
pronađi «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
pronađi «$SEDMIČNO» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
pronađi «$MONTHLY» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
Sa ovim sistemom imate prilično razuman historijski prozor bez popunjavanja diska potpunim kopijama, a svaki snimak ostaje navigiran kao normalna mapa.
Ako se vaši podaci brzo mijenjaju ili su vrlo veliki, možete prilagoditi periode zadržavanja, učestalost ili čak kombinirati ovo sa LVM ili ZFS snimcima podataka kako biste osigurali konzistentnost baza podataka ili virtualnih mašina.
Pratite, provjeravajte i saznajte jesu li vaše sigurnosne kopije korisne.
Svakodnevno izvođenje zadataka pravljenja sigurnosnih kopija je odlično, ali ako niko ne provjeri rezultat Neće ti mnogo pomoći. Važno je postaviti neko osnovno praćenje kako bi se znalo da li je i kada napravljena posljednja sigurnosna kopija.
Jednostavna taktika je ostaviti malu oznaku u odredišnoj mapi svaki put kada se sigurnosna kopija uspješno završi, na primjer, datoteku .last-backup-success s datumom. Zatim, vanjski skript, ili čak Nagios/Icinga provjera, mogu vas upozoriti ako je ta datoteka previše stara.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Još jedna zdrava navika je provjeravanje Provjerite rsync zapise za greške ili neuobičajene brzine prijenosaSkripta koja izdvaja statistike kao što su "Broj datoteka", "Ukupna veličina", "Ubrzanje" i slično daje vam brz pregled stanja.
I, naravno, ono što zaista čini razliku jeste navikavanje na to s vremena na vrijeme. uraditi pravu restauracijuUzmite određenu datoteku, vratite verziju od jučer ili prošle sedmice i provjerite da li se ispravno otvara. Ovo je jedini način da budete sigurni da će, ako jednog dana sve krene po zlu, vaše sigurnosne kopije biti na visini zadatka.
Ako objedinite sve ove dijelove - dobro konfiguriran rsync, automatizaciju s cronom ili systemdom, razumnu rotaciju, praćenje i testiranje vraćanja - završit ćete s robustan, fleksibilan i jeftin sistem za pravljenje sigurnosnih kopija na Linuxu, koji u potpunosti iskorištava prednosti besplatnog softvera bez prisiljavanja da se odreknete praktičnosti ili pouzdanosti.
