17Aug
"rsync" protokolas gali būti gana paprastas naudoti įprastose atsarginės kopijos / sinchronizacijos darbe, tačiau kai kurios iš tobuliausių funkcijų gali jus nustebinti.Šiame straipsnyje mes parodysime, kaip net didžiausi duomenų kaupikliai ir atsarginių kopijų entuziastai gali naudoti "rsync" kaip vieną sprendimą dėl visų jų duomenų perkėlimo poreikių.
Įspėjimas: Išplėstiniai geekstai tik
Jei tu sėdi, mąstydamas "Kas yra rsync?" Arba "Aš naudoju rsync tik labai paprastoms užduotims", galbūt norėsite patikrinti ankstesnį straipsnį apie tai, kaip naudoti rsync atsarginei kopijavimuijūsų duomenys apie "Linux", kuriame pateikiama "rsync" įvadas, pateikiama informacija apie įdiegimą ir pateiktos jo pagrindinės funkcijos. Kai turėsite tvirtą supratimą apie tai, kaip naudoti rsync( tiesa, tai nėra toks sudėtingas) ir patogu naudoti "Linux" terminalą, esate pasiruošę pereiti prie šio išplėstinio vadovo.
Veikia rsync sistemoje "Windows
" Pirma, leiskime "Windows" skaitytuvus tame pačiame puslapyje kaip mūsų "Linux" guru. Nors "rsync" yra sukurtas veikti "Unix" sistemose, nėra jokios priežasties, dėl kurios neturėtumėte to naudoti taip pat lengvai "Windows" sistemoje."Cygwin" gamina nuostabų "Linux" API, kurį galime naudoti paleisti "rsync", todėl eikite į savo svetainę ir atsisiųskite 32 bitų arba 64 bitų versiją, priklausomai nuo jūsų kompiuterio.
diegimas yra paprastas;galite išsaugoti visas parinktis pagal numatytas vertes, kol pateksite į ekraną "Pasirinkti paketus".
Dabar jums reikia atlikti tuos pačius žingsnius Vim ir SSH, tačiau paketai atrodys šiek tiek kitaip, kai jūs einate juos pasirinkti, taigi čia pateikiami keli ekrano paveikslėliai:
"Vim" diegimas:
"SSH" diegimas:
. Kai jau esatepasirinkę tuos tris paketus, spauskite toliau, kol baigsite diegimą.Tada galite atidaryti Cygwin, spustelėdami piktogramą, kurią įdiegėjas įdėjo į savo darbalaukį.
rsync komandos: paprastas ir patobulintas
Dabar, kai "Windows" vartotojai yra tame pačiame puslapyje, pažiūrėkime į paprastą komandą rsync ir parodysime, kaip kai kurių išplėstinių jungiklių naudojimas gali greitai susitvarkyti.
Tarkime, kad turite daugybę failų, kuriems reikia atsarginių kopijų - kas šiuo metu nėra? Jūs įjunkite savo nešiojamąjį kietąjį diską, kad galėtumėte kopijuoti savo kompiuterio failus ir išduoti šią komandą:
rsync-a /home/geek/files/ /mnt/usb/files/
Arba, kaip atrodys "Windows" kompiuteryje su "Cygwin":
rsync-/cygdrive/c/files/ /cygdrive/e/files/
gana paprasta irtoje vietoje nėra jokio reikalo naudoti rsync, nes galite tik vilkti ir paleisti failus. Tačiau jei jūsų kituose kietajame diske jau yra kai kurie failai ir tiesiog reikia atnaujintų versijų ir failų, sukurtų po paskutinio sinchronizavimo, ši komanda yra naudinga, nes ji siunčia naujus duomenis tik į kietąjį diską.Su dideliais failais, ypač perduodant failus per internetą, tai yra didelis įvykis.
Failų atsarginis kopijavimas į išorinį standųjį diską, o tada standusis diskas talpinamas toje pačioje vietoje, kur yra jūsų kompiuteris, yra labai bloga mintis. Taigi pažvelkime, ko reikės, norint pradėti siųsti failus iš interneto kitame kompiuteryje(vieną išnuomojote, šeimos narį ir tt).
rsync -av -delete -e 'ssh-p 12345' /home/geek/files/ [email protected]: /home/geek2/files/
Pirmiau nurodyta komanda išsiųs savo failus į kitą kompiuterį su 10.1.1.1 IP adresu. Tai ištrins pašalinius failus iš paskirties vietos, kurių nebeegzistuoja šaltinio kataloge, išduoda failų pavadinimus, kurie yra perkelti, todėl jūs turite supratimą apie tai, kas vyksta, ir tunelį rsync per SSH prievado 12345.
-a -v -e -Išjungiami jungikliai yra keletas pagrindinių ir dažniausiai naudojamų;jei jau skaitote šį pamokėlį, jau turėtumėte žinoti apie juos. Peržiūrėkime keletą kitų jungiklių, kurie kartais ignoruojami, bet neįtikėtinai naudingi:
--progress - Šis jungiklis leidžia mums matyti kiekvieno failo perkėlimo eigą.Tai ypač naudinga perduodant didelius failus per internetą, tačiau gali perduoti nereikalingą kiekį informacijos, kai tik perduodama mažus failus greituose tinkluose.
Vykdoma komanda rsync su "--progress" jungikliu atsargine kopija:
--partial - tai dar vienas jungiklis, kuris ypač naudingas perduodant didelius failus per internetą.Jei rsync perduodamas failo perkėlimo viduryje dėl bet kokios priežasties nutraukiamas, iš dalies perduotas failas yra laikomas paskirties kataloge, o perdavimas atnaujinamas, kai jis išjungtas, kai komanda rsync vėl vykdoma. Perduodant didelius failus per internetą( tarkim, porą gigabaitų), nėra nieko blogesnio nei kelias sekundes, kai išjungtas internetas, mėlynas ekranas arba žmogaus klaida pakelia failų perkėlimą ir turi pradėti viską iš naujo.
-P - šis jungiklis jungia --progress and --partial, todėl naudokite jį, o jūsų komanda rsync šiek tiek trumpesnė.
-z arba -compress - Šis jungiklis sukurs rsync suspaudimo failo duomenis, nes jis perduodamas, sumažinant duomenų, kurie turi būti siunčiami į paskirties vietą, kiekį.Tai iš tiesų yra gana dažnas jungiklis, bet jis toli gražu nėra būtinas, tik iš tiesų jums naudingas perėjimas tarp lėtų jungčių, o tai nieko nedaro dėl šių tipų failų: 7z, avi, bz2, deb, g, z iso, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.
-h arba - žmonėms nuskaitomas - jei naudojate "progress-switch", jūs tikrai norite jį naudoti. Tai reiškia, kad, nebent jums patinka konvertuoti baitus į megabaitus skristi."-h" jungiklis paverčia visus išvesties numerius į žmogaus nuskaitomą formą, taigi jūs iš tikrųjų galite suprasti perduodamų duomenų kiekį.
-n arba -dry run-Šis jungiklis yra svarbu žinoti, kai jūs pirmą kartą rašote rsync scenarijų ir jį išbandote. Ji atlieka bandomąjį paleidimą, bet iš tikrųjų nieko nekeičia - būsimi pakeitimai vis dar išvedami kaip įprasta, todėl galite viską perskaityti ir įsitikinti, kad jis atrodo gerai, prieš paleidžiant scenarijų į gamybą.
-R arba --relative - Šis jungiklis turi būti naudojamas, jei paskirties kataloge dar nėra.Šį variantą naudosime vėliau šiame vadove, kad galėtume sukurti katalogus tikslinėje mašinoje su laiko žymomis aplankų pavadinimuose.
--exclude-from - Šis jungiklis naudojamas norint susieti neįtrauktųjų sąrašą, kuriame yra katalogų keliai, kurių nenorite sukurti atsargine kopija. Reikia tiesioginio teksto failo su kiekvienos eilutės katalogo ar failo keliu.
--include-from - Panašus į --exclude-from, bet jis susiejamas su failu, kuriame yra katalogų ir failų maršrutų duomenys, kuriuos norite atsarginę kopiją.
-stats - Bet kokiu būdu nėra svarbus perjungimas, bet jei esate "sysadmin", gali būti naudinga žinoti išsamią kiekvienos atsarginės kopijos statistiką, kad galėtumėte stebėti srautą, siunčiamą per jūsų tinklą, ir tokį.
--log-file - tai leidžia siųsti rsync išvestį į žurnalo failą.Mes neabejotinai rekomenduojame tai automatinėms atsarginėms kopijoms, kuriose jūs neturite, kad galėtumėte skaityti produkciją patys. Visada darykite žurnalo failus per laisvą laiką, kad įsitikintumėte, jog viskas veikia tinkamai. Be to, tai yra esminis perėjimas prie "sysadmin", taigi jums nereikės nerimauti, kaip sugadinta atsarginės kopijos, kai paliksite stažuotoją.
Pažvelkime į mūsų rsync komandą dabar, kai turime keletą papildomų jungiklių:
rsync -avzhP --delete --stats --log-file = /home/geek/rsynclogs/ backup.log --exclude-from '/home/geek/ exclude.txt'-e 'ssh-p 12345' /home/geek/files/ [email protected]: /home/geek2/files/
Komanda vis dar gana paprasta, bet mes dar nepadarėme tinkamo atsarginio sprendimo. Nors mūsų failai dabar yra skirtingose fizinėse vietose, ši atsarginė kopija nieko nedaro, kad apsaugotų mus nuo vienos pagrindinių duomenų praradimo priežasčių: žmogaus klaidos.
momentinio kopijavimo atsarginės kopijos
Jei netyčia ištrinate failą, virusas sugadina visus jūsų failus arba kažkas atsitinka, kai jūsų failai nepageidaujamai keičiami, o tada paleidžiate savo rsync atsarginės kopijos scenarijų, jūsų atsarginiai duomenys perrašomi su nepageidaujamais pakeitimais. Kai toks dalykas atsiranda( ne tada, bet kada), jūsų atsarginės kopijos sprendimas nieko nedaro, kad apsaugotų jus nuo duomenų praradimo.
"rsync" kūrėjas suprato tai ir pridėjo --backup ir --backup-dir argumentus, kad vartotojai galėtų vykdyti skirtingas atsargines kopijas. Pirmasis rsync svetainės pavyzdys rodo scenarijų, kuriame kas septynias dienas paleidžiama visa atsarginė kopija, o šių failų pakeitimai kasdien palaikomi atskiruose kataloguose. Problema su šiuo metodu yra tai, kad norint atkurti failus, jūs turite juos veiksmingai atkurti septynis kartus. Be to, dauguma geekskaitų keičia atsargines kopijas keletą kartų per dieną, todėl bet kuriuo metu galite lengvai turėti 20 skirtingų atsarginių kopijų katalogų.Ne tik atkuriami failai yra skausmas, bet netgi ieškant atsarginių duomenų gali būti labai daug laiko - turėtumėte žinoti paskutinį kartą, kai failas buvo pakeistas, kad galėtumėte rasti naujausią atsarginę kopiją.Be to, neefektyviai paleisti tik kartą per savaitę( arba netgi retkarčiais kai kuriais atvejais) papildomas atsargines kopijas.
"Snapshot" atsarginės kopijos į pagalbą!"Snapshot" atsarginės kopijos yra ne kas kita, kaip papildomos atsarginės kopijos, tačiau jos naudoja "hardlink", kad išsaugotų pradinio šaltinio failų struktūrą.Iš pradžių gali būti sunku apsukti galvą, todėl pažiūrėkime į pavyzdį.
Pretend, kad turime atsarginę scenarijų, kuri automatiškai kiekvieną dvi valandas atsargines kopijas. Kai rsync tai atliks, kiekviena atsarginė kopija bus pavadinta tokiu formatu: "Backup-month-day-year-time".
Taigi galų gale tipiška diena turėsime aplankų, esančių mūsų paskirties kataloge, sąrašą tokiu būdu:
Perkeldami bet kurį iš šių katalogų, kiekvieną failą pamatysite iš šaltinio katalogo tiksliai taip, kaip tuo metu. Tačiau dviem katalogais nebus pasikartojančių."rsync" tai atlieka naudojant kietąjį ryšį per argumentą -link-dest = DIR.
Žinoma, norint, kad šie gražiai ir tvarkingai laikomi katalogų pavadinimai, turėsime šiek tiek keisti mūsų rsync scenarijų.Pažvelkime į tai, ko reikės, kad įvykdytume tokį atsarginį sprendimą, tada išsamiau paaiškinsime scenarijų:
#!/bin/ bash
#copy old time.txt į laiką 2.txt
taip |cp ~ /backup/ time.txt ~ /backup/ time2.txt
# įrašykite seną time.txt failą su nauju laiku
echo "date +"% F-% I% p "` & gt;~ /backup/ time.txt
# ištrinkite žurnalo failą
echo "" & gt;~ /backup/ rsync-`date + "% F-% I% p" `.log
#rsync komanda
rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = ~ /backup/ rsync-`date + "% F-% I% p" `.log --exclude-from" ~ / exclude.txt "--link-dest = /home/geek2/files/` cat ~ /backup/time2.txt` -e 'ssh-p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ 'date + "% F-% I% p" "/
# nepamirškite pridėti žurnalo failo ir įdėti jį įatsarginės
scp-P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/` cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log
būtų tipiškas momentinis kopijavimo rsync scenarijus. Jei kažkur mes kažkam praradome, išmoksime jį gabalėliu:
Pirmoji mūsų scenarijaus eilutė kopijuoja laiko.txt turinį į time2.txt. Taip vamzdis yra patvirtinti, kad mes norime perrašyti failą.Toliau mes atsižvelgiame į dabartinį laiką ir įtraukiame jį į laiką. Txt.Šie failai bus naudingi vėliau.
Kita eilutė sukuria rsync žurnalo failą, pavadindama jį rsync-date.log( kur data yra faktinė data ir laikas).
Dabar sudėtinga rsync komanda, apie kurią jus įspėjome:
-avzhPR, -e, -delete, -stats, -log-failas, -exclude-from, -link-dest - tiesiogkomutatoriai, apie kuriuos mes kalbėjome anksčiau;slinkite aukštyn, jei reikia atnaujinimo.
--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - tai paskirties katalogo leidimai. Kadangi mes sukūrėme šį katalogą rsync scenarijaus viduryje, turime nurodyti teises, kad mūsų vartotojas galėtų į jį įrašyti failus.
Datavimo ir kačių komandų
naudojimas Mes einame per kiekvieną datos ir kačių komandų naudojimą rsync komandos viduje, tokiu būdu, kokiu jie įvyksta. Pastaba: mes žinome, kad yra kitų būdų, kaip atlikti šią funkciją, ypač naudojant kintamųjų deklaravimą, tačiau šiame vadove mes nusprendėme naudoti šį metodą.
Žurnalo failas yra nurodytas kaip:
~ /backup/ rsync-`date + "% F-% I% p" `.log
Taip pat galėtume nurodyti jį kaip:
~ /backup/ rsync-`cat ~ /backup/ time.txt`.log
Bet kuriuo atveju komanda -log-file turi sugebėti rasti anksčiau sukurtą žurnalo failą ir parašyti jį.
Nuorodos paskirties failas yra nurodytas kaip:
--link-dest = /home/geek2/files/ 'cat ~ /backup/ time2.txt`
Tai reiškia, kad komanda -link-dest gauna ankstesnės atsarginės kopijos katalogą.Jei kaskart dvi valandas atlieka atsargines kopijas, o tai skriptas paleidžiamas 16:00 val., Komanda -link-dest ieškos aplanko, sukurto 14:00 val., Ir tik pervadina nuo to laiko pasikeitusius duomenis( jei bet kuris).
Norėdami pakartoti, kodėl time.txt yra nukopijuojamas į time2.txt scenarijaus pradžioje, taigi komanda -link-dest gali vėliau atsinešti tą laiką.
Adresų katalogas yra nurodytas kaip:
[email protected]: /home/geek2/files/ 'date +'% F-% I% p ''
Ši komanda paprasčiausiai nukreipia šaltinio failus į katalogą, kuriame yra dabartinės datos ir laiko pavadinimai.
Galiausiai mes įsitikiname, kad žurnalo failo kopija yra atsarginės kopijos.
scp-P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log geek2 @ 10.1.1.1: /home/geek2/files/` cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log
Mes naudojamesaugi kopija prie uosto 12345, kad rsync žurnalas būtų įkeltas į tinkamą katalogą.Norėdami pasirinkti tinkamą žurnalo failą ir įsitikinti, kad jis patenka į reikiamą vietą, failas time.txt turi būti nurodytas per komandos katę.Jei jums įdomu, kodėl mes nusprendėme, kad katė time.txt, o ne tiesiog naudosime datos komandą, tai gali būti, kad rsync komanda paleidžia daug laiko, taigi, norint įsitikinti, kad mes turime tinkamą laiką, mes tiesiog katėanksčiau sukurtą teksto dokumentą.
Automation
"Windows" sistemoje naudokite "Cron" arba "Task Scheduler", kad automatizuotumėte savo "rsync" scenarijų.Vienas dalykas, kurį turite būti atsargiems, yra tai, kad prieš baigdami naują versiją baigsite bet kokius rysync procesus. Atrodo, kad užduočių planuoklis automatiškai uždaro bet kokius jau veikiančius egzempliorius, bet Linux reikia šiek tiek daugiau kūrybiškumo.
Daugeliui Linux distribucijų galima naudoti komandą pkill, todėl tik rsync scenarijų pradžioje pridėkite toliau nurodytus dalykus:
pkill-9 rsync
šifravimas
Ne, dar nesu daroma. Galiausiai turime fantastišką( ir nemokamą!) Atsarginę kopiją, bet visi mūsų failai vis dar yra jautrūs vagystei. Tikimės, kad esate atsargines kopijas savo failus į keletą šimtų mylių.Nesvarbu, ar saugu, kad toli vieta yra, vagystė ir įsilaužimas visada gali būti problemų.
Mūsų pavyzdžiuose mes išnaudojome visą mūsų rsync srautą per SSH, taigi visi mūsų failai yra šifruojami, kai jie yra tranzitu per paskirties vietą.Tačiau turime įsitikinti, kad paskirties vieta yra tokia pat saugi. Turėkite omenyje, kad rsync tik šifruoja jūsų duomenis, kai jie yra perkelti, tačiau failai yra labai atviri, kai jie pasiekia paskirties vietą.
Viena geriausių rsync funkcijų yra ta, kad ji perduoda tik kiekvieno failo pakeitimus. Jei visi jūsų failai yra užšifruoti ir padaryti vieną neesminį pakeitimą, visas failas turės būti retransliuotas dėl šifravimo, kuris visiškai atsitiktinai suskirsto visus duomenis po bet kokio pakeitimo.
Dėl šios priežasties geriausia / lengviausia naudoti tam tikrą disko šifravimo tipą, pvz., "BitLocker for Windows" arba "dm-crypt for Linux".Tokiu būdu jūsų duomenys saugomi vagystės atveju, tačiau failai gali būti perkelti naudojant rsync, o jūsų šifravimas netrukdys jo veikimui. Yra ir kitų variantų, kurie veikia panašiai kaip rsync arba netgi įgyvendina tam tikrą jo formą, pvz., "Duplicity", tačiau trūksta kai kurių funkcijų, kurias rsync gali pasiūlyti.
Po to, kai nustatėte nuotraukų atsargines kopijas išorinėje vietoje ir užšifruotumėte savo šaltinio ir paskirties standžiuosius diskus, atsineškite ranka, kad įsisavintumėte rsync ir galėtumėte įdiegti daugumą beprotės duomenų atsarginės kopijos.