17Aug

De niet-beginnershandleiding voor het synchroniseren van gegevens met Rsync

Het rsync-protocol kan vrij eenvoudig worden gebruikt voor normale backup- / synchronisatieopdrachten, maar sommige van de meer geavanceerde functies kunnen u verrassen. In dit artikel laten we zien hoe zelfs de grootste hoarders en back-upliefhebbers rsync kunnen gebruiken als een enkele oplossing voor al hun behoeften op het gebied van gegevensredundantie.

Waarschuwing: geavanceerde geeks Alleen

Als je daar zit te denken "Wat is in godsnaam rsync?" Of "Ik gebruik alleen rsync voor echt eenvoudige taken", bekijk dan ons vorige artikel over het gebruik van rsync als back-upuw gegevens over Linux, die een inleiding tot rsync geeft, u door de installatie leiden en de meer basisfuncties ervan weergeven. Zodra je goed begrijpt hoe je rsync kunt gebruiken( eerlijk gezegd is het niet zo ingewikkeld) en je vertrouwd bent met een Linux-terminal, ben je klaar om verder te gaan met deze geavanceerde gids.

Gebruikt rsync op Windows

Laten we eerst onze Windows-lezers op dezelfde pagina zetten als onze Linux-goeroes. Hoewel rsync is gebouwd om op Unix-achtige systemen te worden uitgevoerd, is er geen reden dat u het niet net zo gemakkelijk op Windows zou moeten kunnen gebruiken. Cygwin produceert een prachtige Linux API die we kunnen gebruiken om rsync uit te voeren, dus ga naar hun website en download de 32-bit of 64-bit versie, afhankelijk van je computer.

Installatie is eenvoudig;u kunt alle opties op hun standaardwaarden houden totdat u bij het scherm "Select Packages" komt.

Nu moet je dezelfde stappen doen voor Vim en SSH, maar de pakketten zullen er iets anders uitzien als je ze gaat selecteren, dus hier zijn enkele schermafbeeldingen:

Vim installeren:

SSH:

installeren Nadat je hebtselecteer die drie pakketten, blijf klikken tot je klaar bent met de installatie. Dan kunt u Cygwin openen door op het pictogram te klikken dat het installatieprogramma op uw bureaublad heeft geplaatst.

rsync-opdrachten: eenvoudig naar geavanceerd

Nu de Windows-gebruikers zich op dezelfde pagina bevinden, laten we een eenvoudige rsync-opdracht bekijken en laten zien hoe het gebruik van sommige geavanceerde schakelopties het snel complex kan maken.

Stel dat je een aantal bestanden hebt waarvan een back-up moet worden gemaakt - wie niet tegenwoordig? U sluit uw draagbare harde schijf aan zodat u een back-up van uw computerbestanden kunt maken en de volgende opdracht kunt uitvoeren:

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

Of, zoals het eruit zou zien op een Windows-computer met Cygwin:

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

Vrij eenvoudig, en opop dat punt is het echt niet nodig om rsync te gebruiken, omdat je de bestanden gewoon kunt slepen en neerzetten. Als uw andere harde schijf echter al een deel van de bestanden heeft en alleen de bijgewerkte versies en de bestanden die zijn gemaakt sinds de laatste synchronisatie nodig heeft, is deze opdracht handig omdat alleen de nieuwe gegevens naar de harde schijf worden verzonden. Met grote bestanden, en met name het overzetten van bestanden via internet, is dat een groot probleem.

Een back-up van uw bestanden maken op een externe harde schijf en vervolgens de harde schijf op dezelfde locatie als uw computer houden is een zeer slecht idee, dus laten we eens kijken wat het zou vereisen om uw bestanden via internet naar een andere computer te verzenden(een die je hebt gehuurd, een familielid, enz.).

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

De bovenstaande opdracht zou uw bestanden naar een andere computer met een IP-adres van 10.1.1.1 verzenden. Het zou vreemde bestanden verwijderen van de bestemming die niet langer bestaat in de bronmap, de bestandsnamen uitvoeren die worden overgedragen, zodat je een idee hebt van wat er gaande is, en tunnel rsync door SSH op poort 12345.

De -a -v -e --verwijder schakelaars zijn enkele van de meest basale en veelgebruikte;je zou al veel over hen moeten weten als je deze tutorial aan het lezen bent. Laten we een aantal andere schakelaars bekijken die soms worden genegeerd maar ongelooflijk nuttig:

- voortgang - Met deze schakeloptie kunnen we de voortgang van de overdracht van elk bestand bekijken. Het is met name handig bij het overbrengen van grote bestanden via internet, maar kan een zinloze hoeveelheid informatie uitvoeren bij het overbrengen van kleine bestanden over een snel netwerk.

Een rsync-opdracht met de - voortgangsschakelaar als back-up is bezig:

--partial - Dit is een andere switch die vooral handig is bij het overzetten van grote bestanden via internet. Als rsync om welke reden dan ook onderbroken wordt tijdens een bestandsoverdracht, wordt het gedeeltelijk overgebrachte bestand bewaard in de doeldirectory en wordt de overdracht hervat waar het was gebleven nadat de rsync-opdracht opnieuw is uitgevoerd. Bij het overzetten van grote bestanden via het internet( bijvoorbeeld een paar gigabytes), is er niets ergers dan een paar seconden uitval van internet, een blauw scherm of een menselijke fout die de bestandsoverdracht oproept en helemaal opnieuw moet beginnen.

-P - deze switch combineert - progress en --partial, dus gebruik het in plaats daarvan en het zal je rsync commando een beetje netter maken.

-z of --compress - Deze switch zorgt ervoor dat rsync de bestandsgegevens comprimeert terwijl het wordt overgebracht, waardoor de hoeveelheid gegevens die naar de bestemming moet worden verzonden, wordt verminderd. Het is eigenlijk een vrij veel voorkomende switch, maar het is verre van essentieel, alleen profiteert het je echt van transfers tussen trage verbindingen, en het doet niets voor de volgende soorten bestanden: 7z, avi, bz2, deb, g, z iso, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h of -human-readable - Als je de - progress switch gebruikt, wil je deze zeker ook gebruiken. Dat wil zeggen, tenzij u bytes naar megabytes wilt converteren. Met de schakeloptie -h converteert u alle uitgevoerde getallen naar een voor mensen leesbaar formaat, zodat u de hoeveelheid gegevens die worden overgedragen, daadwerkelijk kunt begrijpen.

-n of --dry-run - Deze schakeloptie is essentieel om te weten wanneer je voor het eerst je rsync-script schrijft en het uittest. Het voert een proefrun uit maar brengt eigenlijk geen wijzigingen aan - de potentiële wijzigingen worden nog altijd normaal uitgevoerd, zodat u alles kunt lezen en ervoor kunt zorgen dat het goed lijkt voordat u uw script in productie haalt.

-R of --relatief - Deze schakeloptie moet worden gebruikt als de bestemmingsdirectory nog niet bestaat. We zullen deze optie later in deze handleiding gebruiken, zodat we mappen op de doelcomputer kunnen maken met tijdstempels in de mapnamen.

--exclude-from - Deze schakeloptie wordt gebruikt om een ​​koppeling te maken naar een uitsluitingslijst met mappaden waarvan u geen back-up wilt maken. Het heeft gewoon een gewoon tekstbestand nodig met een map of bestandspad op elke regel.

--include-from - Gelijk aan --exclude-from, maar het linkt naar een bestand dat mappen en bestandspaden bevat van gegevens waarvan u een back-up wilt maken.

--stats - Op geen enkele manier een belangrijke switch, maar als u een sysadmin bent, kan het handig zijn om de gedetailleerde statistieken van elke back-up te kennen, zodat u kunt controleren hoeveel verkeer over uw netwerk en dergelijke wordt verzonden..

--log-bestand - Hiermee kunt u de rsync-uitvoer naar een logbestand verzenden. We raden dit zeker aan voor automatische back-ups waarbij u niet zelf de uitvoer kunt lezen. Geef logbestanden in uw vrije tijd altijd een keer op om te controleren of alles naar behoren werkt. Het is ook een cruciale switch voor een sysadmin om te gebruiken, dus je vraagt ​​je niet af hoe je back-ups zijn mislukt terwijl je de stagiair de leiding gaf.

Laten we eens naar onze rsync-opdracht kijken nu we nog een paar extra switches hebben toegevoegd:

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/

De opdracht is nog steeds vrij eenvoudig, maar we hebben nog steeds geen fatsoenlijke back-upoplossing gemaakt. Hoewel onze bestanden zich nu op twee verschillende fysieke locaties bevinden, heeft deze back-up niets om ons te beschermen tegen een van de belangrijkste oorzaken van gegevensverlies: menselijke fouten.

Snapshot-back-ups

