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 destination
bash

Het 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}
bash

De inhoud van dir1 kan op hetzelfde systeem worden gesynchroniseerd met dir2 met behulp van de optie -r:

$ rsync -r dir1/ dir2
bash

Als alternatief kan de optie -a worden gebruikt, die recursief synchroniseert en symbolische koppelingen, speciale apparaatbestanden, wijzigingstijden, groepen, eigenaren en autorisaties bevat:

$ rsync -a dir1/ dir2
bash

Opmerking: 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/ dir2
bash

Hier is een voorbeeld van de uitvoer:

sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Als de bronmap geen slash aan het einde heeft, wordt de bronmap naar de doelmap gekopieerd:

$ rsync -a dir1 dir2
bash

Dit 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
. . .
bash

Door 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_directory
bash

Als 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_machine
bash

Welke 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 destination
bash

Voortgang 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 destination
bash

Dit 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)
. . .
bash

Voer 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 destination
bash

Dit is de uitvoer:

sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Houd 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 destination
bash

Bestanden 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 destination
bash

Als 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 destination
bash

Back-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 destination
bash

Een gedetailleerd overzicht van de verschillende back-upscenario’s vindt u in ons artikel over serverback-ups met rsync.

Ga naar hoofdmenu