Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Programi
  • Korištenje rsync u primjerima. Efikasno korištenje rsync-a

Korištenje rsync u primjerima. Efikasno korištenje rsync-a

Postoji nekoliko identičnih servera (4 čvora) na Amazon EC2 koji koriste Ubuntu. Svako generiše i sprema na svoj disk keš memoriju koju želi da sinhronizuje. Ali jednostavna rsync ovdje neće raditi - postoji nekoliko milijardi datoteka, nfs je presporo, itd. Puna lista opcija koje se razmatraju sa objašnjenjima je ispod.

Osim toga, s vremena na vrijeme morate izbrisati zastarjele datoteke na svim serverima odjednom, što se još uvijek radi ručno i traje nekoliko dana. Kasnije planiram da opišem pitanje najbržeg sistema datoteka za takav slučaj upotrebe. Samo ću rezervisati da je XFS izabran iz nekoliko razloga.

Nakon testiranja nekoliko klaster tehnologija i sistema datoteka, po savjetu starijeg prijatelja, odlučili smo da koristimo isti rsync, ali u sprezi sa inotify. Nakon malo potrage na internetu za tako gotovim rješenjem, da ne bih ponovo izmišljao točak, naišao sam na csyncd, inosync i lsyncd. Već sam ga imao na Habréu, ali ovdje ne staje, tk. čuva listu fajlova u SQLite bazi podataka, što je malo verovatno da će moći da radi podnošljivo čak ni sa milion zapisa. Da, i dodatna veza s takvim volumenima je beskorisna. Ali pokazalo se da je lsyncd upravo ono što nam je trebalo.

4. Pokrećemo demona na svim čvorovima:

/etc/init.d/lsyncd start

Ako ste ostavili "nodaemon = true" u konfiguraciji, možete vidjeti šta se dešava.

Brzina prijenosa podataka dostiže 300 Mbit/s i to ima mali utjecaj na opterećenje servera (u usporedbi s istim GlusterFS, na primjer), a kašnjenje u ovom slučaju izglađuje vrhove. Mnogo toga još uvijek ovisi o korištenom FS-u. I ovdje sam morao napraviti malu studiju, sa brojevima i grafikonima, jer je situacija prilično specifična i rezultati postojećih objavljenih testova ne odražavaju ono što je potrebno u zadatku.

Šta se još razmatralo i zašto nije prikladno u ovom slučaju

Cijela studija bila je usmjerena na rad s Amazonom EC2, uzimajući u obzir njegova ograničenja i posebnosti, pa se dobiveni zaključci uglavnom odnose samo na njega.
  • DRBD - replikacija je na nivou bloka. U slučaju degradacije jednog nosača, oba stradaju. Ograničenje od 2 čvora. (Moguće je više, ali 3. i 4. mogu biti povezani samo kao slave.)
  • Ocfs2 - koristi se ili na vrhu DRBD-a (što je dobro na Habré-u), ili morate biti u mogućnosti da montirate jednu particiju sa nekoliko čvorova. Nije moguće na ec2.
  • Gfs2 je analog ocfs2. Nisam probao, jer po testovima je ovaj FS sporiji od ocfs2, inače mu je analog.
  • GlusterFS - ovdje je sve funkcioniralo gotovo odmah i kako treba! Jednostavan i logičan za administraciju. Možete napraviti klaster od do 255 čvorova sa proizvoljnom vrijednošću replike. Napravio sam particiju klastera od para servera i montirao je na njih, ali u drugom direktorijumu (to jest, serveri su istovremeno bili i klijenti). Nažalost, ovaj klaster se montira na klijenta preko FUSE-a, a brzina pisanja je bila ispod 3 MB/sec. I tako, utisci od korišćenja su veoma dobri.
  • Luster - da biste pokrenuli ovu stvar u krenel modu, morate zakrpiti kernel. Čudno je da postoji paket sa ovim zakrpama u Ubuntu spremištu, ali nisam našao zakrpe za njega ili barem za Debian. A sudeći po recenzijama, shvatio sam da je šamanizam pokrenuti ga u deb-sistemu.
  • Hadoop w / HDFS, Cloudera - nisam probao jer je pronađeno drugo rješenje (vidi dolje). Ali prvo što vam upada u oči je napisano na Javi, stoga će biti puno resursa za jelo, a skala nije kao na Facebooku ili Yahoou, samo 4 čvora do sada.

UPD: Ovo rješenje se pokazalo odličnim na testovima (nakon kojih je napisan članak), ali u borbenim uvjetima sve se pokazalo potpuno drugačije. Minimalna konfiguracija proizvodnje je 584 hiljade ugniježđenih direktorija. I lsyncd visi inotify "i dalje svaki imenik. Nemoguće je to učiniti za cijelo drvo odjednom. Memorije, 584 hiljade obaveštenja, pojede relativno malo, oko 200 MB (od 16 GB dostupnih), ali ovaj proces traje 22 minuta. U principu, nije strašno: samo ga pokrenite i zaboravite. Ali nakon toga, sa standardnom konfiguracijom, lsyncd pokreće sinhronizaciju svih fajlova, što je u našim uslovima bilo greška ili je trajalo danima. Općenito, nije opcija. 100% konzistentnost nije potrebna i početna sinhronizacija se može izostaviti. Ostalo je "ugasiti". Srećom, demon je napisan na takav način da možete promijeniti gotovo sve njegove funkcije direktno iz konfiguracije. Također, da bi se povećale performanse, default.rsync je zamijenjen default.rsyncssh, a natyunino kernel za inotify limite "a. To jest, gornja konfiguracija je pogodna za većinu zadataka, ali u našoj konkretnoj situaciji funkcionira sljedeće:

Postavke = (logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 5, -<== чтобы видеть что происходит без включения подробного лога } sync { default.rsyncssh, source = "/raid", host = "node02", targetdir = "/raid", rsyncOps = {"-ausS", "--temp-dir=/tmp"}, --<== описано выше delay = 3, --<== ставим по-меньше, чтобы очередь не забивать init = function(event) --<== перезагрузка функции инициализации. как она выглядела в оригинале можно посмотреть в документации или в исходниках log("Normal","Skipping startup synchronization...") --<== чтобы знать, что мы этот код вообще запускали и когда end } sync { default.rsyncssh, source = "/raid", host = "node03", targetdir = "/raid", rsyncOps = {"-ausS", "--temp-dir=/tmp"}, delay = 3, init = function(event) log("Normal","Skipping startup synchronization...") end }

