Rsync-protokollen kan være ret enkel at bruge til almindelige backup / synkroniseringsjob, men nogle af dens mere avancerede funktioner kan overraske dig. I denne artikel skal vi vise, hvordan selv de største datahardere og backup-entusiaster kan bruge rsync som en enkelt løsning til alle deres behov for dataredundans.
Advarsel: Kun avancerede nørder
Hvis du sidder der og tænker "Hvad pokker er rsync?" eller "Jeg bruger kun rsync til virkelig enkle opgaver", kan du tjekke vores tidligere artikel om hvordan man bruger rsync til at sikkerhedskopiere dine data på Linux , som giver en introduktion til rsync, guider dig gennem installationen og viser dens mere basale funktioner. Når du har et godt kendskab til, hvordan du bruger rsync (ærligt talt er det ikke så kompliceret) og er fortrolig med en Linux-terminal, er du klar til at gå videre til denne avancerede vejledning.
Kører rsync på Windows
Lad os først få vores Windows-læsere på samme side som vores Linux-guruer. Selvom rsync er bygget til at køre på Unix-lignende systemer, er der ingen grund til, at du ikke skal kunne bruge det lige så let på Windows. Cygwin producerer en vidunderlig Linux API, som vi kan bruge til at køre rsync, så gå over til deres hjemmeside og download 32-bit eller 64-bit version afhængigt af din computer.
Installation er ligetil; du kan beholde alle indstillinger ved deres standardværdier, indtil du kommer til skærmen "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 skærmbilleder:
Installation af Vim:
Installation af SSH:
Når du har valgt disse tre pakker, skal du fortsætte 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 placerede på dit skrivebord.
rsync-kommandoer: Enkelt til avanceret
Nu hvor Windows-brugerne er på samme side, skal vi se på en simpel rsync-kommando og vise, hvordan brugen af nogle avancerede kontakter hurtigt kan gøre det kompliceret.
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 / hjem / nørd / filer / / mnt / usb / filer /
Eller som det ville se ud på en Windows-computer med Cygwin:
rsync -a / cygdrive / c / filer / / cygdrive / e / filer /
Ret simpelt, og på det tidspunkt 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 sidste synkronisering, er denne kommando praktisk, fordi den kun sender de nye data til harddisken. Med store filer og især overførsel af filer over internettet er det en big deal.
Det er en meget dårlig idé at sikkerhedskopiere dine filer til en ekstern harddisk og derefter holde harddisken på samme sted som din computer, så lad os se på, hvad det ville kræve at sende dine filer over internettet til en anden computer ( en, du har lejet, et familiemedlem osv.).
rsync -av --delete -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /
Ovenstående kommando sender dine filer til en anden computer med en IP-adresse på 10.1.1.1. Det ville slette fremmede filer fra destinationen, der ikke længere findes i kildekataloget, output de filnavne, der overføres, så du har en idé om, hvad der foregår, og tunnel rsync gennem SSH på port 12345.
Det
-а -в -е --делете
afbrydere er nogle af de mest basale og almindeligt anvendte; du burde allerede vide en hel del om dem, hvis du læser denne vejledning. Lad os gå over nogle andre kontakter, der undertiden ignoreres, men utroligt nyttige:
--fremskridt
- Denne switch giver os mulighed for at se overførselsforløbet for hver fil. Det er især nyttigt, når du overfører store filer over internettet, men kan sende en meningsløs mængde information, når man bare overfører små filer over et hurtigt netværk.
En rsync-kommando med
--fremskridt
skifte, når en sikkerhedskopi er i gang:
--delvis
- Dette er en anden switch, der er særlig nyttig, når du overfører store filer over internettet. Hvis rsync af en eller anden grund bliver afbrudt midt i en filoverførsel, opbevares den delvist overførte fil i destinationsmappen, og overførslen genoptages, hvor den slap, når rsync-kommandoen udføres igen. Når du overfører store filer over internettet (f.eks. Et par gigabyte), er der ikke noget værre end at have et par sekundære internetafbrydelser, blå skærm eller menneskelige fejl, der udløser din filoverførsel og skal starte forfra igen.
-P
- denne switch kombinerer
--fremskridt
og
--delvis
, så brug det i stedet, og det vil gøre din rsync-kommando lidt pænere.
-med
eller
--komprimere
- Denne switch får rsync til at komprimere fildata, når de overføres, hvilket reducerer mængden af data, der skal sendes til destinationen. Det er faktisk en temmelig almindelig switch, men er langt fra vigtig, og det er kun virkelig fordel for dig ved overførsler mellem langsomme forbindelser, og det gør intet 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
- menneskelig læsbar
- Hvis du bruger
--fremskridt
skifte, vil du helt sikkert også bruge denne. Det vil sige, medmindre du gerne vil konvertere byte til megabyte på farten. Det
-h
switch konverterer alle udsendte tal til menneskeligt læsbart format, så du rent faktisk kan forstå, hvor meget data der overføres.
-n
eller
--tørt løb
- Denne switch er vigtig for at vide, hvornår du først skriver dit rsync-script og tester det. Det udfører en prøvekørsel, men foretager faktisk ingen ændringer - de kommende ændringer ændres stadig som normalt, så du kan læse over alt og sørge for, at det ser okay ud, før du ruller dit script i produktion.
-R
eller
--i forhold
- Denne switch skal bruges, hvis destinationsmappen ikke allerede findes. Vi bruger denne mulighed senere i denne vejledning, så vi kan oprette mapper på målmaskinen med tidsstempler i mappenavnene.
--ekskludere-fra
- Denne switch bruges til at linke til en ekskluderingsliste, der indeholder katalogstier, som du ikke ønsker at tage backup af. Det har bare brug for en almindelig tekstfil med en mappe eller filsti på hver linje.
- inkludere-fra
- Svarende til
--ekskludere-fra
, men det linker til en fil, der indeholder mapper og filstier med de data, du vil sikkerhedskopiere.
--statistikker
- Ikke rigtig en vigtig switch på nogen måde, men hvis du er sysadmin, kan det være praktisk at kende de detaljerede statistikker for hver backup, bare så du kan overvåge mængden af trafik, der sendes over dit netværk og sådan.
--log-file
- Dette giver dig mulighed for at sende rsync-output til en logfil. Vi anbefaler dette bestemt til automatiske sikkerhedskopier, hvor du ikke er der for selv at læse output. Giv altid logfiler en gang i din fritid for at sikre, at alt fungerer korrekt. Det er også en vigtig switch, som en sysadmin kan bruge, så du er ikke tilbage med at undre dig over, hvordan dine sikkerhedskopier mislykkedes, mens du forlod praktikanten.
Lad os se på vores rsync-kommando nu, hvor vi har tilføjet et par flere kontakter:
rsync -avzhP --delete --statistik --logfil = / 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 enkel, men vi har stadig ikke oprettet en anstændig sikkerhedskopiløsning. Selvom vores filer nu er på to forskellige fysiske placeringer, beskytter denne sikkerhedskopiering os ikke fra en af hovedårsagerne til datatab: menneskelige fejl.
Snapshot-sikkerhedskopier
Hvis du ved et uheld sletter en fil, ødelægger en virus nogen af dine filer, eller der sker noget andet, hvor dine filer uønsket ændres, og derefter kører du dit rsync-sikkerhedskopiescript, dine sikkerhedskopierede data overskrives med de uønskede ændringer. Når sådan en ting opstår (ikke hvis, men når), gjorde din sikkerhedskopiløsning intet for at beskytte dig mod dit datatab.
Skaberen af rsync indså dette og tilføjede
- sikkerhedskopi
og
- backup-dir
argumenter, så brugerne kunne køre differentierede sikkerhedskopier. Selve
første eksempel på rsyncs websted
viser et script, hvor en fuld sikkerhedskopi køres hver syvende dag, og derefter sikkerhedskopieres ændringerne til disse filer i separate kataloger dagligt. Problemet med denne metode er, at for at gendanne dine filer skal du effektivt gendanne dem syv forskellige tidspunkter. Desuden kører de fleste nørder deres sikkerhedskopier flere gange om dagen, så du kan nemt have 20+ forskellige sikkerhedskopieringsmapper til enhver tid. Det er ikke kun smertefuldt at gendanne dine filer, men selv det at kigge igennem dine sikkerhedskopierede data kan være ekstremt tidskrævende - du bliver nødt til at vide, sidste gang en fil blev ændret for at finde den seneste sikkerhedskopi. Oven i alt er det ineffektivt at køre kun ugentlige (eller endda sjældnere i nogle tilfælde) trinvise sikkerhedskopier.
Snapshot-sikkerhedskopier til undsætning! Snapshot-sikkerhedskopier er intet andet end trinvise sikkerhedskopier, men de bruger hardlinks til at bevare filstrukturen for den oprindelige kilde. Det kan være svært at pakke hovedet rundt i starten, så lad os se på et eksempel.
Lad som om vi kører et backup-script, der automatisk sikkerhedskopierer vores data hver anden time. Når rsync gør dette, navngiver den hver sikkerhedskopi i formatet: Backup-måned-dag-år-tid.
Så i slutningen af en typisk dag ville vi have en liste over mapper i vores destinationsmappe som denne:
Når du krydser nogen af disse mapper, ser du hver fil fra kildekataloget nøjagtigt som den var på det tidspunkt. Alligevel ville der ikke være duplikater på tværs af to mapper. rsync opnår dette ved hjælp af hardlinking gennem
--link-dest = DIR
argument.
For at have disse pænt og pænt daterede katalognavne bliver vi selvfølgelig nødt til at øge vores rsync-script lidt. Lad os se på, hvad der skal til for at opnå en sikkerhedskopiløsning som denne, og så forklarer vi scriptet mere detaljeret:
#! / Bin / Bash
#kopier gammel tid.txt til tid2.txt
ja | cp ~ / backup / time.txt ~ / backup / time2.txt
#overwrite old time.txt-fil med ny tid
ekko `dato +”% F-% I% p ”`> ~ / backup / time.txt
# Lav logfilen
ekko “”> ~ / 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 --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 ”/
# glem ikke at scp logfilen og læg den med sikkerhedskopien
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
Det ville være et typisk snapshots rsync-script. Hvis vi mistede dig et eller andet 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 for at bekræfte, at vi vil overskrive filen. Dernæst tager vi den aktuelle tid og sætter den i time.txt. Disse filer vil være nyttige senere.
Den næste linje opretter rsync-logfilen og navngiver den rsync-date.log (hvor datoen er den aktuelle dato og tid).
Nu er den komplekse rsync-kommando, som vi har advaret dig om:
-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest
- Bare de kontakter, vi talte om tidligere; rul op, hvis du har brug for en genopfriskning.
--- ch er også d = zu = rwx, D go = rx, fu = rw, F go = r
- Dette er tilladelserne til destinationsmappen. Da vi laver denne mappe midt i vores rsync-script, skal vi specificere tilladelserne, så vores bruger kan skrive filer til den.
Brug af dato- og kattekommandoer
Vi vil gennemgå hver brug af dato- og katkommandoer inde i rsync-kommandoen i den rækkefølge, de opstår. Bemærk: Vi er opmærksomme på, at der er andre måder at udføre denne funktionalitet på, især ved brug af deklarering af variabler, men med henblik på denne vejledning har vi besluttet at bruge denne metode.
Logfilen er angivet som:
~ / backup / rsync-`dato + ”% F-% I% p” `.log
Alternativt kunne vi have specificeret det som:
~ / backup / rsync-`cat ~ / backup / time.txt`.log
Uanset hvad, den
--log-file
kommandoen skal kunne finde den tidligere oprettede daterede logfil og skrive til den.
Linkets destinationsfil er angivet som:
--link-dest = / home / geek2 / files / `cat ~ / backup / time2.txt`
Dette betyder, at
--link-dest
kommandoen får vist biblioteket med den forrige sikkerhedskopi. Hvis vi kører sikkerhedskopier hver anden time, og det er 16:00 på det tidspunkt, hvor vi kørte dette script, så er
--link-dest
kommandoen ser efter den mappe, der er oprettet kl. 14:00 og overfører kun de data, der er ændret siden da (hvis nogen).
For at gentage er det derfor, time.txt kopieres til time2.txt i begyndelsen af scriptet, så
--link-dest
kommando kan henvise til det tidspunkt senere.
Destinationsmappen er angivet som:
[email protected]: / home / geek2 / files / `date +”% F-% I% p ”`
Denne kommando placerer simpelthen kildefilerne i en mappe, der har en titel på den aktuelle dato og tid.
Endelig sørger vi for, at en kopi af logfilen placeres inde i sikkerhedskopien.
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
Vi bruger sikker kopi på port 12345 til at tage rsync-loggen og placere den i den korrekte mappe. For at vælge den korrekte logfil og sikre, at den ender på det rigtige sted, skal der henvises til time.txt-filen via cat-kommandoen. Hvis du spekulerer på, hvorfor vi besluttede at cat time.txt i stedet for bare at bruge dato-kommandoen, skyldes det, at meget tid kunne have fundet sted, mens rsync-kommandoen kørte, så for at sikre, at vi har det rigtige tidspunkt, katte vi bare det tekstdokument, vi oprettede tidligere.
Automatisering
Brug Cron på Linux eller Task Scheduler på Windows for at automatisere dit rsync-script. En ting, du skal være forsigtig med, er at sikre, at du afslutter alle aktuelt kørende rsync-processer, før du fortsætter med en ny. Task Scheduler ser ud til 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å bare sørg for 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!) Sikkerhedskopiløsning på plads, men alle vores filer er stadig modtagelige for tyveri. Forhåbentlig sikkerhedskopierer du dine filer et eller andet sted hundreder af miles væk. Uanset hvor sikkert det fjerne sted er, kan tyveri og hacking altid være problemer.
I vores eksempler har vi tunneleret al vores rsync-trafik gennem SSH, så det betyder, at alle vores filer er krypteret, mens de er i transit til deres destination. Vi er dog nødt til at sikre, at destinationen er lige så sikker. Husk, at rsync kun krypterer dine data, når de 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 transmitteres igen som et resultat af krypteringen, der fuldstændigt randomiserer alle data efter enhver ændring.
Af denne grund er det bedst / nemmest at bruge en form for diskkryptering, f.eks BitLocker til Windows eller dm-krypt til Linux. På den måde er dine data beskyttet i tilfælde af tyveri, men filer kan overføres med rsync, og din kryptering forhindrer ikke dens ydeevne. Der er andre tilgængelige muligheder, der fungerer på samme måde som rsync eller endda implementerer en eller anden form for det, såsom Duplicity, men de mangler nogle af de funktioner, som rsync har at tilbyde.
Når du har konfigureret dine snapshot-sikkerhedskopier på et sted uden for webstedet og krypteret dine kilde- og destinationsharddiske, skal du give dig selv et klapp på bagsiden for at mestre rsync og implementere den mest idiotsikker løsning til sikkerhedskopiering af data.