
Ja pārvaldāt Linux serverus vai vienkārši jums ir dators ar datiem, kurus nevarat atļauties zaudēt, apgūstot tā lietošanu rsync, lai automatizētu dublēšanu Tas ir praktiski obligāti. Nav nepieciešams izveidot dārgu komplektu vai paļauties uz patentētiem rīkiem: ar dažām pārdomātām komandām varat izveidot stabilu, efektīvu un viegli uzturējamu dublēšanas sistēmu.
Šajā rokasgrāmatā jūs redzēsiet No rsync pamatiem līdz padziļinātai rediģēšanaiLokālās dublējumkopijas, attālās dublējumkopijas, izmantojot SSH, Time Machine stila dublējumkopijas ar momentuzņēmumiem, ražošanas procesam gatavi skripti, cron, systemd taimeri, izņēmumi, rotācijas un verifikācija. Skatiet mūsu Rezerves dublēšanas metožu salīdzinājums lai izlemtu par stratēģiju. Ideja ir tāda, ka jūs pabeidzat rakstu ar skaidru plānu un komandām, kuras jūs praktiski varat kopēt un pielāgot savai videi.
Kas ir rsync un kāpēc to tik bieži izmanto dublējumkopijām?
Rsync ir komandrindas rīks, kas paredzēts sinhronizēt failus un direktorijus starp divām atrašanās vietām, vai nu vienā datorā, vai starp dažādām iekārtām, parasti izmantojot SSH vai savu rsyncd dēmonu.
Rsync priekšrocība salīdzinājumā ar vienkāršu cp vai scp ir tā, ka tā īsteno viedu algoritmu diferenciālā bloka pārsūtīšanaTas salīdzina avotu un mērķi un katru reizi nosūta tikai izmaiņas, nevis visu failu. Ja jums ir daudz datu un modificējat tikai nelielas daļas, laika un joslas platuma ietaupījums ir milzīgs.
Turklāt rsync var saglabāt praktiski visus metadatusatļaujas, īpašnieki, grupas, laika zīmogi, simboliskās saites, ierīces… Tāpēc tas ir tik noderīgi “nopietnām” dublējumkopijām, kur svarīgs ir ne tikai saturs, bet arī tas, kā ir iestatīta failu sistēma.
Vēl viena svarīga priekšrocība ir tā, ka rsync darbojas gan lokāli, gan attālinātiVarat to izmantot, lai sinhronizētu divas mapes vienā serverī, lai ievāktu datus no attālā servera uz dublēšanas iekārtu vai lai pārsūtītu datus uz attālo NAS vai VPS, izmantojot SSH.