Postavke kernela

Inotify ima tri parametra (pogledajte ls / proc / sys / fs / inotify /):
max_queued_events - maksimalni broj događaja u redu čekanja; default = 16384;
max_user_instances - koliko inotify instanci jedan korisnik može pokrenuti; default = 128;
max_user_watches - koliko fajlova jedan korisnik može pratiti; zadano = 8192.

Radne vrijednosti:
echo "fs.inotify.max_user_watches = 16777216 # fs.inotify.max_queued_events = 65536" >> /etc/sysctl.conf echo 16777216> / proc / sys / fs / inotify / inotify / max_sc / e6 s > / max_queued_events

Dakle, sve je funkcionisalo već u proizvodnji.

Hvala vam na pažnji!

vuče ceo tim 24. oktobar 2011. u 00:52

Rsync: Moćan uslužni program za brzo, fleksibilno daljinsko i lokalno kopiranje datoteka

  • Drvna soba *

Rsync je dizajniran da zamijeni rcp, drevni Unix program za daljinsko kopiranje. Zbog svoje moćne sinhronizacije i mogućnosti prijenosa datoteka, rsync se često koristi za kreiranje ogledala.
Koristeći pametan algoritam, rsync prenosi samo promjene u datotekama bez potrebe da upoređuje dvije datoteke da bi otkrio promjene. Osim toga, rsync se kompresuje u hodu, što vam omogućava da prenosite datoteke što je moguće efikasnije.
Pored gore opisanih dobrota, rsync također ima nekoliko korisnih sigurnosnih funkcija. Podržava ssh, preporučeni protokol za siguran prijenos podataka; prije obrade informacija, zapisuje ih u privremenu datoteku tako da se ništa ne dogodi originalu; konačno, podržava poseban način sigurnog otklanjanja grešaka naredbama.
Rsync je jednostavan za korištenje, ali ne klikni i igraj. To je moćan alat koji može biti vrlo koristan, ali budite oprezni jer može lako zabrljati stvari s njim.

Sintaksa uslužnih programa
Sintaksa za uslužni program je jednostavna i prilično svakodnevna.
rsync [opcije] izvor [sink]
Navodeći samo izvor, vidjet ćemo listu datoteka bez operacije kopiranja.

Opcije i primjeri
Radi lakšeg razumijevanja, prvo citiram operacije sinhronizacije lokalno.
Brz način za sinhronizaciju dva direktorija je korištenje opcije -a:
rsync -a foobar_src / foobar_dst /
U tom slučaju, fajlovi i direktoriji iz izvora će se kopirati u prijemnik, dok ako su tamo postojali fajlovi, odgovarajuća imena će biti prepisana, a ostali se neće dirati.

Opcija -a postavlja način arhiviranja uslužnog programa i ekvivalentan je skupu opcija:
-r, --recursive - rekurzivni način rada;
-l, --linkovi - ponovo kreirati simbolične veze, to znači da će se i simbolički linkovi omotati;
-p, --perms - prenos prava;
-t, --times - prenijeti vrijeme modifikacije i ažurirati ga na udaljenom sistemu. Ovaj ključ mora biti postavljen za tačnu sinhronizaciju;
-g, --group - postaviti grupu ciljne datoteke na istu kao i izvorna;
-o, --owner - postaviti vlasnika konačnog fajla na isti kao i original;
-D, - isto kao --devices --specials - postavite tip fajla uređaja i fajla posebnog tipa na isti kao originalni.
Kao rezultat, dobijamo kopiju izvornog direktorija. Uzgred, ovo se može koristiti prilikom prebacivanja OS-a na drugi hard disk, podešavanja /etc/fstab-a, instaliranja/ponovne instalacije gruba na novi šraf - dobijamo sistem koji radi, ali to je druga tema.

Za prikaz informacija o radu uslužnog programa postoji opcija - v, --verbose... Što više opcija -v, informativniji će biti izlaz uslužnog programa. Maksimalni informativni sadržaj postiže se sa četiri opcije -v, --verbose.

Ako imamo ažurne informacije u izvornom direktoriju, onda kako ne biste zatrpali prijemnik informacijama koje su obrisane ili premještene u izvoru tijekom rada, trebate izbrisati stare datoteke i direktorije. Da biste to učinili, postoji nekoliko opcija za brisanje, od kojih svaka nudi vlastiti algoritam za brisanje. Već ih je šest!
--del - skraćenica za --delete-during;
--delete - samo izbrišite vanjske fajlove iz prijemnika;
--delete-before - prijemnik briše prije prijenosa;
--delete-during - prijemnik briše tokom prenosa, ali ne prije;
--delete-delay - odloženo brisanje / pronalaženje fajlova za brisanje tokom prenosa, ali brisanje nakon prenosa;
--delete-after - primalac briše nakon prijenosa, ali ne prije njega;
--delete-excluded - također briše isključene datoteke u prijemniku, za to je postavljen šablon (--exclude = PATTERN).

Pretpostavimo da imamo novije datoteke na prijemniku i ne želimo da ih prebrišu stari iz izvora, tada se za to koristi ključ -u, --ažuriranje.
-u, --update - preskače datoteke ako je datoteka novija na prijemniku.
Nemojte biti uznemireni ako su se datumi u imeniku promijenili. sami fajlovi nisu prepisani.

Ponekad se datoteke mogu oštetiti ili izmijeniti, ali su datum i veličina isti. Zatim možete koristiti opciju provjere kontrolne sume -c, --kontrolna suma.

Moj zadatak je bio da smislim kako da napravim rezervnu kopiju mojih kolekcija fotografija, muzike, univerzitetskog rada i rada. U isto vrijeme, informacije u izvoru su uvijek ažurne, a ono što se briše je smeće. Primjer za rješavanje mog problema:
rsync -auvv --delete-za vrijeme foobar_src / foobar_dst /
Ovo će ažurirati moj prijemnik ako je već bio ispunjen nečim - očistit će ono što nije u izvoru, ali neće utjecati na datoteke koje su novije, prikazati statistiku i status za svaki fajl.

