Automatizacija sigurnosnih kopija pomoću rsync-a na Linuxu

  • Rsync omogućuje učinkovite sigurnosne kopije prijenosom samo promjena, čuvajući dozvole i metapodatke i lokalno i putem SSH-a.
  • Kombinacija skripti, cron ili systemd timera pretvara rsync u automatski, rotirajući i gotovo bez održavanja sustav sigurnosne kopije.
  • Dobre prakse poput izuzeća, razumne upotrebe --delete, praćenja i testiranja vraćanja utječu na stvarnu pouzdanost sigurnosne kopije.

Automatizacija sigurnosnih kopija pomoću rsync-a na Linuxu

Ako upravljate Linux serverima ili jednostavno imate računalo s podacima koje si ne možete priuštiti izgubiti, učenje korištenja rsync za automatizaciju sigurnosnih kopija To je praktički obavezno. Nema potrebe za postavljanjem skupog paketa ili oslanjanjem na vlasničke alate: s nekoliko dobro osmišljenih naredbi možete imati solidan, učinkovit i jednostavan sustav sigurnosne kopije za održavanje.

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 snimkama, skripte spremne za produkciju, cron, sistemski timeri, izuzeća, rotacije i provjera. Pogledajte naše Usporedba metoda izrade sigurnosnih kopija odlučiti o strategiji. Ideja je da članak završite s jasnim planom i naredbama koje možete praktično kopirati i prilagoditi svom okruženju.

Što je rsync i zašto se toliko koristi za sigurnosne kopije?

Rsync je alat naredbenog retka dizajniran za sinkronizirajte datoteke i direktorije između dvije lokacije, bilo na istom računalu ili između različitih strojeva, obično putem SSH-a ili s vlastitim rsyncd daemon-om.

Prednost rsync-a u odnosu na jednostavan cp ili scp je u tome što implementira pametni algoritam diferencijalni blokovski prijenosUspoređuje izvor i odredište te svaki put šalje samo promjene, a ne cijelu datoteku. 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 datotečni sustav postavljen.

Još jedna važna prednost je što rsync radi lokalno i udaljenoMožete ga koristiti za sinkronizaciju dvije mape na istom poslužitelju, za preuzimanje podataka s udaljenog poslužitelja na sigurnosno računalo ili za slanje podataka na udaljeni NAS ili VPS pomoću SSH-a.

Linux rsync

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čunalu prije montiranja automatskih sigurnosnih kopija.

Na Debian ili Ubuntu sustavima možete učiniti nešto jednostavno poput:

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 je li rsync dostupan i ažuriran u obje krajnosti.

rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos

Osnovne rsync opcije koje ćete koristiti cijelo vrijeme

Iako rsync ima dobar arsenal parametara, u praksi ćete za sigurnosne kopije potrošiti 90% svog vremena koristeći... mali skup opcija to treba zapamtiti.

Ukupna struktura naredbe je prilično jednostavna, ali postoji jedan detalj koji dodaje mnogo mogućnosti: kosa crta na kraju puta 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 /izvor/dir/ /sigurnosna kopija/

Neke od najčešće korištenih opcija sigurnosnog kopiranja posebno su praktične jer Oni kombiniraju mnogo toga u kratkom tekstu.:

  • -a: način rada datoteke. Ekvivalentno -rlptgoD (rekurzivno, čuva simboličke veze, dozvole, vremenske oznake, grupu, vlasnika i posebne datoteke).
  • -v: "Opširni" način rada. Prikazuje što radi i kojim datotekama pristupa.
  • -z: komprimira podatke tijekom prijenosa, idealno za udaljene kopije putem interneta.
  • -h: čini da veličine izgledaju "lijepo" (MB, GB…), savršeno za ljude.
  • -P: kombinira datoteke napretka i djelomične datoteke kako bi se vidjelo kako stvari stoje i kako bi se mogao nastaviti.
  • -Izbrisati: briše na odredištu datoteke koje više ne postoje na izvoru, ostavljajući točnu repliku.
  • -n / –probni rad: simulira izvršenje bez dodirivanja ičega, fantastično jer ne kvari stvari.
  • –isključi / –isključi-iz: omogućuje vam izuzimanje uzoraka ili potpunog popisa ruta koje ne želite kopirati.
  • –odredište-veze: stvara tvrde 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 naredbe 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 dovršena, očuvanje dozvola, datuma i strukturei kopira samo ono što nedostaje ili se promijenilo od prošlog puta, što je već vrlo uredna inkrementalna kopija bez kompliciranja stvari.

