rsync is een veel­zij­di­ge tool die het over­zet­ten van bestanden via net­werk­ver­bin­din­gen ver­een­vou­digt en het syn­chro­ni­se­ren van lokale mappen versnelt. Dankzij de hoge flexi­bi­li­teit is deze syn­chro­ni­sa­tie­tool een uit­ste­ken­de keuze voor allerlei be­wer­kin­gen op be­stands­ni­veau.

Wat is rsync?

rsync, kort voor ‘remote syn­chro­ni­sa­ti­on’, is een flexibele en net­werk­com­pa­ti­be­le syn­chro­ni­sa­tie­tool onder Linux. Het open-sour­ce­pro­gram­ma kan worden gebruikt om bestanden en mappen tussen lokale systemen of over netwerken te syn­chro­ni­se­ren. De tool maakt gebruik van een dif­fe­ren­ti­ë­le ge­ge­vens­over­drachts­tech­niek, waarbij alleen die delen van de gegevens worden over­ge­dra­gen die daad­wer­ke­lijk zijn gewijzigd. Dit mi­ni­ma­li­seert de hoe­veel­heid ge­ge­vens­uit­wis­se­ling en versnelt het syn­chro­ni­sa­tie­pro­ces aan­zien­lijk. Dankzij een ver­schei­den­heid aan opties maakt rsync een nauw­keu­ri­ge controle van het syn­chro­ni­sa­tie­ge­drag mogelijk. De flexibele syntaxis maakt zowel een­vou­di­ge lokale kopieën als complexe net­werk­syn­chro­ni­sa­ties mogelijk.

Wat is de syntaxis voor rsync?

De op­dracht­syn­taxis van rsync heeft een een­vou­di­ge structuur en lijkt op die van SSH, SCP en CP. De ba­sis­struc­tuur is als volgt:

rsync [OPTION] source destination
bash

Het bronpad waaruit de gegevens moeten worden ge­syn­chro­ni­seerd, wordt ingevoerd in source, terwijl het be­stem­mings­pad wordt opgegeven als destination. rsync biedt een ver­schei­den­heid aan opties die ge­brui­kers kunnen gebruiken om het syn­chro­ni­sa­tie­pro­ces aan te passen aan hun behoeften. De meest gebruikte opties zijn:

  • -a (archieven): Behoudt re­cur­sie­ve be­stands­rech­ten, tijd­stem­pels, groepen, eigenaren en speciale be­stands­ei­gen­schap­pen
  • -v (uit­ge­breid): Geeft ge­de­tail­leer­de in­for­ma­tie weer over het syn­chro­ni­sa­tie­pro­ces
  • -r (recursief): syn­chro­ni­seert mappen en hun inhoud recursief
  • -u (update): Ver­plaatst alleen bestanden die nieuwer zijn dan de bestanden die al in de doelmap staan
  • -z (compress): ver­min­dert het da­ta­ver­keer over het netwerk
  • -n –itemize-changes: Geeft een lijst weer met de wij­zi­gin­gen die moeten worden aan­ge­bracht
  • --delete: Ver­wij­dert bestanden in de doelmap die niet meer in de bron bestaan
  • --exclude: Sluit bepaalde bestanden of mappen uit van syn­chro­ni­sa­tie
  • --dry-run: Simuleert het syn­chro­ni­sa­tie­pro­ces zonder daad­wer­ke­lijk bestanden over te zetten
  • --progress: Toont de voortgang van de be­stands­over­dracht
  • --partial: Bestanden die ge­deel­te­lijk zijn over­ge­dra­gen, blijven in de doelmap staan als de over­dracht wordt on­der­bro­ken. Wanneer de over­dracht wordt hervat, wordt het bestand voort­ge­zet vanaf de laatste status

Voor­beel­den van rsync-syntaxis

De volgende voor­beel­den van rsync-syntaxis maken het ge­mak­ke­lij­ker om te begrijpen hoe het commando wordt gebruikt. Het volgende co­de­voor­beeld maakt de map dir1 aan met 100 lege test­be­stan­den 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 ge­syn­chro­ni­seerd met dir2 met behulp van de optie -r:

$ rsync -r dir1/ dir2
bash

Als al­ter­na­tief kan de optie -a worden gebruikt, die recursief syn­chro­ni­seert en sym­bo­li­sche kop­pe­lin­gen, speciale ap­pa­raat­be­stan­den, wij­zi­gings­tij­den, groepen, eigenaren en au­to­ri­sa­ties bevat:

$ rsync -a dir1/ dir2
bash

Opmerking: De schuine streep (/) aan het einde van de bronmap in een rsync-opdracht is be­lang­rijk omdat deze aangeeft dat de inhoud van de map moet worden ge­syn­chro­ni­seerd, 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 ge­ko­pi­eerd:

$ 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 bron­di­rec­to­ry te gebruiken, wordt ervoor gezorgd dat het syn­chro­ni­sa­tie­pro­ces verloopt zoals verwacht en dat de inhoud van de bron­di­rec­to­ry in de juiste doelmap te­recht­komt.

Hoe rsync syn­chro­ni­se­ren met een extern systeem

Het syn­chro­ni­se­ren van een extern systeem met rsync is meestal niet moeilijk, mits u SSH-toegang hebt tot de externe computer en over de benodigde au­then­ti­ca­tie­ge­ge­vens beschikt. Rsync maakt vaak gebruik van SSH (Secure Shell) voor veilige com­mu­ni­ca­tie met externe systemen. Om deze tool te kunnen gebruiken, moet deze aan beide kanten zijn ge­ïn­stal­leerd.

Als SSH-toegang tussen de twee computers is ge­ve­ri­fi­eerd, kan de map dir1 op een externe computer worden ge­syn­chro­ni­seerd. In dit geval moet de daad­wer­ke­lij­ke map worden over­ge­dra­gen, daarom is de slash aan het einde weg­ge­la­ten 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 ver­plaatst, wordt dit een push-bewerking genoemd. Wanneer een externe map daar­en­te­gen wordt ge­syn­chro­ni­seerd 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 stan­daard­ge­drag van rsync kan verder worden aangepast met behulp van de on­der­staan­de opties.

Niet-ge­com­pri­meer­de bestanden over­zet­ten met rsync

De net­werk­be­las­ting bij het over­zet­ten van niet-ge­com­pri­meer­de bestanden kan worden ver­min­derd met behulp van de optie -z:

$ rsync -az source destination
bash

Voortgang weergeven en on­der­bro­ken trans­mis­sies hervatten

Met -P kunt u de opties --progress en --partial com­bi­ne­ren. Dit geeft u een overzicht van de voortgang van de trans­mis­sies en stelt u ook in staat om on­der­bro­ken trans­mis­sies te­ge­lij­ker­tijd 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 wij­zi­gings­tij­den bepalen of er wij­zi­gin­gen zijn aan­ge­bracht.

$ 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 ge­syn­chro­ni­seerd met rsync

Om ervoor te zorgen dat twee mappen daad­wer­ke­lijk ge­syn­chro­ni­seerd blijven, is het nood­za­ke­lijk om bestanden die uit de bronmap zijn ver­wij­derd, ook uit de doelmap te ver­wij­de­ren. Maar rsync ver­wij­dert bestanden niet au­to­ma­tisch uit de doelmap. Dit kan worden aangepast met de optie --delete. Het is echter be­lang­rijk om deze optie met voor­zich­tig­heid te gebruiken, omdat hiermee bestanden in de doelmap worden ver­wij­derd 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 syn­chro­ni­sa­tie­pro­ces uitvoeren zonder daad­wer­ke­lijk bestanden te ver­wij­de­ren. Op die manier kunt u ervoor zorgen dat alleen de gewenste wij­zi­gin­gen worden door­ge­voerd zonder dat u per ongeluk be­lang­rij­ke gegevens kwijt­raakt:

$ rsync -a --delete source destination
bash

Bestanden en mappen uit­slui­ten van syn­chro­ni­sa­tie

In rsync kunt u de optie --exclude gebruiken om bepaalde bestanden en mappen uit te sluiten van syn­chro­ni­sa­tie. Dit is handig als u bij­voor­beeld geen tij­de­lij­ke bestanden, log­be­stan­den of andere inhoud wilt syn­chro­ni­se­ren.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Als u een patroon hebt opgegeven voor het uit­slui­ten van bestanden, kunt u de optie --include= gebruiken om deze uit­slui­ting te over­schrij­ven 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 be­lang­rij­ke bestanden opslaan. Deze optie kan worden gebruikt in com­bi­na­tie met optie --backup-dir om de map op te geven waarin de back-up­be­stan­den moeten worden op­ge­sla­gen:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

Een ge­de­tail­leerd overzicht van de ver­schil­len­de back-up­sce­na­rio’s vindt u in ons artikel over ser­ver­back-ups met rsync.

Ga naar hoofdmenu