Rad na daljinu
Osim toga, njegova sposobnost rada preko ssh-a će biti vrlo korisna. Ovo obezbeđuje enkripciju kanala, što je veoma važno ako sinhronizujete dva servera na Internetu. Kako bi smanjio promet, rsync također može komprimirati podatke dok putuju mrežom.
Potrebne su sljedeće opcije:
-e - postaviti udaljenu ljusku za korištenje;
-z - komprimirati prenesene podatke, ili postaviti:
-compress-level = 9 - kompresija sa podešavanjem nivoa kompresije.

Primjer kopiranja sa udaljenog hosta koristeći ssh protokol:
rsync -avv --delete-during -compress-level = 9 -e "ssh -p daljinski_ssh_port" [email protected]: / dir / to / foobar_src foobar_dst /
U ovom slučaju, na izvornoj strani, morate imati instaliran uslužni program rsync.

Nadam se da će ove informacije biti korisne mnogima. Više informacija o uslužnom programu rsync možete pronaći u njegovoj vlastitoj dokumentaciji, budući da je dobro opisan.
Tamo možete pronaći i informacije o tome kako postaviti rSync demon za direktnu vezu bez korištenja udaljene ssh shell-a, kao i opis mnogih drugih opcija za svaki ukus i boju.

Oznake: rsync, kopija, sigurnosna kopija datoteka, sinhronizacija datoteka

Prekrasan i vrlo popularan rsync program ima mnogo praktičnih opcija i izvanrednih sposobnosti, ali ih nije lako pronaći. Pa, osim ako niste spremni pročitati cijeli priručnik od korice do korice.

Pokušat ću vam uštedjeti vrijeme čitajući priručnik i ispričati vam najvažnije i najkorisnije stvari. Jednostavnim rečima, kako jeste.

Zašto je potreban rsync?

Zašto koristiti rsync ako imate uobičajene cp i scp, pitate se.

    U jednom dijelu, rsync je praktičniji i bolji od pomenutih analoga jer vam daje mogućnost da vidite sve što će raditi prilikom kopiranja datoteka prije same operacije kopiranja.

    U drugom dijelu - rsync po defaultu kopira samo nove i izmijenjene fajlove, pa čak i ne samo fajlove - već njihove zasebne dijelove, čineći to surovo i efikasno.

Ova dva razloga su dovoljna da zaboravite na cp u svakodnevnom radu, zamjenjujući ovu komandu i njene analoge za rsync.

Princip primjene

Ako govorimo o jednostavnom kopiranju datoteka, prvo što treba učiniti je uvijek napraviti probni rad (prekidač -n) u opširnom načinu rada (-v):

rsync -avn izvorni primjer.com:odredište

U ovom režimu, rsync će prikazati listu datoteka koje će kopirati. Kopirat će se samo novi i promijenjeni fajlovi. Možete provjeriti da li se kopira sam direktorij, a ne sadržaj, ili da je to sadržaj koji se kopira.

Nakon što ste se uvjerili da je kopirano upravo ono što želite, možete započeti pravo kopiranje:

rsync -av izvorni primjer.com:odredište

U ovoj naredbi, prekidač -a podrazumijeva rekurzivno kopiranje svih datoteka i direktorija uključujući njihove atribute kao što su datum kreiranja i datum izmjene. Prekidač -v će vam dati detaljan izvještaj o radu dok se izvodi i kada se završi.

Pravila kopiranja direktorija

S jedne strane, pravila su vrlo jednostavna.

    Ako nema kose crte na kraju puta do imenovanog izvora, sam direktorij će biti kopiran.

    $ rsync -avn put / do / izvor example.com: odredište slanje inkrementalne liste datoteka izvor / izvor / primjer.html ...

    Ako postoji kosa crta ili izvor pokazuje na direktorij bez imena, tada će se kopirati sadržaj direktorija.

    $ rsync -avn putanja / do / izvora / example.com: odredište ^^^ slanje inkrementalne liste datoteka example.html ... # Ekvivalentno ovoj naredbi: $ cd putanja / do / izvora; rsync -avn. primjer.com:odredište

S druge strane, sasvim je moguće zaboraviti u žaru šta i kako, nakon što ste kopirali sadržaj direktorija umjesto samog direktorija, zadobili dosta problema s brisanjem nepotrebnih datoteka koje su se pojavile niotkuda s datumima u prošlost (ključ -a, sjećate se?).

Stoga je najbolje uvijek slijediti uobičajeni scenarij uz preliminarnu provjeru operacije.

Nekoliko korisnih ključeva

Prvo, hajde da razgovaramo o opcijama koje će vam biti sjajno da znate bez mamza i varalica.

    Prekidač -P uključuje nekoliko opcija odjednom. Sa ovim ključem, rsync će pokazati napredak kopiranja pojedinačnih datoteka i nastaviti kopiranje ako je prekinuto. Ova opcija je posebno korisna kada kopirate velike datoteke. Prekidač -P mora biti specificiran svaki put, inače će rsync izbrisati datoteke koje nisu u potpunosti preuzete.

    Ako kopirate datoteke sa veoma zauzetog ili slabog servera, možete eliminisati trošenje procesorskih resursa na izračunavanje promenjenih delova datoteka tako što ćete ih u potpunosti kopirati. Ovo zahtijeva prekidač -W.

    Ako želite da znate koliko rsync misli da je ostalo da radi, potreban vam je prekidač --info = progress2. Ako kopirate cijeli sistem datoteka, tada će vas ovaj ključ, koji se koristi sam, razočarati: informacije o ukupnom volumenu će se stalno ažurirati. To je zato što rsync ne pokušava pročitati cijeli sistem datoteka prije nego što počne kopirati, već obavlja oba zadatka odjednom.

    Ali ne očajavajte! Ako želite da znate koliko je tačno posla ostalo od samog početka, možete onemogućiti sekvencijalno skeniranje pomoću --no-inc-rekurzivnog prekidača ili, ukratko, --no-i-r.

    $ rsync -ah --partial --info = napredak2 --no-i-r izvor example.com:odredište 623.38M 0% 82.23MB / s 0:11:10

    Gore navedeni ključevi dostupni su od verzije 3.1.0, odnosno već rade u stabilnom Debianu.

    Ako ne trebate samo kopirati datoteke, već potpuno sinhronizirati sadržaj direktorija brisanjem nepotrebnih datoteka, a iz nekog razloga ne možete sinkronizirati datoteke koristeći Git, onda će vam prekidač --delete (ili njegov ekvivalent --del) dobro doći.

    Sa ovim prekidačem rsync će ukloniti nepotrebne datoteke iz odredišnog direktorija.

    $ rsync -avn --izbriši izvor example.com:odredište šalje inkrementalnu listu datoteka brisanje izvora / bad.txt izvora / izvora / test.txt

    Prekidač -n u gornjoj naredbi je namjerno ostavljen.

