17Aug

Non-Beginners Guide til Synkronisering af data med Rsync

Rsync-protokollen kan være ret nem at bruge til almindelige sikkerhedskopierings- / synkroniseringsjob, men nogle af de mere avancerede funktioner kan overraske dig. I denne artikel vil vi vise, hvorvidt de største datahødere og backup-entusiaster kan bruge rsync som en enkelt løsning til alle deres data redundansbehov.

Advarsel: Avanceret Geeks Kun

Hvis du sidder der og tænker "Hvad er dårligt, er rsync?" Eller "Jeg bruger kun rsync til virkelig enkle opgaver", kan du se vores tidligere artikel om, hvordan du bruger rsync til backupDine data på Linux, som giver en introduktion til rsync, guider dig gennem installationen og viser sine mere grundlæggende funktioner. Når du har en fast forståelse af, hvordan du bruger rsync( ærligt, det er ikke så komplekst) og er komfortabel med en Linux-terminal, er du klar til at gå videre til denne avancerede vejledning.

Running rsync på Windows

Lad os først få vores Windows-læsere på samme side som vores Linux gurus. Selv om rsync er bygget til at køre på Unix-lignende systemer, er der ingen grund til, at du ikke bør kunne bruge det lige så nemt på Windows. Cygwin producerer et vidunderligt Linux API, som vi kan bruge til at køre rsync, så gå over til deres hjemmeside og hente 32-bit eller 64-bit version afhængigt af din computer.

Installation er ligetil;Du kan beholde alle indstillinger til deres standardværdier, indtil du kommer til skærmbilledet "Vælg pakker".

Nu skal du gøre de samme trin for Vim og SSH, men pakkerne vil se lidt anderledes ud, når du vælger dem, så her er nogle screenshots:

Installation af Vim:

Installation af SSH:

Når du harvælg de tre pakker, fortsæt med at klikke på næste, indtil du er færdig med installationen. Derefter kan du åbne Cygwin ved at klikke på ikonet, som installationsprogrammet er placeret på dit skrivebord.

rsync Kommandoer: Enkel til avanceret

Nu da Windows-brugere er på samme side, lad os se på en enkel rsync-kommando og vise, hvordan brugen af ​​nogle avancerede switche hurtigt kan gøre det komplekst.

Lad os sige, at du har en masse filer, der skal sikkerhedskopieres - hvem gør det ikke i disse dage? Du tilslutter din bærbare harddisk, så du kan sikkerhedskopiere dine computers filer og udstede følgende kommando:

rsync-a /home/geek/files/ /mnt/usb/files/

Eller hvordan den ville se på en Windows-computer med Cygwin:

rsync-a /cygdrive/c/files/ /cygdrive/e/files/

Temmelig enkel og veddet punkt er der virkelig ingen grund til at bruge rsync, da du bare kunne trække og slippe filerne. Men hvis din anden harddisk allerede har nogle af filerne og bare har brug for de opdaterede versioner plus de filer, der er oprettet siden den sidste synkronisering, er denne kommando praktisk, da den kun sender de nye data til harddisken. Med store filer, og især overførsel af filer via internettet, er det en big deal.

Sikkerhedskopiering af dine filer til en ekstern harddisk og derefter at holde harddisken på samme sted som din computer er en meget dårlig ide. Lad os se på, hvad det ville kræve for at sende dine filer via internettet til en anden computer(en du har lejet, et familiemedlem mv.).

rsync -av --delete -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

Ovennævnte kommando vil sende dine filer til en anden computer med en IP-adresse på 10.1.1.1.Det ville slette fremmede filer fra den destination, der ikke længere findes i kildemappen, udlæs filnavnet, der overføres, så du har en ide om, hvad der foregår, og tunnel rsync gennem SSH på port 12345.

Den -a -v -e --delte switche er nogle af de mest grundlæggende og almindeligt anvendte;du bør allerede vide en god aftale om dem, hvis du læser denne vejledning. Lad os gå over nogle andre omskiftere, der undertiden ignoreres men utroligt nyttige:

- Progress - Denne switch gør det muligt for os at se overførselsprogressen for hver fil. Det er særligt nyttigt, når du overfører store filer via internettet, men kan udgive en meningsløs mængde information, når du bare overfører små filer på tværs af et hurtigt netværk.

