Startpagina » hoe » De niet-beginnershandleiding voor het synchroniseren van gegevens met Rsync

    De niet-beginnershandleiding voor het synchroniseren van gegevens met Rsync

    Het rsync-protocol kan vrij eenvoudig worden gebruikt voor gewone backup- / synchronisatieopdrachten, maar sommige van de geavanceerdere functies zullen u misschien verrassen. In dit artikel laten we zien hoe zelfs de grootste data hamarders en backup-enthousiasten rsync kunnen gebruiken als een enkele oplossing voor al hun dataredundantiebehoeften.

    Waarschuwing: alleen geavanceerde geeks

    Als je daar zit te denken "Wat is in vredesnaam rsync?" Of "Ik gebruik rsync alleen voor heel eenvoudige taken", bekijk dan ons vorige artikel over het gebruik van rsync om een ​​back-up te maken van je gegevens op Linux. een inleiding tot rsync, begeleidt u bij de installatie en toont zijn meer basale functies. Als je eenmaal goed begrijpt hoe je rsync kunt gebruiken (eerlijk gezegd is het niet zo ingewikkeld) en je je prettig voelt bij een Linux-terminal, ben je klaar om verder te gaan met deze geavanceerde gids.

    Rennen van 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 draaien, is er geen reden dat je het niet net zo gemakkelijk op Windows zou 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; je kunt alle opties op hun standaardwaarden houden totdat je bij het scherm "Select Packages" komt.

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

    Vim installeren:

    SSH installeren:

    Nadat je die drie pakketten hebt geselecteerd, blijf je volgende klikken tot je de installatie hebt voltooid. Vervolgens 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 enkele geavanceerde switches het snel complex kan maken.

    Stel dat u 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 kunt maken van uw computerbestanden en de volgende opdracht kunt uitvoeren:

    rsync -a / home / geek / bestanden / / 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 op dat moment 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 overbrengen van bestanden via internet, is dat een groot probleem.

    Het maken van een back-up van uw bestanden op een externe harde schijf en het vervolgens houden van de harde schijf op dezelfde locatie als uw computer 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 /

    Het bovenstaande commando zou uw bestanden naar een andere computer sturen met een IP-adres van 10.1.1.1. Het zou vreemde bestanden van de bestemming verwijderen die niet langer in de brondirectory voorkomen, de bestandsnamen uitvoeren die zijn overgedragen, zodat je een idee hebt van wat er gaande is, en tunnel rsync via SSH op poort 12345.

    De -a -v -e - verwijderen 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 paar andere schakelaars bekijken die soms worden genegeerd, maar ongelooflijk nuttig:

    --vooruitgang - Met deze schakelaar kunnen we de voortgang van de overdracht van elk bestand bekijken. Het is met name handig bij het overdragen 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 --vooruitgang schakelen terwijl een back-up bezig is:

    --gedeeltelijk - Dit is een andere schakelaar die vooral handig is bij het overzetten van grote bestanden via internet. Als rsync om welke reden dan ook wordt onderbroken tijdens een bestandsoverdracht, wordt het gedeeltelijk overgedragen bestand bewaard in de doeldirectory en wordt de overdracht hervat waar het was gebleven nadat de opdracht rsync 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. Hierdoor wordt uw bestandsoverdracht gestimuleerd en moet helemaal opnieuw beginnen.

    -P - deze schakelaar combineert --vooruitgang en --gedeeltelijk, dus gebruik het in plaats daarvan en het zal je rsync commando een beetje netter maken.

    -z of --samenpersen - Met deze schakeloptie wordt rsync gecomprimeerde bestandsgegevens tijdens het overzetten, 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, maar je profiteert 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 --leesbare - Als u de --vooruitgang schakelaar, je zult deze zeker ook willen gebruiken. Dat wil zeggen, tenzij u bytes naar megabytes wilt converteren. De -h switch converteert alle uitgevoerde getallen naar een voor mensen leesbaar formaat, zodat u echt een idee kunt krijgen van de hoeveelheid gegevens die wordt overgebracht.

    -n of --drooglopen - Deze schakelaar is essentieel om te weten wanneer je je rsync-script voor het eerst 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 --familielid - Deze schakeloptie moet worden gebruikt als de doelmap 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.

    --Uitsluiten van - 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.

    --omvatten van - Gelijkwaardig aan --Uitsluiten van, maar het linkt naar een bestand dat mappen en bestandspaden bevat van gegevens waarvan u een back-up wilt maken.

    --stats - Niet echt een belangrijke switch op alle mogelijke manieren, maar als je een sysadmin bent, kan het handig zijn om de gedetailleerde statistieken van elke back-up te kennen, zodat je kunt controleren hoeveel verkeer er via je netwerk wordt verzonden en dergelijke..

    --log-bestand - Hiermee kunt u de rsync-uitvoer naar een logbestand verzenden. We bevelen dit zeker aan voor geautomatiseerde back-ups waarbij u er niet bent om de uitvoer zelf te 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 u vraagt ​​zich niet af hoe uw back-ups zijn mislukt terwijl u de stagiair de leiding gaf.

    Laten we een blik werpen op ons rsync-commando nu we nog wat meer schakelaars 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. 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 beschadigt of er gebeurt iets anders waardoor uw bestanden ongewenst worden gewijzigd en u voert dan uw rsync back-up script uit, dan worden uw back-upgegevens overschreven door de ongewenste wijzigingen. Wanneer zoiets gebeurt (niet als, 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, zodat gebruikers differentiële back-ups kunnen uitvoeren. Het eerste voorbeeld op de website van rsync toont een script waarbij elke zeven dagen een volledige back-up wordt uitgevoerd en vervolgens worden de wijzigingen in die bestanden dagelijks in een aparte map opgeslagen. 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 alleen bekijken 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 eens naar een voorbeeld kijken.

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

    Aan het einde van een normale dag hadden we dus een lijst met mappen in onze doelmap:

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

    Om deze mooie en netjes gedateerde directorynamen te hebben, moeten we uiteraard ons rsync-script een beetje opfleuren. Laten we eens kijken wat er nodig is om een ​​dergelijke back-upoplossing te maken, en dan zullen we het script in meer detail uitleggen:

    #! / Bin / bash

    #copy old time.txt naar time2.txt

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

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

    echo 'date +'% F-% I% p "'> ~ / backup / time.txt

    #maak het logbestand

    echo ""> ~ / backup / rsync-'date + "% F-% I% p" '. log

    #rsync-opdracht

    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"' /

    # vergeet niet om het logbestand te scpteren en bij de back-up te plaatsen

    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

    Dat zou 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 we deze in time.txt. Deze bestanden zullen later van pas komen.

    De volgende regel maakt het rsync-logbestand, waarbij het rsync-date.log wordt genoemd (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 - Alleen de schakelaars waarover we eerder spraken; omhoog bladeren als je een opfriscursus nodig hebt.

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

    Het gebruik van datum- en kattenopdrachten

    We gaan elk gebruik van de datum- en cat-commando's binnen het rsync-commando bekijken, 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 logbestand wordt opgegeven als:

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

    Als alternatief zouden we het kunnen specificeren als:

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

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

    Het bestemmingsbestand van de link is opgegeven als:

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

    Dit betekent dat de --Link-dest opdracht krijgt de map van de vorige back-up. Als we elke twee uur back-ups uitvoeren, en het is 16:00 uur op het moment dat we dit script hebben uitgevoerd, dan is het --Link-dest commando zoekt naar de map aangemaakt om 14:00 en verzendt alleen de gegevens die sindsdien zijn gewijzigd (indien aanwezig).

    Om nogmaals te herhalen, daarom wordt time.txt aan het begin van het script naar time2.txt gekopieerd, dus de --Link-dest commando kan later naar die tijd 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 gebruiken beveiligde 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 plaats terechtkomt, moet het bestand time.txt worden gerefereerd 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 dat omdat er veel tijd was geweest tijdens het uitvoeren van het rsync-commando, dus om er zeker van te zijn dat we de juiste tijd hebben, hebben we gewoon een kat het tekstdocument dat we eerder hebben gemaakt.

    Automatisering

    Gebruik Cron op Linux of Task Scheduler in 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 opdracht pkill gebruiken, dus zorg ervoor dat u het volgende toevoegt aan het begin van uw rsync-script:

    pkill -9 rsync

    Encryption

    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 het alleen de wijzigingen in elk bestand overdraagt. Als u al uw bestanden versleuteld hebt en een kleine wijziging aanbrengt, moet het volledige bestand opnieuw worden verzonden als gevolg van de codering, waarbij alle gegevens na elke wijziging volledig willekeurig worden.

    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 zal de prestaties ervan niet hinderen. Er zijn andere opties beschikbaar die op dezelfde manier werken als rsync of zelfs een bepaalde vorm ervan implementeren, zoals Duplicity, maar ze missen enkele van de functies die rsync te bieden heeft.

    Nadat u uw snapshot-back-ups hebt ingesteld op een externe locatie en uw bron- en doel-harde schijven hebt gecodeerd, geeft u uzelf een schouderklopje voor het beheersen van rsync en het implementeren van de meest foutloze gegevensback-upoplossing die mogelijk is.