Recimo koju riječ o kompresiji

Suprotno popularnom zabludi, korištenje kompresije unutar rsync-a (-z prekidač) je više štete nego koristi. Činjenica je da OpenSSH, koji se svuda koristi od kraja 2005. godine, podrazumevano koristi kompresiju prenetih podataka. Razumijete da kompresija već komprimiranih podataka koristi samo procesorske resurse bez smanjenja količine prenesenih podataka.

Možete provjeriti da se kompresija već koristi prilikom povezivanja na vaš server:

$ ssh -v [email protected] false 2> & 1 | grep kompresija debug1: Omogućavanje kompresije na nivou 6.

Ako ova komanda neće se prikazati, između ostalog, takav red o omogućavanju kompresije kao gore, onda možda trebali biste koristiti kompresiju. Vrijedi provjeriti je li kompresija dobra. Ovo se posebno odnosi na uređaje male potrošnje sa brzim konekcijama: za vaš NAS može biti brže da kopira nešto preko gigabitne veze bez kompresije nego da pokušava da prestigne gigabitnu mrežu sa procesorom male snage.

Srećom, rsync je dovoljno pametan da ne koristi kompresiju ako kopirate datoteke lokalno, iz direktorija na disk, itd.

Djelomično kopiranje

Vjerovatno će vam trebati rsync da biste preskočili neke datoteke prilikom kopiranja jednog dana.

U najjednostavnijem slučaju, želite da rsync ne kopira datoteke iz različitih sistema kontrole verzija, uključujući direktorije kao što su .svn i.git. Za ovaj zadatak ne treba vam ništa osim prekidača -C (ili --cvs-exclude u punom obliku). Ovo će zanemariti najpopularnije VCS datoteke kao da ih nema. Ne zaboravite koristiti -n kada ga prvi put pokrenete.

rsync -nC primjer.com:izvorno odredište

Može se desiti da greškom kopirate gomilu takvih fajlova sa VCS-a. U ovom slučaju, da biste dobili čistu kopiju, trebat će vam prekidač --delete-excluded, pomoću kojeg će sve izuzete datoteke biti izbrisane.

rsync -nC --delete-excluded example.com:izvorno odredište

Isključujemo preko .rsync-filtera

Ako su vam potrebna fleksibilnija pravila, što je posebno važno ako se kopiranje obavlja redovito, onda je bolje ne gubiti vrijeme na sitnice i sve izuzetke nacrtati u datoteci rsync-filter.

$ cat source / .rsync-filter - test.bin - * .tmp - /.cache - / example / - / ** / Trash / - /.mozilla/firefox/*/Cache/ + Projekti / ** / Trash /

Da biste isključili nešto sa liste za prijenos, dodajte red s pravilom (- ili + na početku reda) ovoj datoteci.

    Ako trebate isključiti određenu datoteku, gdje god da se nalazi u bilo kojem direktoriju ispod hijerarhije, onda jednostavno naznačimo naziv datoteke.

    # nijedan test.bin fajl neće biti kopiran - test.bin # svi .tmp fajlovi će biti preskočeni - * .tmp

    Ako trebate isključiti datoteku ili direktorij relativno rsync-filter direktorij, tada označavamo kosom crtom na početku:

    # direktorij ili .cache fajl neće biti kopiran, ali foo / .cache i foo / bar / .cache će biti kopirani - /.cache # primjer direktorija neće biti kopiran, ali će biti kopiran primjer fajl - / primjer /

    U pravilima, zvjezdica odgovara bilo kojem znaku osim kose crte, a dvije zvjezdice odgovaraju bilo kojem znaku:

    # direktorij će biti preskočen .local / share / Trash / i Documents / example / Trash / - / ** / Trash / # direktorij neće biti preskočen .mozilla / firefox / abcd.profile / ext / Cache / # već direktorij će biti preskočen .mozilla /firefox/abcd.profile/Cache/ - /.mozilla/firefox/*/Cache/

    Konačno, ako želite da se neki fajlovi kopiraju, uprkos prethodno postavljenim pravilima, onda ih možete označiti pravilom + na početku reda.

    # direktorij Projekti / Primjer / raspored / Otpad / će se kopirati + Projekti / ** / Otpad /

Rsync-filter datoteke rsync može pretraživati ​​cijelu strukturu direktorija kada se pokrene sa -F opcijom.

Ako želite da se ove datoteke same po sebi ne kopiraju, onda morate navesti ovaj ključ dva puta ovako:

$ rsync -avFFn izvorni primjer.com:destinacija šalje inkrementalnu listu datoteka izvor / izvor / primjer.html izvor / tmp / izvor / tmp / foo.bin poslano 174 bajta primljeno 30 bajtova 408,00 bajtova / sek ukupna veličina je 18 400 ubrzanje je 90,20 ( SUHO TRCANJE)

Kao što vidite, dodatni fajlovi nisu kopirani:

$ ls izvor / .rsync-filter izvor / foo.tmp izvor / foo.tmp izvor / .rsync-filter $ cat izvor / .rsync-filter - * .tmp

Ograničavanje rsync preko ssh-a