En rsync-kommando med -progress-knappen som backup er i gang:

- partial - Dette er en anden switch, der er særlig nyttig, når du overfører store filer via internettet. Hvis rsync bliver afbrudt af en eller anden grund midt i en filoverførsel, bliver den delvist overførte fil gemt i destinationsmappen, og overførslen genoptages, hvor den blev slukket, når rsync-kommandoen er udført igen. Når du overfører store filer via internettet( f.eks. Et par gigabyte), er der intet værre end at have et par sekunders internetforstyrrelser, blå skærm eller menneskelig fejl, og du skal starte din filoverførsel igen og skal begynde igen.

-P - denne switch kombinerer -progress og -partial, så brug det i stedet, og det vil gøre din rsync-kommando lidt nyere.

-z eller --compress - Denne switch vil lave rsync komprimeringsfildata, som den overføres, hvilket reducerer mængden af ​​data, der skal sendes til destinationen. Det er faktisk en temmelig almindelig switch, men det er langt fra det væsentlige, og det giver dig virkelig god gavn for overførsler mellem langsomme forbindelser, og det gør ikke noget for følgende typer filer: 7z, avi, bz2, deb, g, z iso, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h eller -human-læsbar - Hvis du bruger - fremskridtsknappen, vil du helt sikkert også bruge denne. Det vil sige, medmindre du kan konvertere bytes til megabyte på farten.-h-omskifteren konverterer alle udgitte numre til menneskeligt læseligt format, så du kan faktisk give mening om mængden af ​​data, der overføres.

-n eller --dry-run - Denne switch er afgørende for at vide, hvornår du først skriver dit rsync script og tester det ud. Det udfører en prøvekørsel, men ændrer sig ikke i virkeligheden - de ændringer, der stilles, udleveres som normalt, så du kan læse alt og sørge for, at det ser okay ud, før du ruller dit script til produktion.

-R eller --relativ - Denne kontakt skal bruges, hvis destinationsmappen ikke allerede eksisterer. Vi bruger denne mulighed senere i denne vejledning, så vi kan lave mapper på målmaskinen med tidsstempler i mappenavne.

--exclude-from - Denne switch bruges til at linke til en ekskluderingsliste, der indeholder katalogveje, som du ikke vil have sikkerhedskopieret. Det behøver bare en almindelig tekstfil med en mappe eller en filsti på hver linje.

--include-from - Ligner på - ekskluder-fra, men det linker til en fil, der indeholder mapper og filstier af data, du vil sikkerhedskopiere.

- Stats - Ikke rigtig en vigtig switch på nogen måde, men hvis du er sysadmin, kan det være praktisk at kende detaljerede statistikker for hver backup, så du kun kan overvåge mængden af ​​trafik, der sendes over dit netværk, og sådan.

- log-fil - Dette gør det muligt at sende rsync-udgangen til en logfil. Vi anbefaler absolut dette til automatiserede sikkerhedskopier, hvor du ikke er der for at læse produktionen selv. Giv altid logfiler en gang til i fritiden for at sikre, at alt fungerer korrekt. Det er også en afgørende switch for en sysadmin at bruge, så du bliver ikke spurgt, hvordan dine sikkerhedskopieringer mislykkedes, mens du forlod den praktikant, der var ansvarlig.

Lad os tage et kig på vores rsync kommando nu, da vi har fået flere switche tilføjet:

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/

Kommandoen er stadig ret simpel, men vi har stadig ikke skabt en anstændig backup-løsning. Selv om vores filer nu er på to forskellige fysiske steder, gør denne sikkerhed ikke noget for at beskytte os mod en af ​​hovedårsagerne til datatab: menneskelig fejl.

Snapshot Backups

Hvis du ved et uheld sletter en fil, ødelægger en virus nogen af ​​dine filer, eller hvis der sker noget andet, hvorved dine filer ændres uønsket, og så kører du dit rsync backup script, overskrives dine sikkerhedskopierede data med de uønskede ændringer. Når sådan en ting opstår( ikke hvis, men hvornår), gjorde din backup-løsning ikke noget for at beskytte dig mod dit tab af data.