Als u per ongeluk een bestand verwijdert, een virus uw bestanden corrumpeert, of er gebeurt iets anders waardoor uw bestanden ongewenst worden gewijzigd, en vervolgens voert u uw rsync back-up script uit, uw back-upgegevens worden overschreven met de ongewenste wijzigingen. Wanneer zoiets gebeurt( niet wanneer, maar wanneer), heeft uw back-upoplossing niets gedaan om u te beschermen tegen uw gegevensverlies.

De maker van rsync realiseerde dit en voegde de --backup en --backup-dir -argumenten toe, zodat gebruikers differentiële back-ups konden maken. Het allereerste voorbeeld op de website van rsync toont een script waarbij elke zeven dagen een volledige back-up wordt uitgevoerd en vervolgens wordt dagelijks een back-up gemaakt in de wijzigingen in die bestanden in afzonderlijke mappen. Het probleem met deze methode is dat om uw bestanden te herstellen, u ze effectief zeven keer moet herstellen. Bovendien voeren de meeste nerds hun back-ups meerdere keren per dag uit, zodat je op elk gewenst moment gemakkelijk 20+ verschillende back-upmappen kunt hebben. Niet alleen is het herstellen van uw bestanden lastig, maar zelfs het doorzoeken van uw back-upgegevens kan zeer tijdrovend zijn - u zou moeten weten wanneer een bestand voor de laatste keer werd gewijzigd om de meest recente back-upkopie te vinden. Bovendien is het inefficiënt om alleen wekelijkse( of in sommige gevallen zelfs minder vaak) incrementele back-ups uit te voeren.

Snapshot-back-ups om te redden! Snapshot-back-ups zijn niets meer dan incrementele back-ups, maar ze maken gebruik van hardlinks om de bestandsstructuur van de oorspronkelijke bron te behouden. Dat kan in het begin moeilijk zijn om je hoofd om te wikkelen, dus laten we een voorbeeld nemen.

Stel dat we een back-up script hebben dat automatisch onze data om de twee uur back-upt. Wanneer rsync dit doet, geeft het elke back-up de volgende indeling: Back-up-maand-dag-jaar-tijd.

Dus aan het einde van een normale dag hadden we een lijst met mappen in onze bestemmingsdirectory, zoals deze:

Wanneer je een van die mappen doorloopt, zou je elk bestand uit de bronmap zien zoals het was op dat moment. Toch zouden er geen duplicaten zijn in twee mappen.rsync bereikt dit met behulp van hardlinking via het argument -link-dest = DIR.

Natuurlijk, om deze mooi en netjes gedateerde directorynamen te hebben, zullen we ons rsync-script een beetje moeten opfleuren. Laten we eens kijken wat er nodig is om een ​​back-upoplossing als deze tot stand te brengen, en dan zullen we het script in meer detail uitleggen:

#!/bin/ bash

#kopieer oude tijd.txt naar time2.txt

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

#overweld het oude time.txt-bestand met nieuwe tijd

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

#maak het logbestand

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

#rsync commando

rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --verwijderen --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 "` /

# vergeet niet om het logbestand te scpteren en te plaatsen met debackup

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

Datzou een typisch snapshot rsync-script zijn. Als we je ergens kwijt zijn, laten we het stuk voor stuk ontleden:

De eerste regel van ons script kopieert de inhoud van time.txt naar time2.txt. De ja-pipe is om te bevestigen dat we het bestand willen overschrijven. Vervolgens nemen we de huidige tijd en zetten deze in time.txt. Deze bestanden zullen later van pas komen.

De volgende regel maakt het rsync-logbestand en noemt het rsync-date.log( waarbij datum de werkelijke datum en tijd is).

Nu, de complexe rsync-opdracht waarvoor we je hebben gewaarschuwd:

-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest - Justde schakelaars waar we eerder over gesproken hebben;omhoog scrollen als je een opfriscursus nodig hebt.

--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Dit zijn de machtigingen voor de doelmap. Omdat we deze map midden in ons rsync-script maken, moeten we de machtigingen opgeven zodat onze gebruiker er bestanden naartoe kan schrijven.

Het gebruik van datum- en kattenopdrachten

We gaan elk gebruik van de datum- en kattenopdrachten binnen het rsync-commando bespreken, in de volgorde waarin ze voorkomen. Opmerking: we zijn ons ervan bewust dat er andere manieren zijn om deze functionaliteit te bereiken, vooral met het gebruik van declarerende variabelen, maar voor het doel van deze handleiding hebben we besloten om deze methode te gebruiken.