Ponekad morate omogućiti rsync preko ssh-a, daljinski i bez lozinke, definiran samo za direktorij i host, isključujući kopiranje bilo čega na druga mjesta ili sa drugih mjesta.

Na primjer, želite biti u mogućnosti kopirati datoteke na server backup.example.com samo sa host server.example.com, samo i samo u backup-example direktorij, i samo sa ovim opcijama:

$ rsync -aW --del izvor / backup.example.com:destination/backup-example/

Tada prvo morate dobiti naredbu koju rsync pokreće kada pozivate ssh na udaljenom hostu:

$ rsync -e "ssh -t -v" -aW --del izvor / backup.example.com:destination/backup-example/ 2> & 1 | grep naredba debug1: Slanje naredbe: rsync --server -lWogDtpre.iLsfxC --delete-during. odredište / rezervni primjer /

U skladu s tim, u ~ / .ssh / authorized_keys na example.com, dodajte pokretanje ove naredbe prema zadanim postavkama za poznati ssh ključ prilikom povezivanja:

from = "server.example.com", command = "rsync --server -lWogDtpre.iLsfxC --delete-during. odredište / backup-example /", no-pty, no-port-forwarding ssh-rsa AAAA .. # sljedeći je vaš ključ

Stoga, čak i ako su neke druge opcije specificirane prilikom pokretanja rsync-a, ciljni server će i dalje izvršiti naredbu rsync koja odgovara originalnim opcijama i postavkama koje ste naveli.

Ako želite da vaša rezervna kopija ne bude prepisana ili izbrisana na odredišnom serveru, onda opciju --del treba zamijeniti sa --ignore-existing.

Vremeplov

Oni macOS i OS X korisnici koji naprave rezervnu kopiju sigurno će cijeniti rad Time Machinea. Ovaj program omogućava bukvalno u dva klika povratak na prethodnu verziju bilo koje datoteke. Uz svu svoju ljepotu, Time Machine ne radi ništa što mi ne možemo učiniti sa rsync-om.

#! / bin / bash set -o skup imenica -o errexit cd $ (dirname "$ 0") datum = $ (datum --iso-8601 = sekunde) test -L najnoviji || ln -s "$ datum" najnoviji rsync --delete-excluded --prune-empty-dirs --archive -F --link-dest = ../latest " [email protected]"" ./ $ datum "rm najnoviji ln -s" $ datum "najnoviji

Skriptu treba staviti u korijen diska ili direktorija gdje treba napraviti sigurnosne kopije.

Pokreni sa samo jednim argumentom: izvorni direktorij. Na primjer, ovako.

/ mnt / backups / backup / home

Nakon nekoliko pokretanja, dobijamo sljedeću strukturu direktorija:

2017-02-08T22: 05: 04 + 09: 00 2017-02-08T22: 10: 05 + 09: 00 2017-02-08T22: 15: 05 + 09: 00 2017 T22: 06:02 : 00 2017-02-08T22: 25: 05 + 09: 00 2017-02-08T22: 30: 04 + 09: 00 najkasnije -> 2017-02-08T22: 30: 04 + 09: 0

U ovom slučaju, najnovije označava najnoviju sigurnosnu kopiju.

Svaki od direktorija sadrži snimak onoga što je bilo u originalnom direktoriju u vrijeme kopiranja. Možda mislite da je prostor na disku zauzet proporcionalno broju kopija, ali to nije slučaj.

$ du -sh / mnt / sigurnosne kopije 4.5M / mnt / sigurnosne kopije $ du -sh / home 3.8M / home

Cijeli skup kopija zauzima tek nešto više prostora od originalnog direktorija. Mjesto ide na promijenjene fajlove.

Ako se ništa nije promijenilo, prostor se i dalje gubi na kreiranje direktorija koji se ne mogu pohraniti kao čvrste veze.

$ du -hs 2017-02-08T22: 20: 06 + 09: 00 2017-02-08T22: 25: 05 + 09: 00 2017-02-08T22: 30: 04 + 09: 08 M 02-31.02. : 20: 06 + 09: 00 136K 2017-02-08T22: 25: 05 + 09: 00 136K 2017-02-08T22: 30: 04 + 09: 00

Ove značajne uštede su omogućene gore navedenim tvrdim vezama koje rsync čini za datoteke koje se nisu promijenile od posljednje kopije.

$ stat -c "% i" 2017-02-08 * / example.txt | uniq 31819810

Identični, nepromijenjeni fajlovi će imati isti inode.

Naravno, u smislu moguće uštede prostora na disku, ovaj način sigurnosnog kopiranja je daleko od posebnih programa kao npr

Rsync je uslužni program za sinhronizaciju datoteka i pravljenje rezervnih kopija. Radi na mnogim * nix sistemima).

Ograničenje rsync-a je da se podaci ne mogu kopirati između 2 udaljena sistema. U ovom slučaju, morali biste kopirati podatke s jednog udaljenog sistema, a zatim ih prenijeti na drugi.

U aptosidu imate različite opcije za pokretanje procesa sinhronizacije. Možete pokrenuti rsync s naredbom u terminalu ili instalirati dodatne pakete s Debian Sida:

Da instalirate deb paket:
apt-get install luckybackup
Upute za korištenje u terminalu

U sledećem odeljku predstavljamo rsync, njegove karakteristike i neke primere kako se rsync može koristiti sa prilagođenom skriptom za pravljenje rezervnih kopija.

rsync je brzi program za pravljenje rezervnih kopija direktorija i datoteka. rsync izračunava izmijenjene datoteke i direktorije koristeći atribute kao što su vrijednost ili datum, što može učiniti sinhronizaciju vrlo brzom. Podaci se arhiviraju prije kopiranja i raspakuju na odredištu.

rsync može kopirati podatke:
* sa lokalnog sistema na lokalni sistem,
* sa lokalnog sistema na udaljeni (udaljeni) sistem,
* sa udaljenog sistema na lokalni sistem.

U ovom slučaju, rsync koristi ssh klijent (uključen u osnovnu instalaciju) ili rsync-daemon, koji radi na izvornom i na ciljnom sistemu. rsync stranice upravljanja kažu da ako sistemi mogu komunicirati preko ssh-a, ssh se također može koristiti za rsync.