Oprindelsen af ​​rsync realiserede dette og tilføjede backback- og backback-dir-argumenterne, så brugerne kunne køre differentielle backups. Det allerførste eksempel på rsyncs hjemmeside viser et script, hvor en fuld backup køres hver syv dage, hvorefter ændringerne til disse filer sikkerhedskopieres i separate mapper dagligt. Problemet med denne metode er, at for at genoprette dine filer, skal du effektivt genoprette dem syv forskellige tider. Desuden kører de fleste geeks flere gange om dagen, så du kan nemt have 20 + forskellige backup-mapper til enhver tid. Ikke kun er genoprettelsen af ​​dine filer nu en smerte, men selv ved at kigge igennem dine sikkerhedskopierede data kan det være ekstremt tidskrævende. Du skal vide sidste gang en fil blev ændret for at finde den seneste sikkerhedskopi. Ud over alt det er det ineffektivt at køre kun ugentligt( eller endnu mindre ofte i nogle tilfælde) inkrementelle backup.

Snapshot backups til redning! Snapshot-sikkerhedskopier er intet mere end inkrementelle sikkerhedskopier, men de bruger hardlinks til at bevare filstrukturen i den oprindelige kilde. Det kan være svært at ombryde dit hoved i første omgang, så lad os tage et kig på et eksempel.

Foreløbig, vi har et backup script, der automatisk sikkerhedskopierer vores data hver anden time. Når rsync gør dette, navngiver den hver backup i formatet: Backup-month-day-year-time.

Så i slutningen en typisk dag ville vi have en liste over mapper i vores destinationsmappe som denne:

Når du krydser nogen af ​​disse mapper, vil du se alle filer fra kildemappen nøjagtigt som den var på det tidspunkt. Alligevel ville der ikke være dubletter på tværs af to mapper.rsync opnår dette ved hjælp af hardlinking gennem linket -link = dest argumentet.

For at kunne have disse pæne og pæne daterede katalognavne, må vi naturligvis opgradere vores rsync script. Lad os tage et kig på, hvad det ville tage for at udføre en backup løsning som denne, og så vil vi forklare scriptet mere detaljeret:

#!/bin/ bash

#copy old time.txt til time2.txt

ja |cp ~ /backup/ time.txt ~ /backup/ time2.txt

#overskrive gammel time.txt fil med ny tid

ekko `dato +"% F-% I% p "` & gt;~ /backup/ time.txt

# gør logfilen

echo "" & gt;~ /backup/ rsync-`date + "% F-% I% p" `.log

#rsync kommando

rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - delete --stats -log-file = ~ /backup/ rsync-`date + "% F-% I% p" `.log - ekskluder-fra '~ / ekskluder.txt' - link-dest = /home/geek2/files/` kat ~ /backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ `dato +"% F-% I% p "` /

# glem ikke at scp logfilen og læg den medbackup

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `kat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log

Atville være et typisk snapshot rsync script. Hvis vi tabte dig et sted, lad os dissekere det stykke for stykke:

Den første linje i vores script kopierer indholdet af time.txt til time2.txt. Ja-røret er at bekræfte, at vi ønsker at overskrive filen. Dernæst tager vi den aktuelle tid og sætter den i time.txt. Disse filer vil komme til brug senere.

Den næste linje gør rsync logfilen, navngiv den rsync-date.log( hvor dato er den aktuelle dato og klokkeslæt).

Nu, den komplekse rsync kommando, som vi har advart dig om:

-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest - Justde afbrydere vi talte om tidligere;rul op, hvis du har brug for en genopfriskning.

--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Dette er tilladelserne til destinationsmappen. Da vi laver denne mappe midt i vores rsync script, skal vi angive tilladelserne, så vores bruger kan skrive filer til den.

Brugen af ​​dato og kat kommandoer

Vi går over hver brug af datoen og kat kommandoer inde i rsync kommandoen i den rækkefølge, de forekommer. Bemærk: Vi er opmærksomme på, at der findes andre måder at opnå denne funktionalitet på, især ved brug af erklæringen af ​​variabler, men i denne vejledning har vi besluttet at bruge denne metode.

