Hoe gegevenssynchronisatie met rsync te optimaliseren
rsync is een veelzijdige tool die het overzetten van bestanden via netwerkverbindingen vereenvoudigt en het synchroniseren van lokale mappen versnelt. Dankzij de hoge flexibiliteit is deze synchronisatietool een uitstekende keuze voor allerlei bewerkingen op bestandsniveau.
Wat is rsync?
rsync, kort voor ‘remote synchronisation’, is een flexibele en netwerkcompatibele synchronisatietool onder Linux. Het open-sourceprogramma kan worden gebruikt om bestanden en mappen tussen lokale systemen of over netwerken te synchroniseren. De tool maakt gebruik van een differentiële gegevensoverdrachtstechniek, waarbij alleen die delen van de gegevens worden overgedragen die daadwerkelijk zijn gewijzigd. Dit minimaliseert de hoeveelheid gegevensuitwisseling en versnelt het synchronisatieproces aanzienlijk. Dankzij een verscheidenheid aan opties maakt rsync een nauwkeurige controle van het synchronisatiegedrag mogelijk. De flexibele syntaxis maakt zowel eenvoudige lokale kopieën als complexe netwerksynchronisaties mogelijk.
Wat is de syntaxis voor rsync?
De opdrachtsyntaxis van rsync heeft een eenvoudige structuur en lijkt op die van SSH, SCP en CP. De basisstructuur is als volgt:
rsync [OPTION] source destinationbashHet bronpad waaruit de gegevens moeten worden gesynchroniseerd, wordt ingevoerd in source, terwijl het bestemmingspad wordt opgegeven als destination. rsync biedt een verscheidenheid aan opties die gebruikers kunnen gebruiken om het synchronisatieproces aan te passen aan hun behoeften. De meest gebruikte opties zijn:
-a(archieven): Behoudt recursieve bestandsrechten, tijdstempels, groepen, eigenaren en speciale bestandseigenschappen-v(uitgebreid): Geeft gedetailleerde informatie weer over het synchronisatieproces-r(recursief): synchroniseert mappen en hun inhoud recursief-u(update): Verplaatst alleen bestanden die nieuwer zijn dan de bestanden die al in de doelmap staan-z(compress): vermindert het dataverkeer over het netwerk-n–itemize-changes: Geeft een lijst weer met de wijzigingen die moeten worden aangebracht--delete: Verwijdert bestanden in de doelmap die niet meer in de bron bestaan--exclude: Sluit bepaalde bestanden of mappen uit van synchronisatie--dry-run: Simuleert het synchronisatieproces zonder daadwerkelijk bestanden over te zetten--progress: Toont de voortgang van de bestandsoverdracht--partial: Bestanden die gedeeltelijk zijn overgedragen, blijven in de doelmap staan als de overdracht wordt onderbroken. Wanneer de overdracht wordt hervat, wordt het bestand voortgezet vanaf de laatste status
Voorbeelden van rsync-syntaxis
De volgende voorbeelden van rsync-syntaxis maken het gemakkelijker om te begrijpen hoe het commando wordt gebruikt. Het volgende codevoorbeeld maakt de map dir1 aan met 100 lege testbestanden en een tweede lege map dir2:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashDe inhoud van dir1 kan op hetzelfde systeem worden gesynchroniseerd met dir2 met behulp van de optie -r:
$ rsync -r dir1/ dir2bashAls alternatief kan de optie -a worden gebruikt, die recursief synchroniseert en symbolische koppelingen, speciale apparaatbestanden, wijzigingstijden, groepen, eigenaren en autorisaties bevat:
$ rsync -a dir1/ dir2bashOpmerking: De schuine streep (/) aan het einde van de bronmap in een rsync-opdracht is belangrijk omdat deze aangeeft dat de inhoud van de map moet worden gesynchroniseerd, niet de map zelf.
$ rsync -a dir1/ dir2bashHier is een voorbeeld van de uitvoer:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashAls de bronmap geen slash aan het einde heeft, wordt de bronmap naar de doelmap gekopieerd:
$ rsync -a dir1 dir2bashDit is de uitvoer:
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .bashDoor de schuine streep aan het einde van de brondirectory te gebruiken, wordt ervoor gezorgd dat het synchronisatieproces verloopt zoals verwacht en dat de inhoud van de brondirectory in de juiste doelmap terechtkomt.
Hoe rsync synchroniseren met een extern systeem
Het synchroniseren van een extern systeem met rsync is meestal niet moeilijk, mits u SSH-toegang hebt tot de externe computer en over de benodigde authenticatiegegevens beschikt. Rsync maakt vaak gebruik van SSH (Secure Shell) voor veilige communicatie met externe systemen. Om deze tool te kunnen gebruiken, moet deze aan beide kanten zijn geïnstalleerd.
Als SSH-toegang tussen de twee computers is geverifieerd, kan de map dir1 op een externe computer worden gesynchroniseerd. In dit geval moet de daadwerkelijke map worden overgedragen, daarom is de slash aan het einde weggelaten in de volgende opdracht:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashAls een map van een lokaal systeem naar een extern systeem wordt verplaatst, wordt dit een push-bewerking genoemd. Wanneer een externe map daarentegen wordt gesynchroniseerd met een lokaal systeem, wordt dit een pull-bewerking genoemd. De syntaxis hiervoor is als volgt:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machinebashWelke andere opties zijn er in rsync?
Het standaardgedrag van rsync kan verder worden aangepast met behulp van de onderstaande opties.
Niet-gecomprimeerde bestanden overzetten met rsync
De netwerkbelasting bij het overzetten van niet-gecomprimeerde bestanden kan worden verminderd met behulp van de optie -z:
$ rsync -az source destinationbashVoortgang weergeven en onderbroken transmissies hervatten
Met -P kunt u de opties --progress en --partial combineren. Dit geeft u een overzicht van de voortgang van de transmissies en stelt u ook in staat om onderbroken transmissies tegelijkertijd te hervatten:
$ rsync -azP source destinationbashDit is de uitvoer:
sending incremental file list
./
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file100
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)
file11
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101)
. . .bashVoer het commando opnieuw uit om een kortere uitvoer te krijgen. Hierdoor kan rsync op basis van de wijzigingstijden bepalen of er wijzigingen zijn aangebracht.
$ rsync -azP source destinationbashDit is de uitvoer:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashHoud mappen gesynchroniseerd met rsync
Om ervoor te zorgen dat twee mappen daadwerkelijk gesynchroniseerd blijven, is het noodzakelijk om bestanden die uit de bronmap zijn verwijderd, ook uit de doelmap te verwijderen. Maar rsync verwijdert bestanden niet automatisch uit de doelmap. Dit kan worden aangepast met de optie --delete. Het is echter belangrijk om deze optie met voorzichtigheid te gebruiken, omdat hiermee bestanden in de doelmap worden verwijderd die niet meer in de bron bestaan.
Voordat u deze optie gebruikt, moet u eerst optie --dry-run gebruiken. Hiermee kunt u een simulatie van het synchronisatieproces uitvoeren zonder daadwerkelijk bestanden te verwijderen. Op die manier kunt u ervoor zorgen dat alleen de gewenste wijzigingen worden doorgevoerd zonder dat u per ongeluk belangrijke gegevens kwijtraakt:
$ rsync -a --delete source destinationbashBestanden en mappen uitsluiten van synchronisatie
In rsync kunt u de optie --exclude gebruiken om bepaalde bestanden en mappen uit te sluiten van synchronisatie. Dit is handig als u bijvoorbeeld geen tijdelijke bestanden, logbestanden of andere inhoud wilt synchroniseren.
$ rsync -a --exclude=pattern_to_exclude source destinationbashAls u een patroon hebt opgegeven voor het uitsluiten van bestanden, kunt u de optie --include= gebruiken om deze uitsluiting te overschrijven voor bepaalde bestanden die aan een ander patroon voldoen.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashBack-ups opslaan met rsync
Met optie --backup kunt u back-ups van belangrijke bestanden opslaan. Deze optie kan worden gebruikt in combinatie met optie --backup-dir om de map op te geven waarin de back-upbestanden moeten worden opgeslagen:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashEen gedetailleerd overzicht van de verschillende back-upscenario’s vindt u in ons artikel over serverback-ups met rsync.