Rsync instalēšana un pārbaude dažādos izplatījumos
Lai gan daudzās distributīvās versijās jau ir instalēts rsync, ieteicams to darīt. Pārbaudiet instalāciju un atjauniniet uz jaunāko versiju. gan avota, gan mērķa datorā pirms automātisko dublējumu pievienošanas.
Debian vai Ubuntu sistēmās varat izdarīt kaut ko tik vienkāršu kā:
rsync --version
sudo apt update
sudo apt install rsync
Tādos izplatījumos kā RHEL, CentOS, Rocky Linux vai citos atvasinājumos procedūra būtu ļoti līdzīga, mainot pakotņu pārvaldnieku, bet ar to pašu ideju pārliecinieties, vai rsync ir pieejams un atjaunināts abās galējībās.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Pamata rsync opcijas, kuras izmantosiet visu laiku
Lai gan rsync ir labs parametru arsenāls, praksē dublējumkopiju veidošanai 90% laika būs jāpavada, izmantojot... neliels opciju komplekts kas jāiegaumē.
Komandas kopējā struktūra ir diezgan vienkārša, taču ir viena detaļa, kas paver daudz iespēju: slīpsvītra ceļā maina darbību.
Vispārīgā sintakse:
rsync ORIGEN DESTINO
Galvenā atšķirība ir tajā, kā jūs apstrādājat avota direktoriju:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# Kopēt TIKAI direktorija saturu uz galamērķi
rsync -av /source/dir/ /backup/
Dažas no visbiežāk izmantotajām rezerves kopēšanas iespējām ir īpaši praktiskas, jo Viņi īsā tekstā apvieno daudzas lietas.:
- -a: failu režīms. Ekvivalents -rlptgoD (rekursīvs, saglabā simboliskās saites, atļaujas, laika zīmogus, grupu, īpašnieku un īpašos failus).
- -vRežīms “Daudzpusīgs”. Parāda, ko tas dara un kuriem failiem tas piekļūst.
- -z: saspiež datus pārsūtīšanas laikā, ideāli piemērots attālām kopijām internetā.
- -h: padara izmērus "jaukus" (MB, GB…), ideāli piemērotus cilvēkiem.
- -P: apvieno progresa un daļēji apstrādātos failus, lai redzētu, kā viss virzās uz priekšu, un varētu atsākt darbu.
- –Dzēst: mērķī izdzēš failus, kas vairs nepastāv avotā, atstājot precīzu kopiju.
- -n / –sausā palaišana: simulē izpildi, neko nepieskaroties, lieliski piemērots, lai nesabojātu lietas.
- –izslēgt / –izslēgt-no: ļauj izslēgt modeļus vai pilnu maršrutu sarakstu, kurus nevēlaties kopēt.
- –saites-galamērķis: izveido cietās saites ar iepriekšējo kopiju, kas ir Time Machine tipa inkrementālo dublējumu pamatā.
Manuālas lokālās kopijas un pirmie piemēri
Pirmais solis pirms jebkādas automatizācijas ir skaidras un pārbaudītas manuālās kopēšanas komandasApskatīsim tipiskus gadījumus, kurus vēlāk izmantosim skriptos.
Ja vēlaties klonēt savu mājas direktoriju uz lokālais dublējuma disksMinimālā komanda izskatītos šādi:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
Šis rsync skenē jūsu mājaslapa pilnībā saglabājot atļaujas, datumus un struktūruun kopē tikai to, kas trūkst vai ir mainījies kopš pēdējās reizes, kas jau ir ļoti glīta inkrementāla kopija, neko nesarežģījot.
Vēl viens klasisks piemērs ir sinhronizācija. projekta dati, fotoattēli vai dokumenti starp divām mapēm vienā serverī vai pat dažādos diskos, lai otra lokālā spēle vienmēr būtu svaiga.
rsync -av /media/fotos/ /backup/fotos/
Runājot par sensitīviem sistēmas datiem, piemēram, /etc vai /var/wwwIr normāli vēlēties kopiju, kas ir precīzs spoguļattēls, no dublējuma noņemot to, kas pazūd oriģinālā. Šeit noder slavenā dzēšanas opcija.
rsync -av --delete /var/www/ /backup/www/
Drošas attālinātas dublējumkopijas, izmantojot SSH
Rsync patiesi izceļas, ja to apvieno ar SSH kopiju nosūtīšanai no serveraTādā veidā jūs varat glabāt savus datus citā tīkla mezglā, NAS vai VPS internetā. Tādā veidā jūs neesat atkarīgs no vienas ierīces un ievērojat daļu no slavenā 3-2-1 noteikuma (vismaz viena kopija ārpus vietnes).
Ideālā gadījumā jums vajadzētu konfigurēt publiskās atslēgas autentifikāciju, nevis visu laiku manuāli ievadīt paroles. Kad atslēga ir nokopēta uz rezerves serveri, komandas kļūst ļoti intuitīvas.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Datu pārnešana no attālā servera uz jūsu rezerves kopēšanas iekārtu
rsync -avz backup@attālā-servera:/var/www/ /rezerves_rezerves_uznesums/www/
Nedaudz izsmalcinātākos scenārijos varat pielāgot SSH šifrēšana, ports vai saspiešana no paša rsync ar -e, piemēram, ja jūsu serveris klausās citā portā vai vēlaties optimizēt lēnu savienojumu.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Noderīgs triks, ja ir vāji savienojumi vai koplietoti tīkli, ir izmantot –bwlimit, lai izvairītos no saites pārslodzes un neatstājiet nevienu bez interneta, kamēr jūs palaižat masveida dublēšanu.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Pilnas, diferenciālās un pakāpeniskās dublējumkopijas ar rsync
Lai gan rsync jau veic diferenciālos pārsūtījumus bloku līmenī, no dublēšanas stratēģijas viedokļa ir vērts apsvērt Trīs kopiju veidi: pilna, diferenciāla un pakāpeniskako var ieviest tieši ar rsync opcijām.
Pilnīgas kopijas izveide ir vienkārša: tā atjauno visu avota saturu galamērķī, ideāli piemērots kā sākotnējā dublējuma kopija vai tīras atsauces iegūšana.
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
Diferenciālā kopēšana balstās uz šo pamatu un koncentrējas uz mērķa faila saskaņošanu ar avotu, izmaiņu kopēšanu un tā noņemšanu, kas vairs nepastāv. Tas ir tas, ko parasti domā, runājot par... ir sistēmas spogulis.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
Vissāpīgākā daļa ir "īstā" pakāpeniskā dublēšana, kur papildus sinhronizācijai Jūs saglabājat vēsturi pēc datuma, nedublējot datusŠeit noder opcija –link-dest, kas izveido cietās saites pret iepriekšējo kopiju failiem, kas nav mainīti.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
Izmantojot šo pieeju, katra dublējuma mape šķiet pilnīga kopija, bet iekšēji Identiski faili koplieto blokus diskāTas ievērojami samazina izmantoto vietu un ļauj ērti pārvietoties pa vēsturiskiem momentuzņēmumiem.
Time Machine stila dublējumkopijas ar momentuzņēmumiem un cietajām saitēm
Daudzi cilvēki vēlas Linux sistēmā atkārtot ērtības, kas saistītas ar macOS laika mašīna ar momentuzņēmumiem pēc datumaAr rsync tas ir pilnīgi iespējams, apvienojot --link-dest, nelielu čaulu un zināmu organizāciju.
Ideja ir uzturēt pašreizējo direktoriju, kas norāda uz pēdējo labo dublējumu, un vienlaikus izveidot mapes ar laika zīmogu (datums-laiks) kas attēlo katru momentuzņēmumu. Nemainītie faili ir saistīti ar cietajām saitēm uz iepriekšējo momentuzņēmumu, un jauni bloki tiek rakstīti tikai tad, ja pastāv faktiskas atšķirības.
Tipiska komanda šajā shēmā varētu būt kaut kas līdzīgs šim:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Pēc tam skripts rūpējas par simboliskās saites atjaunināšanu. pašreizējais, lai tas vienmēr norādītu uz jaunāko momentuzņēmumuun uzturēt nelielu vēsturi, kas sakārtota pēc datuma. Ar to jūs varat pārlūkot vecākas kopijas, vienkārši atverot mapi, kas jūs interesē.
Automatizācija notiek dabiski: skriptu saglabājat kaut kādā līdzīgā formātā /usr/local/bin/rsync-time-machine un ieplānojiet to darboties katru dienu ar cron laikā, kas jums ir visērtākais.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Automatizējiet dublējumkopijas katru dienu, izmantojot cron
Pienāk brīdis, kad kopiju veidošana ar roku vairs nav jēgpilna; ierasta lieta, ko darīt, ir Plānojiet dublējumus, izmantojot cron lai tie darbotos automātiski ārpus sastrēgumstundām (piemēram, agri no rīta), un jūs varētu par tiem aizmirst, izņemot laiku pa laikam pārbaudīt žurnālus.
Process vienmēr ir viens un tas pats: jūs sagatavojat skriptu, kas izveido pilnīgu kopiju ar visām opcijām (izņēmumi, žurnāli utt.), piešķirat tam izpildes atļaujas un pievienojat to atbilstošā lietotāja crontab vai root, ja tas ietver visas sistēmas skaršanu.
Vienkārša lokālās kopēšanas skripta piemērs varētu būt:
#!/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» «$(mapes_nosaukums «$LOG_FILE»)»
atbalss "Lokālā dublēšana sākta" >> "$LOG_FILE"
rsync -av –dzēst
–izslēgt='*.tmp' \
–izslēgt='.kešatmiņa' \
–izslēgt='Lejupielādes/*' \
«$AVOTA_MAP./» «$REZERVES_MAP./» >> «$LOG_FAILS» 2>&1
ja; tad
echo » Rezerves kopija veiksmīgi pabeigta» >> «$LOG_FILE»
cits
echo » Rezerves kopija ar kļūdām» >> «$LOG_FILE»
fi
Kad skripts ir ievadīts, piemēram, /usr/local/bin/rsync-local-backup.sh Un atzīmēts kā izpildāms, jūs to pievienojat cron, lai tas darbotos noteiktā laikā.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
Crontab iekšpusē varētu ievietot kaut ko līdzīgu:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
systemd taimeri: moderna alternatīva cron
Mūsdienu sistēmās tas bieži vien ir izdevīgi Izmantojiet systemd taimerus cron vietāit īpaši, ja vēlaties labāk integrēt pakalpojumus, pārvaldīt tīkla atkarības vai centralizētus žurnālus journalctl.
Ideja ir definēt pakalpojumu, kas palaiž jūsu dublēšanas skriptu, un taimeri, kas norāda, kad to palaist. Pakalpojums varētu būt kaut kas līdzīgs šim:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Tips=viens kadrs
ExecStart=/usr/local/bin/rsync-remote-backup.sh
User=root
StandardOutput=žurnāls
StandardError=žurnāls
TaimautsSek=7200
WantedBy = multi-user.target
Un saistītais taimeris tiktu definēts šādi, ja ikdienas dublēšana plkst. 2:00 ar zināmu nejaušību, lai visu nepārslogotu uzreiz:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
Kalendārā=*-*-* 02:00:00
Pastāvīgs=patiess
Randomizēta aizture (DelaySec) = 10 min
WantedBy=timers.target
Atliek tikai pārlādēt systemd, aktivizēt taimeri un pārbaudīt, vai tas ir pareizi ieprogrammēts un ka Pakalpojumu žurnāls rāda, ka kopijas tiek palaistas, kad ir pienācis laiks.
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Organizējiet rotējošas dublējumkopijas: katru dienu, katru nedēļu un katru mēnesi
Ja vēlaties kaut ko nedaudz sarežģītāku par vienu statisku kopiju, varat izveidot struktūru no rotējošas dublējumkopijas: katru dienu, katru nedēļu un katru mēnesiizmantojot cietās saites, lai ietaupītu vietu un atrastu veco failu sakopšanu.
Klasisks modelis ietver pašreizējā direktorijā esošo direktoriju, kas katru reizi tiek atjaunināts ar rsync, un pēc tam šī koka klonēšanu ar cietajām saitēm uz ikdienas, nedēļas un mēneša mapēm atkarībā no dienas.
#!/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 «$CURRENT» «$DAILY» «$WEEKLY» «$MONTHLY»
rsync -av –delete –link-dest=»$CURRENT» \
«$AVOTA_MAĢISTRĀCIJA/» «$PAŠREIZĒJAIS/»
&& cp -al «$CURRENT» «$DAILY/$DATE»
&& cp -al «$PAŠREIZĒJAIS» «$NEDĒĻAS/$DATUMS»
&& cp -al «$PAŠREIZĒJAIS» «$MĒNEŠA/$DATUMS»
atrast «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
atrast «$WEEKLY» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
atrast «$MONTHLY» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
Ar šo sistēmu jums ir diezgan saprātīgs vēsturisks logs neaizpildot disku ar pilnām kopijām, un katrs momentuzņēmums paliek pārskatāms kā parasta mape.
Ja jūsu dati mainās ātri vai ir ļoti lieli, varat pielāgot saglabāšanas periodus, biežumu vai pat apvienot to ar LVM vai ZFS momentuzņēmumiem, lai nodrošinātu datubāzu vai virtuālo mašīnu konsekvenci.
Uzraugiet, pārbaudiet un noskaidrojiet, vai jūsu dublējumkopijas ir noderīgas.
Ir lieliski, ka rezerves kopēšanas uzdevumi darbojas katru dienu, bet ja neviens nepārbauda rezultātu Tas tev daudz nepalīdzēs. Ir svarīgi iestatīt pamata uzraudzību, lai zinātu, vai un kad tika veikta pēdējā dublēšana.
Vienkārša taktika ir atstāt nelielu marķieri mērķa mapē katru reizi, kad dublēšana ir veiksmīgi pabeigta, piemēram, .last-backup-success failu ar datumu. Pēc tam ārējs skripts vai pat Nagios/Icinga pārbaude var brīdināt, ja fails ir pārāk vecs.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Vēl viens veselīgs ieradums ir pārbaudīt Pārbaudiet rsync žurnālus, lai atrastu kļūdas vai neparastus pārsūtīšanas ātrumus.Skripts, kas iegūst statistiku, piemēram, "Failu skaits", "Kopējais lielums", "Paātrinājums" un tamlīdzīgi, sniedz ātru priekšstatu par to, kā viss notiek.
Un, protams, patiesā atšķirība ir tā, ka ik pa laikam pie tā pierod. veikt īstu restaurācijuPaņemiet konkrētu failu, atjaunojiet tā versiju no vakardienas vai pagājušās nedēļas un pārbaudiet, vai tā atveras pareizi. Tas ir vienīgais veids, kā pārliecināties, ka, ja kādu dienu viss noiet greizi, jūsu dublējumkopijas būs piemērotas uzdevumam.
Ja apvienosiet visus šos elementus — labi konfigurētu rsync, automatizāciju ar cron vai systemd, saprātīgu rotāciju, uzraudzību un atjaunošanas testēšanu —, jūs iegūsiet stabila, elastīga un lēta Linux dublēšanas sistēma, kas pilnībā izmanto bezmaksas programmatūras priekšrocības, nepiespiežot jūs atteikties no ērtībām vai uzticamības.