Logfilen er angivet som:

~ /backup/ rsync-`date + "% F-% I% p" `.log

Alternativt kunne vi have angivet det som:

~ /backup/ rsync-`cat ~ /backup/ time.txt`.log

Uanset hvilken måde kommandoen --log-file skal kunne finde den tidligere oprettede daterede logfil og skrive til den.

Linkdestinationsfilen er angivet som:

--link-dest = /home/geek2/files/ `cat ~ /backup/ time2.txt`

Dette betyder, at kommandoen -link-dest er angivet som den tidligere backup. Hvis vi kører sikkerhedskopier hver anden time, og klokken 16:00 på det tidspunkt, hvor vi kørte dette script, ser kommandoen --link-dest efter katalogen oprettet kl. 14:00 og overfører kun de data, der er ændret siden da( hvis nogen).

At gentage, derfor er time.txt kopieret til time2.txt i begyndelsen af ​​scriptet, så kommandoen -link-dest kan referere til den tid senere.

Destinationsmappen er angivet som:

[email protected]: /home/geek2/files/ `dato +"% F-% I% p "`

Denne kommando sætter simpelthen kildefilerne i en mappe, der har en titel på den aktuelle dato og klokkeslæt.

Endelig sørger vi for, at en kopi af logfilen er placeret i sikkerhedskopien.

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `kat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log

Vi brugerSikker kopi på port 12345 for at tage rsync loggen og placere den i den rigtige mappe. For at vælge den korrekte logfil og sørg for at den ender på det rigtige sted, skal filen time.txt refereres via kat-kommandoen. Hvis du spekulerer på, hvorfor vi besluttede at katte time.txt i stedet for bare at bruge datakommandoen, skyldes det, at meget tid kunne være opstået, mens rsync-kommandoen kørte, så for at sikre, at vi har det rette tidspunkt, vi bare kattedet tekstdokument, vi oprettede tidligere.

Automation

Brug Cron på Linux eller Task Scheduler på Windows til at automatisere dit rsync script. En ting du skal være forsigtig med, er at sørge for, at du afslutter alle løbende rsync-processer, før du fortsætter en ny. Task Scheduler synes at lukke alle allerede kørende forekomster automatisk, men for Linux skal du være lidt mere kreativ.

De fleste Linux-distributioner kan bruge kommandoen pkill, så vær sikker på at tilføje følgende til begyndelsen af ​​dit rsync script:

pkill -9 rsync

Kryptering

Nej, vi er ikke færdige endnu. Vi har endelig en fantastisk( og gratis!) Backup løsning på plads, men alle vores filer er stadig modtagelige for tyveri. Forhåbentlig kan du sikkerhedskopiere dine filer til nogle steder hundredvis af kilometer væk. Ligegyldigt hvor sikkert det fjerneste sted er, tyveri og hacking kan altid være problemer.

I vores eksempler har vi tunnelet alle vores rsync-trafik gennem SSH, så det betyder, at alle vores filer krypteres under transit til deres destination. Men vi skal sørge for, at destinationen er lige så sikker. Husk, at rsync kun krypterer dine data, som det overføres, men filerne er åbne, når de når deres destination.

En af rsyncs bedste funktioner er, at den kun overfører ændringerne i hver fil. Hvis du har alle dine filer krypteret og foretager en mindre ændring, skal hele filen blive videresendt som følge af krypteringen, der randomiserer alle dataene efter en ændring.

Derfor er det bedst / nemmest at bruge en form for diskkryptering, f.eks. BitLocker til Windows eller dm-crypt til Linux. På den måde beskyttes dine data i tilfælde af tyveri, men filer kan overføres med rsync, og din kryptering forhindrer ikke dets ydeevne. Der findes andre muligheder, der fungerer på samme måde som rsync eller endda implementerer en form for det, f.eks. Duplicitet, men de mangler nogle af de funktioner, som rsync har at tilbyde.

Når du har konfigureret dine snapshot-sikkerhedskopier på en offsite-placering og krypteret dine kilder og destination harddiske, skal du give dig et pat på bagsiden for at mestre rsync og implementere den mest dumme sikkerhedskopiering af data backup mulig.