RSYNC

Remote Sync

Stel op een Linux Forum of een User Group de vraag "Welk programma voor Linux bestaat er om een Backup van mijn systeem te maken?" En je kunt er zeker van zijn dat tenminste 5 personen rsync zullen adviseren.

rsync staat voor "Remote Sync", maar kan ook perfect lokaal op een systeem gebruikt worden. Neem als voorbeeld de backup die we op deze site bespreken waar we cron gebruiken om iedere 10 minuten een backup te maken naar een externe hardeschijf.

Rsync is een zeer uitgebreide tool, we gaan daarom in dit artikel maar een klein deel van deze tool bespreken. Heb je een specifieke use-case neem dan zeker eens een kijkje in de manpages van deze tool.

Als rsync nog niet geïnstalleerd is, dan gebruik je hiervoor de package manager van jouw distributie (sudo apt install rsync) bijvoorbeeld.

RSYNC vs CP

Je vraagt je misschien af waarom we in dit geval niet met cp werken (of met scp voor externe systemen).

De reden hiervoor is dat rsync enkel de bestanden kopiëert die zijn veranderd, en niet alle bestanden zoals cp dat doet.

Basis

Om twee directories op hetzelfde systeem te syncroniseren gebruik je het commando: rsynd -r bron/ doel

bijvoorbeeld: rsync -r /home/patrick/ /media/patrick/Backup
Figuur 1. $ rsync -r /home/patrick/ /media/patrick/Backup
$ rsync -r /home/patrick /media/patrick/Backup

Dit commando maakt een backup van /home/patrick en al de subdirectories (de -r optie1) en plaatst deze in /media/patrick/Backup.

Opmerking: Let Op! Let op dat je aan het einde van de bron directory een / plaatst, doe je dit niet (zoals op mijn schermafbeelding) dan wordt de directory zelf ook in /media/patrick/Backup geplaatst dus krijg je /media/patrick/Backup/patrick terwijl je /media/patrick/Backup/ wil.

Wil je een bepaalde directory uitsluiten van de Backup dan kun je dit aangeven met --exclude 'directory.

Bijvoorbeeld:

rsync -r --exclude 'Downloads' /home/patrick /media/patrick/Backup

Heb je meerdere directories die je wil uitsluiten, dan plaatse je deze in een ketting achter elkaar, wel telkens met --exclude ervoor, dus bijvoorbeeld:

rsync -a --exclude 'Downloads' --exclude 'Documents' /home/patrick /media/patrick/Backup.

Als je goed kijkt zie je dat ik hierboven de optie -r heb vervangen door -a (voor "Archive") deze optie kun je ook gebruiken als je een Backup wil maken.

Progress

Rsync zal standaard geen vooruitgang weergeven, enkel een lijst met bestanden die worden overgeslagen. Dit levert geen probleem op als je het in een cronjob gebruikt, maar via een Terminal wil je misschien wat meer informatie zien. Hiervoor kun je de optie --progress gebruiken.

Een deel van de uitvoer kan er dan zo uitzien:
patrick/.cache/epiphany/WebKitCache/Version 16/Records/E77F42D0C0C9AE4F553412D1947B7AEE97691FB5/Resource/271A6A423334B2B12579DA3772EAA38995186B63
          1,170 100%    2.24kB/s    0:00:00 (xfr#3299, ir-chk=2863/7049)
patrick/.cache/epiphany/WebKitCache/Version 16/Records/E77F42D0C0C9AE4F553412D1947B7AEE97691FB5/Resource/271A6A423334B2B12579DA3772EAA38995186B63-blob
         32,768   4%   62.75kB/s    0:00:09

Een stapje verder

Dry-Run

Voor je het commando rsync gebruikt in een productieomgeving is het handig om eerst te testen of er geen fout in het commando zit, daarvoor kun je -n of --dry-run gebruiken.

Ook kun je de optie -v2 gebruiken, om meer informatie te krijgen. Een voorbeeld:
Figuur 2. $ rsync -a --progress --exclude /home/patrick/Tools/ /media/patrick/Backup --dry-run -v
$ rsync -a --progress --exclude /home/patrick/Tools/ /media/patrick/Backup --dry-run -v

Externe systemen

Wil je een backup maken naar een extern systeem dan heb je daar een correct werkende SSH verbinding voor nodig. Wil je dit process automatiseren dan moet je jouw SSH instellen met een ssh-key (de gamakkelijkste optie is zonder wachtwoord, maar dat maakt het wel onveiliger omdat iedereen die toegang heeft tot jouw computer ook zonder wachtwoord toegang heeft tot het externe systeem.

Voorbeeld:

rsync -av /home/patrick/Tools patrick@192.168.1.60:/home/patrick/Tools
Figuur 3. $ rsync -av /home/patrick/Tools patrick@192.168.1.60:/home/patrick/Tools
$ rsync -av /home/patrick/Tools patrick@192.168.1.60:/home/patrick/Tools

Handige Opties

Tenslotte nog enkele handige opties om te gebruiken met rsync

  • -z Bij gebruik van rsync via een netwerk kan het handig zijn om de gegevens eerst te comprimeren voordat je deze over het netwerk verstuurd (om de netwerkoverdracht te verkleinen).
  • -P verkorte vorm voor --partial --progress , dit zal gedeeltelijk getransfereerde bestanden bewaren (en een "progress bar" weegeven), de partial optie laat toe om de gedeeltelijk verzonden bestanden te hervatten.
  • --delete Normaal gezien worden de bestanden in de "bron" directory niet aangepast, maar als je --delete gebruikt en je hebt een bestand in de "doel" directory gewist, zal deze ook in de "bron" directory gewist worden.

Meer informatie is te vinden in de manpages of de infopages.

1 r voor recursive
2 verbose