Drugi klasičan primjer je sinkronizacija podaci o projektu, fotografije ili dokumenti između dvije mape na istom poslužitelju 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 točna zrcalna 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/

rsync linux

Sigurne udaljene sigurnosne kopije putem SSH-a

Rsync zaista blista kada ga kombinirate s SSH za slanje kopija s poslužiteljaNa 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 pridržavate se dijela poznatog pravila 3-2-1 (barem jedna kopija izvan lokacije).

Idealno bi bilo konfigurirati provjeru autentičnosti javnim ključem umjesto stalnog ručnog unosa lozinki. Nakon što kopirate ključ na sigurnosnu kopiju poslužitelja, naredbe postaju vrlo intuitivne.

# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/

# Prijenos podataka s udaljenog poslužitelja na vaše sigurnosno računalo
rsync -avz sigurnosna kopija@udaljeni-poslužitelj:/var/www/ /sigurnosne kopije/www/

U nešto preciznijim scenarijima, možete prilagoditi SSH enkripcija, port ili kompresija iz samog rsync-a s -e, na primjer ako vaš poslužitelj 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 dijeljene mreže 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 s rsync-om

Iako rsync već izvodi diferencijalne prijenose na razini blokova, s gledišta strategije sigurnosnog kopiranja vrijedi ga razmotriti. tri vrste kopija: pune, diferencijalne i inkrementalnekoje možete implementirati izravno s rsync opcijama.

Potpuna kopija je jednostavna: ona ponovno stvara 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 temelji se na toj osnovi i usredotočuje 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 sustava.

# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/

Najsočniji dio je "prava" inkrementalna sigurnosna kopija, gdje se, osim sinkronizacije, Spremate povijest po datumu bez dupliciranja podatakaOvdje dolazi do izražaja opcija –link-dest koja stvara č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 diskuTo uvelike smanjuje korišteni prostor i omogućuje jednostavnu navigaciju kroz povijesne snimke.

Sigurnosne kopije u stilu Time Machinea sa snimkama i tvrdim vezama

Mnogi ljudi žele replicirati u Linuxu praktičnost macOS Time Machine sa snimkama po datumuS rsync-om je to savršeno moguće kombiniranjem --link-dest, malo ljuske i malo organizacije.

Ideja je održavati trenutni direktorij koji upućuje na posljednju ispravnu sigurnosnu kopiju, a istovremeno stvarati mape s vremenskom oznakom (datum-vrijeme) koji predstavljaju svaki snimak. Nepromijenjene datoteke povezane su tvrdim vezama s prethodnim snimkom, a novi blokovi se upisuju samo kada postoje stvarne razlike.

Tipična naredba u toj shemi mogla bi biti nešto poput:

rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"

Zatim se skripta brine za ažuriranje simboličke veze trenutno tako da uvijek ukazuje na najnoviji snimaki održavati malu povijest organiziranu po datumu. S tim u vezi, 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-vremenski-stroj 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 s cronom na dnevnoj bazi

Dolazi trenutak kada ručno kopiranje više nema smisla; normalna stvar je Zakazivanje sigurnosnih kopija pomoću crona tako da se automatski pokreću izvan vršnih sati (npr. rano ujutro) i da možete zaboraviti na njih osim da povremeno provjeravate zapise.

Postupak je uvijek isti: pripremite skriptu koja izrađuje potpunu kopiju sa svim opcijama (izuzeća, zapisnici itd.), date joj dopuštenja za izvršavanje i uključite je u crontab odgovarajućeg korisnika ili root-u ako uključuje dodirivanje cijelog sustava.

Primjer jednostavnog skripta za lokalno kopiranje mogao bi 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 pokrenuta" >> "$LOG_FILE"

rsync -av –delete
–isključi='*.tmp' \
–isključi='.predmemorija'
–exclude='Preuzimanja/*' \
«$IZVORNI_MAP/» «$MAP_SIGURNE_KOPISE/» >> «$DATOTEKA_ZAPISA» 2>&1

ako; onda
echo » Sigurnosna kopija uspješno dovršena» >> «$LOG_FILE»
drugo
echo » Sigurnosna kopija s greškama» >> «$LOG_FILE»
fi

Nakon što unesete skriptu, na primjer, /usr/local/bin/rsync-local-backup.sh I označen kao izvršna datoteka, dodajete je 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 crontaba možete staviti nešto poput:

0 2 * * * /usr/local/bin/rsync-local-backup.sh

Systemd timeri: moderna alternativa cronu

U modernim sustavima često se isplati Koristite systemd timere umjesto cronaposebno ako želite bolje integrirati usluge, upravljati mrežnim ovisnostima ili imati centralizirane zapisnike u journalctl-u.

Ideja je definirati uslugu koja pokreće vašu skriptu za sigurnosnu kopiju i timer koji pokazuje kada je pokrenuti. Usluga bi mogla biti nešto poput:


Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target

Vrsta=jednokratni
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Korisnik=root
StandardOutput=dnevnik
StandardError=dnevnik
Vremensko ograničenje = 7200

WantedBy = multi-user.target

A pridruženi timer bi bio definiran na sljedeći način, za dnevna sigurnosna kopija u 2 ujutro s malo slučajnosti kako ne bi sve odjednom preopteretio:


Description=Daily Rsync Backup Timer
Requires=rsync-backup.service

U kalendaru=*-*-* 02:00:00
Trajno=istina
Randomizirano kašnjenje u sekundama = 10 min

WantedBy=timers.target

S tim, sve što preostaje je ponovno učitati systemd, aktivirati timer i provjeriti da li ispravno programira i da Zapisnik servisa pokazuje da se kopije pokreću kada je vrijeme.

sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service

Organizirajte rotirajuće sigurnosne kopije: dnevne, tjedne 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, tjedne i mjesečnekorištenje tvrdih poveznica za uštedu prostora i pronalaženje za čišćenje starih datoteka.

Klasični obrazac uključuje trenutni direktorij koji se svaki put ažurira pomoću rsync-a, a zatim kloniranje tog stabla s tvrdim vezama na dnevne, tjedne i mjesečne mape, 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» «$TJEDNO» «$MJESEČNO»

rsync -av –delete –link-dest=»$CURRENT» \
«$IZVORNI_MAP/» «$TRENUTNI/»

&& cp -al «$TRENUTNO» «$DNEVNO/$DATUM»
&& cp -al «$TRENUTNO» «$TJEDNO/$DATUM»
&& cp -al «$TRENUTNO» «$MJESEČNO/$DATUM»

pronađi «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
pronađi «$TJEDNO» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
pronađi «$MJESEČNO» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;

S ovim sustavom imate prilično razuman povijesni prozor bez popunjavanja diska potpunim kopijama, a svaka snimka ostaje dostupna za navigaciju kao i normalna mapa.

Ako se vaši podaci brzo mijenjaju ili su vrlo veliki, možete prilagoditi razdoblja zadržavanja, učestalost ili čak kombinirati ovo sa snimkama LVM-a ili ZFS-a kako biste osigurali konzistentnost baza podataka ili virtualnih strojeva.

Pratite, provjerite i saznajte jesu li vaše sigurnosne kopije korisne.

Svakodnevno izvođenje zadataka sigurnosnog kopiranja je odlično, ali ako nitko ne provjeri rezultat Neće ti puno pomoći. Važno je postaviti osnovno praćenje kako bi se znalo je li i kada je napravljena posljednja sigurnosna kopija.

Jednostavna taktika je ostaviti malu oznaku u odredišnoj mapi svaki put kada se sigurnosna kopija uspješno dovrši, na primjer, datoteku .last-backup-success s datumom. Zatim vas vanjski skript ili čak Nagios/Icinga provjera mogu upozoriti ako je ta datoteka prestara.

MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi

Još jedna zdrava navika je provjeravati Provjerite zapisnike rsync-a za pogreške ili neobične brzine prijenosaSkripta koja izdvaja statistike poput "Broj datoteka", "Ukupna veličina", "Ubrzanje" i slično daje vam brzi pregled stanja.

I, naravno, ono što stvarno čini razliku je navikavanje na to s vremena na vrijeme. napraviti pravu restauracijuUzmite određenu datoteku, vratite verziju od jučer ili prošlog tjedna i provjerite otvara li se ispravno. To je jedini način da budete sigurni da će, ako jednog dana sve pođe po zlu, vaše sigurnosne kopije biti dorasle zadatku.

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 sustav za sigurnosno kopiranje Linuxa, koji u potpunosti iskorištava prednosti besplatnog softvera bez prisiljavanja na žrtvovanje praktičnosti ili pouzdanosti.

Povezani članak:
Potpuni vodič za izradu inkrementalnih sigurnosnih kopija u sustavu Windows

Dodaj kao preferirani izvor