Ograničenje kod rsync-a je da se podaci ne mogu kopirati između 2 udaljena sistema. U ovom slučaju, morat ćete kopirati podatke s jednog udaljenog sistema, a zatim prebaciti sa rsync na drugi.

Da biste ovo razjasnili, razmotrite sljedeći primjer sa 3 računara:

Neo - lokalni sistem morpheus - udaljeni sistem trinity - udaljeni sistem

Svaki korisnik zna ime drugog korisnika, a rsync radi isključivo na neo, lokalnom sistemu:

Korisničko ime na neo je cuddles, korisničko ime na morpheusu je tartie, korisničko ime na trinityju je taylar.

Cilj je sinhronizirati direktorije / home / $ user / Files:

Neo: / home / cuddles / data sa morpheus i trinity, morpheus: / home / tartie / data sa neo i trinity, trinity: / home / taylar / data sa neo i morpheus.

Sada se javlja problem što se rsync ne može primijeniti između 2 udaljena računara:

Neo-> morpheus - od lokalnog do udaljenog, ispašće neo-> trinity - od lokalnog do udaljenog, ispašće morpheus-> neo - od udaljenog do lokalnog, ispašće trinity-> neo - od udaljenog do lokalno, ispostaviće se morpheus-> trojstvo - nemoguće , od udaljenog do udaljenog trojstva-> morpheus - nije moguće, od udaljenog do udaljenog

Da bismo zaobišli ovo ograničenje, postupamo na sljedeći način:

Morpheus -> trojstvo - postaje: morpheus -> neo i neo -> trojstvo trojstvo -> morpheus - postaje: trojstvo -> neo i neo -> morpheus

Ovaj dodatni korak u konačnici ništa ne mijenja. Međutim, ukazuje da:

Ovo ograničenje s rsync treba uzeti u obzir prilikom planiranja procesa sigurnosne kopije.

Korištenje imena hosta sa imenima hosta u rsync.

Korištenje imena hosta neo, morpheus i trinity umjesto IP adresa može učiniti proces kopiranja jasnijim i lakšim za razumijevanje.

Da biste to učinili, morate urediti / etc / hosts i umetnuti imena hostova i njihove pridružene IP adrese. Tako će u našem primjeru datoteka / etc / hosts izgledati ovako:

192.168.1.15 neo 192.168.1.16 morpheus 192.168.1.17 trinity

Prvi red prevodi IP adresu 192.168.1.15 u "neo", drugi 192.168.1.16 u "morpheus", a treći 192.168.1.17 u "trinity". Nakon snimanja, dodatno ime hosta se može koristiti umjesto IP adrese. Ovo je posebno zgodno ako se distribuirane IP adrese mijenjaju, na primjer, za "neo" sa 192.168.1.15 na 192.168.1.25 To olakšava rad sa skriptama, jer se one ne bi trebale mijenjati u slučaju promjene IP adresa , već samo hostovi / etc / fajla.

Dva načina za korištenje rsync.

Prvi način su podaci "Guraj (guraj)" na ciljnu mašinu; drugi su podaci "Povuci (povuci)" iz izvora. Svaka metoda ima prednosti i nedostatke, o kojima će biti riječi u nastavku. Naš primjer koristi lokalne i udaljene sisteme kako bi se jasnije objasnila terminologija.

"Gurnuti"- lokalni sistem nosi izvorne direktorije i datoteke, cilj je udaljeni sistem. Komanda rsync se izvodi na lokalnom sistemu i gura podatke u ciljni sistem.

Prednosti:
* Više od jednog izvornog sistema može biti sigurnosno kopirano do cilja. * Proces izrade rezervne kopije na više računara može se odvijati istovremeno. * Ako sistem brže završi proces sigurnosne kopije, dozvoljava korištenje resursa za druge poslove.

Nedostaci:
* Ako se skripta koristi sa sinhronizacijom preko cron-a, tada se crontabs moraju postaviti na svakom sistemu. Prilikom modifikacije skripte potrebno je izvršiti odgovarajuće izmjene na svakom sistemu; kada se raspored promijeni, svaki crontab na svakom računaru mora se promijeniti. Kao rezultat toga, administrativna usluga postaje veoma glomazna i zbunjujuća. * Procesom sigurnosne kopije nije moguće provjeriti da li je ciljna particija montirana od strane ciljnog sistema. Ako nije montiran, sigurnosna kopija se neće izvršiti.

"vuci"- udaljeni sistem nosi izvorne direktorije i datoteke, cilj je lokalni sistem. Komanda rsync se izvodi na lokalnom sistemu i izvlači podatke iz izvornog sistema.

Prednosti:
* Sistem će postati server koji upravlja svim procesima pravljenja rezervnih kopija svih ostalih sistema. Backup procesi su centralizirani.
* Kada koristite skriptu, ona mora biti na samo jednom sistemu, što pojednostavljuje sve modifikacije. Samo jedan crontab bi se trebao promijeniti po promjeni rasporeda.
* Skripta može provjeriti da li je ciljna particija montirana i povremeno će je montirati.

Sintaksa rsync (dio od "man rsync"):
rsync ... SRC ... DEST rsync ... SRC ... HOST: DEST rsync ... SRC ... HOST :: DEST rsync ... SRC ... rsync: // HOST [: PORT] / DEST rsync ... SRC rsync ... HOST: SRC rsync ... HOST :: SRC rsync ... rsync: // HOST [: PORT] / SRC
Radni primjeri rsync naredbi:

Objašnjenje dijelova ove naredbe:

Izvor: (/ path / file) morpheus: / home / tartie, cilj je: / media / sda7 / SysBackups / morpheus / home

Direktorij / home / tartie (uključujući poddirektorije) će biti spremljen u / media / sda7 / SysBackups / morpheus / home, koji će izgledati ovako nakon rsync:

/ media / sda7 / SysBackups / morpheus / home / tartie