Het logboekbestand wordt opgegeven als:

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

Als alternatief kunnen we het hebben opgegeven als:

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

Hoe dan ook, de opdracht - log-file moet in staat zijn om het eerder gemaakte gedateerde logbestand te vinden en ernaar te schrijven.

Het bestemmingsbestand van de link is gespecificeerd als:

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

Dit betekent dat de opdracht - link-dest de map van de vorige back-up wordt gegeven. Als we elke twee uur back-ups uitvoeren en het is 16:00 uur op het moment dat we dit script hebben uitgevoerd, zoekt de opdracht - link-dest naar de map die is gemaakt om 14:00 uur en draagt ​​alleen de gegevens over die sindsdien zijn gewijzigd( indien aanwezig).

Nogmaals, daarom wordt time.txt aan het begin van het script naar time2.txt gekopieerd, dus de opdracht -link-dest kan die tijd later verwijzen.

De doelmap is opgegeven als:

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

Met deze opdracht plaatst u eenvoudig de bronbestanden in een map met een titel van de huidige datum en tijd.

Ten slotte zorgen we ervoor dat een kopie van het logbestand in de back-up wordt geplaatst.

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

We gebruikenbeveiligde kopie op poort 12345 om het rsync-logbestand te nemen en het in de juiste map te plaatsen. Om het juiste logbestand te selecteren en ervoor te zorgen dat het op de juiste plek terechtkomt, moet het time.txt-bestand worden geraadpleegd via het commando cat. Als je je afvraagt ​​waarom we besloten om time.txt in te stellen in plaats van alleen het datumcommando te gebruiken, komt dit omdat er veel tijd was verlopen tijdens het uitvoeren van het rsync-commando, dus om er zeker van te zijn dat we de juiste tijd hebben, hebben we gewoon een kathet tekstdocument dat we eerder hebben gemaakt.

Automation

Gebruik Cron op Linux of Task Scheduler op Windows om uw rsync-script te automatiseren. Een ding waar je op moet letten, is ervoor zorgen dat je alle lopende rsync-processen beëindigt voordat je een nieuwe doorgaat. Task Scheduler lijkt alle reeds actieve instanties automatisch te sluiten, maar voor Linux moet je iets creatiever zijn.

De meeste Linux-distributies kunnen de pkill-opdracht gebruiken, dus zorg ervoor dat u het volgende aan het begin van uw rsync-script toevoegt:

pkill -9 rsync

Encryptie

Nee, we zijn nog niet klaar. We hebben eindelijk een fantastische( en gratis!) Back-upoplossing op zijn plaats, maar al onze bestanden zijn nog steeds vatbaar voor diefstal. Hopelijk maak je een back-up van je bestanden naar een plaats op honderden kilometers afstand. Hoe veilig die plek ook is, diefstal en hacking kunnen altijd problemen opleveren.

In onze voorbeelden hebben we al ons rsync-verkeer getunneld via SSH, dus dat betekent dat al onze bestanden worden versleuteld terwijl ze onderweg zijn naar hun bestemming. We moeten er echter voor zorgen dat de bestemming net zo veilig is. Houd er rekening mee dat rsync uw gegevens alleen versleutelt terwijl deze worden overgedragen, maar de bestanden zijn wijd open zodra ze hun bestemming hebben bereikt.

Een van de beste eigenschappen van rsync is dat alleen de wijzigingen in elk bestand worden overgedragen. Als u al uw bestanden versleuteld hebt en één kleine wijziging aanbrengt, moet het volledige bestand opnieuw worden verzonden als gevolg van de codering, waarbij alle gegevens na elke wijziging volledig worden willekeurig verdeeld.

Om deze reden is het het beste / gemakkelijkste om een ​​bepaald type schijfversleuteling te gebruiken, zoals BitLocker voor Windows of dm-crypt voor Linux. Op die manier worden uw gegevens beschermd in geval van diefstal, maar bestanden kunnen worden overgezet met rsync en uw codering hindert de prestaties ervan niet. Er zijn andere opties beschikbaar die op dezelfde manier werken als rsync of zelfs een bepaalde vorm ervan implementeren, zoals Duplicity, maar ze missen een aantal functies die rsync te bieden heeft.

Nadat u uw snapshot-back-ups op een externe locatie hebt ingesteld en uw bron- en doel-harde schijven hebt gecodeerd, moet u zichzelf een schouderklopje geven voor het beheersen van rsync en de meest onfeilbare oplossing voor gegevensback-up mogelijk maken.