Imajte na umu da se samo / tartie direktorij kopira na stazu specificiranu u rsync / media / sda7 / SysBackups / morpheus / home. "Izvor" samo bira odakle dolaze podaci, a "Target" govori rsync-u gdje treba kopirati podatke iz "izvora", on ih više ne percipira kao / home / tartie, već jednostavno / tartie, što bi trebao pošalji na / media / sda7 / SysBackups / morpheus / home. Drugi primjer:

Rsync [...] / home / user / data / files / media / sda7 / SysBackups / neo

Ovdje će se izvorni direktorij / datoteke i svi direktoriji i datoteke u njemu kopirati u ciljnu mapu / media / sda7 / SysBackups / neo / - a ne u / media / sda7 / SysBackups / neo / home / user / data / files .

Ovo je nešto čega treba biti svjestan kada koristite rsync sigurnosne kopije.

Objašnjenje opts_y (chornovy prevod sa engleskog "man rsync"):
-a za način arhiviranja. Manpage kaže o ovome: „Jednostavno rečeno, ovaj metod je kreiranje rekurzivnih rezervnih kopija i kopiranje gotovo svih atributa. Samo tvrde veze se ne čuvaju zbog složenosti procesa. Opcija -a odgovara: -rlptgoD, što znači: -r = rekursiv - kopirajte poddirektorije i datoteke u njih sa njihove "izvorne lokacije". -l = Veze - simboličke veze se vraćaju na odredište. -p = prava - prava su identična sa njima na originalnoj lokaciji. -t = vremenska oznaka - vremenska oznaka na originalnoj lokaciji je identična s njom. -q = tiho - minimalan izlaz informacija. Više informacija se dobija pomoću opcije -v iza opcije -a. Izvršenje bez ikakvog odgovora će se postići bez postavljanja -v opcije. -o = vlasnik - Ako se rsync pokrene kao root, vlasnici originalnih datoteka se čuvaju na odgovarajući način. -D = odgovara obje ove naredbe: --devices --specials --devices = datoteke znakova i blok uređaja će se kopirati na udaljeni sistem za kasniji oporavak. Imajte na umu da bez --super opcije, --devices opcija ne radi. --specials = rsync kopira posebne fajlove kao što su socket i fifos. --g: grupe se spremaju prema originalnim datotekama. -E: Atribut "doable" je zadržan. -v: za detaljan izlaz. Ako detalji nisu važni, ova opcija se može izostaviti. Međutim, ako želite da vidite šta se dešava, ova opcija je veoma korisna. -z: Kopirani podaci se arhiviraju, što ubrzava proces kopiranja, jer će količina premještenih podataka biti manja. --delete-after = Ciljni direktoriji ili ciljne datoteke koje više nisu u izvoru se brišu nakon premještanja, a ne prije. U slučaju problema ili katastrofe, koristit će se "nakon", "izbriši" sprječava korištenje nepotrebnih datoteka i direktorija na odredištu. - exclude = označava datoteke ili direktorije koje treba isključiti iz procesa kopiranja. U primjeru, -- exclude = “* ~ "Isključio bi SVE datoteke koje završavaju sa" ~ "iz procesa sigurnosne kopije. Sa jednom opcijom --exclude, može se proslijediti samo jedan argument, sa više argumenata za isključenje, mora se koristiti više opcija --exclude.
Dodatne naredbe:
-c - Vrši dalje provjere poređenja, što oduzima mnogo vremena. Pošto rsync već radi benchmarking, ova komanda nije integrisana u --a zbog svoje redundantnosti i uštede vremena. Ova opcija obično nije potrebna. --super - ciljni sistem će pokušati da izvrši radnje superkorisnika (root) (pogledajte man stranicu) --dry-run - probno pokretanje: samo pokazuje šta treba kopirati. Nijedan fajl se ne kopira.

I na kraju, opcije za određivanje izvornog i ciljnog direktorija.

Primjer naredbi:
rsync -agEvz --delete-after --exclude = ”* ~” morpheus: / home / tartie / media / sda7 / SysBackups / morpheus / home

Ova naredba kopira sve direktorije i datoteke ispod iz / home / tartie u "morpheus" sistem i postavlja ih u ovaj direktorij / media / sda7 / SysBackups / morpheus / home. Struktura tartie direktorija je sačuvana.

Rsync -agEvz --delete-after --exclude = ”* ~” / home / tartie neo: / media / sda7 / SysBackups / morpheus / home

Ovo je suprotna naredba od prvog primjera. On "premešta" / home / tartie direktorij i njegov sadržaj u specificirani direktorij "neo" sistema - imajte na umu da se sistem smatra "udaljenim" ako stavite dvotočku ispred putanje.

Rsync -agEvz --delete-after --exclude = ”* ~” / home / cuddles / media / sda7 / SysBackups / neo / home

Ovo je proces izrade sigurnosne kopije lokalnog računara. Ovdje imajte na umu da nije postavljeno dvotočka. Lokalni / home / cuddles direktorij se kopira u / media / sda7 / SysBackups / neo / home na istom lokalnom računalu.

rsync s mnogo --exclude opcija:
rsync -agEvz --delete-after --exclude = ”* ~” --exclude = ”*. c” --exclude = ”*. o” "/ *" / media / sda7 / SysBackups / neo

Ova naredba kopira sve iz korijenskog direktorija lokalnog sistema (sve direktorije i datoteke) u / media / sda7 / SysBackups / neo - iz ovoga su isključene sve datoteke i direktoriji koji završavaju na "~", ".c" ili ".o" ...

Zamjena imena hosta IP adresom:

Prva komanda se instalira metodom imena hosta, a druga metodom IP adresa. Obje naredbe su identične u svom izvršavanju:

Rsync -agEvz --delete-after --exclude = ”* ~” morpheus: / home / tartie / media / sda7 / SysBackups / morpheus / home rsync -agEvz --delete-after --exclude = ”* ~” 192.168. 1.16: / home / tartie / media / sda7 / SysBackups / morpheus / home

Metoda imena hosta se ne bi trebala koristiti, ali po našem mišljenju ona pojednostavljuje rsync sigurnosne kopije preko mreža.

class = "highlight-2"> Nemoguća naredba:

rsync -agEvz --delete-after --exclude = ”* ~” morpheus: / home / tartie trinity: / home

Kao što je već pomenuto, ograničenje rsync je to što se ova komanda ne može kopirati između 2 udaljena računara. Želimo vam još jednom skrenuti pažnju na ovo.

Nadamo se da će vam ovaj mali vodič olakšati početak korištenja rsync-a, to je vrlo uspješan program za pravljenje rezervnih kopija.

Našao sam skriptu za sinhronizaciju direktorija kroz program rsync... Mislio sam da je sinhronizacija, taj backup ista stvar, samo se drugačije zovu
Program rsync je uključen u sve distribucije i dovoljno je popularan da ga možete lako pronaći u svakoj distribuciji.
Idemo direktno na primjere rsync sinhronizacije.
Želimo imati kopiju direktorija / home / user / foto, a duplikat ćemo pohraniti u / mnt / backup. Izvršite (ne zaboravite provjeriti dozvole foldera gdje ga kopiramo, ili izvršite kao root-sudo )

Rsync -av / home / user / foto / mnt / backup

  • -prenos arhive (zajedno sa folderima, podfolderima, fajlovima, skrivenim fajlovima, itd.)
  • -v prikazati podatke o izvršenju naredbe

To je tako jednostavno! Naše fotografije su već na dva mjesta. Naravno da nisu arhivirani i zauzimaju toliko prostora kao prvi folder, ali morate nešto žrtvovati. I moraćete da žrtvujete svoj prostor na disku. Inače, za fotografije je arhiviranje neefikasno, omjer kompresije je prenizak. Naravno, morate kopirati na drugi fizički disk! Jer ako jedan tvrdi disk umre, onda će i sve ostale particije na ovom disku sa svim rezervnim kopijama umrijeti.
Da nastavimo, nesto sam ometen..
Postoji mala kvaka u gornjoj naredbi. Na primjer, preimenovali ste ili sortirali fotografije u druge mape i promijenili nazive starih mapa ili ih potpuno izbrisali. Šta će se desiti? Skripta će pošteno prenijeti nove datoteke i direktorije koji su se pojavili, a stari koje ste izbrisali u folderu / home / user / foto ostat će u backup folderu. U stvari, u direktorijumima koji se često menjaju, izvršavanje takve skripte će dovesti do gomile smeća u fascikli rezervne kopije. Da bi se to izbjeglo, naredba se mora izvršiti pomoću ključa --delete

Rsync -av --delete / home / user / foto / mnt / backup

I oba foldera će uvijek biti identična
Sada trebate odabrati svoje najvažnije direktorije i napisati jednostavnu listu naredbi za sigurnosnu kopiju u datoteci. Jednom mi je izgledalo ovako.

Rsync -av --delete / home / mik / mail / mnt / backup / home / mik / rsync -av --delete /home/mik/.mozilla / mnt / backup / home / mik / rsync -av --delete / home / mik / .claws-mail / mnt / backup / home / mik / rsync -av --delete / bin / mnt / backup / system rsync -av --delete / boot / mnt / backup / system rsync -av - izbrisati / dev / mnt / backup / system rsync -av --delete / etc / mnt / backup / system rsync -av --delete / lib / mnt / backup / system rsync -av --delete / netup / mnt / backup / system rsync -av --delete / opt / mnt / backup / system rsync -av --delete / root / mnt / backup / system rsync -av --delete / sbin / mnt / backup / system rsync -av --delete / var / mnt / backup / sistem

Posebno obraćam pažnju da ne napravim sigurnosnu kopiju svega. Ako, na primjer, odaberete cijeli svoj kućni direktorij za sigurnosnu kopiju, tada može postojati kolekcija vaših filmova, distribucija otvorenog koda itd. Sve ovo zauzima previše prostora, i po mom mišljenju, ne isplati se praviti rezervne kopije.
Vratimo se našem fajlu sa listom direktorijuma za rezervnu kopiju i učinimo ga izvršnim

Chmod + x ./file_name

Skripta se može napisati u crontab-u za svakodnevno izvršavanje, te u većini distribucija kao npr ubuntu ili debian samo ga stavite u /etc/cron.daily direktorij. Međutim, možda ćete i dalje morati da unesete izmene u datoteku / etc / crontab. Većina računara ne radi noću, pa promijenite /etc/cron.daily zadatke na vrijeme kada je vaš računar obično uključen.

A sada primjeri naredbi rsync koje samo trebate imati na umu. I tada nikad ne znaš sa kojim zadacima se možeš suočiti u budućnosti.

1 primjer.

Rsync -av --delete --exclude = "*. Avi" --exclude = "*. Mpg" / home / user / mnt / backup

Tim se sinhronizuje cjelina vaš kućni direktorij, ali ne kopira datoteke sa avi i mpg ekstenzijama. Ako vam ne treba nešto drugo, samo dodajte u nizu --exclude = "_ what_exclude_"

2 primjer.

Rsync -avz -e "ssh -l ssh_user -p5623" --delete / home / user / foto 192.168.0.1:"./temp "

Ali ovo je već komanda za sinhronizaciju između vašeg i udaljenog računara putem ssh veze.

  • -z dodatno komprimirati podatke
  • -e koristeći udaljenu školjku
  • ssh -l ssh_user -p5623- komanda za povezivanje sa udaljenim računarom. ssh_user korisnik, a -p5623 je ako je ssh port nestandardan, u primjeru 5623
  • 192.168.0.1:"./temp "- IP adresa računara (možete koristiti i ime). Također označavamo imenik u koji ćemo prenijeti podatke. Imajte na umu da je direktorij specificiran putem ./ , već krećemo od putanje matičnog direktorija ssh_user do kojeg dolazimo pri povezivanju preko ssh-a

Nakon unosa ove naredbe, moramo se prijaviti sa ssh_user lozinkom i tek tada će početi sinhronizacija direktorija. Isto tako, možete sinkronizirati udaljeni i lokalni direktorij. Dovoljno je samo zamijeniti foldere odakle vršimo sinhronizaciju i gdje.
Ako želite automatizirati proces i ne unositi lozinku svaki put, pročitajte moj članak

Top srodni članci