Tips en Trucs 2011

Kennismaken met rsync

Eén van de handigste hulpmiddelen voor Linux (en andere *nix systemen) is rsync. Zoals de naam doet vermoeden, wordt rsync gebruikt om bestanden te synchroniseren naar externe en lokale computers. Je gebruikt rsync om bestanden naar externe systemen en terug te kopiëren, of om back-ups te maken op lokale gekoppelde harde schijven. Een blik op de man pagina's (handleiding) kan intimiderend overkomen, vandaar deze tip met de meest gebruikte opties waardoor je kunt bepalen of rsync iets voor je kan betekenen.

Een waarschuwing vooraf. Rsync is een zeer krachtig instrument om gegevens van de ene computer naar een andere computer te verplaatsen. Indien het verkeerd wordt gebruikt, wordt het een zeer efficiënt instrument om gegevens te overschrijven of te verwijderen. Hou rekening met het feit dat verwijderde bestanden zeer moeilijk of zelfs helemaal niet hersteld kunnen worden. En dit is juist het tegenovergestelde van wat we willen bereiken.

Om een rsync opdracht te testen, zeker de eerste keer, kun je de -n optie (of de volledig uitgeschreven optie --dry-run) gebruiken. Deze optie zal de rsync opdracht niet uitvoeren, maar enkel tonen wat de rsync opdracht zal doen bij het uitvoeren ervan, zonder daarbij veranderingen aan te brengen.

Wanneer gebruik je rsync?

Op computers voor Persoonlijk gebruik, kun je hulpmiddelen zoals iFolder of Dropbox gebruiken om eenvoudige back-ups te maken. Deze oplossingen zijn perfect om de map Documenten regelmatig te back-uppen. De zo geback-upte documenten zijn ook vanaf andere locaties bereikbaar. Handig als je op reis gaat of bij een computerpanne. Rsync gebruik je echter voor andere toepassingen.

Gebruik rsync bij het maken van back-ups zonder toezicht of complexe synchronisatie opdrachten. Rsync kan opdrachten uitvoeren die grafische programma's niet kunnen uitvoeren (of veel minder goed kunnen) -- zoals het synchroniseren van uw Persoonlijke map naar een lokaal aangesloten USB harde schijf. De grafische hulpmiddelen kunnen opdrachten uitvoeren die rsync niet kan, zoals het delen van bestanden met andere gebruikers en groepen of het automatisch synchroniseren van een map naar een externe computer.

Rsync gebruiken

De meeste distributies installeren rsync standaard. Indien dit niet het geval is, installeer je rsync met de pakketbeheerder van uw distributie. In openSUSE voer je de volgende opdracht uit:
sudo zypper in rsync

Om een bestand van punt A naar punt B te sturen, vertel je rsync een kopie te maken van de bron naar het doel. Dit kan een lokaal bestandsysteem of een extern systeem zijn. Ik gebruik rsync om een back-up te maken naar een lokale USB harde schijf die ik overal mee naar toe kan nemen. Daarnaast gebruik ik rsync om bestanden te back-up naar externe opslag op het internet. Deze website wordt eveneens met rsync geback-upt om op mijn computer gearchiveerd te worden.

Ziehier een eenvoudig voorbeeld om bestanden vanuit een persoonlijke map te kopiëren naar een USB schijf:
rsync -avh --exclude="*.iso" /home/gebruiker/map/ /media/diskid/gebruiker_backup/

Zoals je ziet, kun je na het streepje verschillende opties combineren. De -avh na rsync is hetzelfde als -a -v -h, maar veel eenvoudiger om te typen.

Laten we de opdracht ontleden. De rsync opdracht heeft vier opties en één argument. De opties zijn archive (-a), om bestanden met behoud van groep- en gebruiker eigendomsrechten recursief te kopiëren. Deze optie is meestal een goed idee.

Met de verbose optie (v) toont rsync zijn werkzaamheden op de terminal. Ik gebruik deze optie bij het testen van een rsync opdracht, voor ik het in een script gebruik. Als je deze optie gebruikt, toont rsync een lijst met aangepaste verzonden bestanden en de tijd die het daarvoor nodig had, hoeveel gegevens rsync heeft verzonden, enz. Zonder de -v optie toont rsync enkel een beknopte samenvatting van zijn werkzaamheden. Als je helemaal geen uitvoer wenst, gebruik je de optie -q (quiet), wat in scripts handig kan zijn.

De human-readable optie (h) zet rsync aan tot beter leesbare uitvoer. Zonder -h wordt alle groottes in bytes uitgedrukt, wat niet altijd gebruiksvriendelijk is. Merk op dat -h niet hetzelfde is --h. De optie --h toont de help van rsync.

De laatste optie sluit bestanden die eindigen op .iso uit. Ik download regelmatig de nieuwe milestone en release candidate versies van openSUSE, maar deze moeten niet op de USB schijf staan.

Back-ups zonder toezicht

Bestanden kopiëren naar een lokaal aangesloten schijf is handig, maar ik wil ook een back-up op een externe locatie voor het geval dat mijn laptop stuk gaat of gestolen wordt. Gelukkig overkwam het me nog niet, maar dit is misschien juist aan die back-ups te wijten. Back-ups zijn altijd een belangrijk deel van het werken met bestanden en computers. Vroeg of laat heb je ze nodig en zul je blij zijn dat je ze hebt.

Maak het jezelf gemakkelijk. Niets is vervelender dan telkens een wachtwoord te moeten ingeven als rsync een nieuwe verbinding naar de externe computer maakt. Je kunt een back-up zonder toezicht maken door op de externe computer SSH sleutels te gebruiken. Dit laat ook toe SSH sessies op de externe computer zonder wachtwoord te starten. Als de externe computer SSH toegang toelaat (openssh installeren, firewall openen en /etc/init.d/sshd starten) en je nog geen SSH sleutels gebruikt, maak je deze met de volgende opdrachten op de lokale computer aan:
ssh-keygen -t dsa

Deze opdracht maakt een publieke en private SSH sleutel aan. Daarbij moet je tweemaal een wachtzin opgeven. Druk telkens enkel op Return. Nu moet de publieke sleutel nog naar de externe computer gekopieerd worden. Dit kan met de opdracht
ssh-copy-id -i ~/.ssh/id_dsa.pub gebruiker@externe.computer

Dit script kopieert de publieke sleutel naar de externe computer. Dit werkt niet op computers waarbij de externe terminal uitgeschakeld is. In die gevallen moet je de publieke sleutel naar de map ~/.ssh/authorized_keys op de externe computer kopiëren.

Merk op dat iedereen die toegang tot uw lokale computer heeft (gewild of ongewild) zonder wachtwoord ook toegang heeft tot de externe computer.

Nu kan rsync gebruik maken van SSH om toegang tot de externe computer te krijgen. Dit doe je met de -e ssh optie:
rsync -avze ssh /home/gebruiker/map/ gebruiker@externe.computer:map/

Rsync kan ook andere methoden zoals rsh gebruiken, maar in de praktijk wordt hoofdzakelijk SSH gebruikt.

Let bij het opgeven van de mappen op de belangrijke slash achteraan. De in het voorbeeld gebruikte map /home/gebruiker/map/ is niet hetzelfde als /home/gebruiker/map. De extra slash zorgt ervoor dat rsync de inhoud van de map kopieert, maar niet de map zelf. Zonder de extra slash wordt de map in de doelmap aangemaakt.

De z optie zorgt voor het comprimeren van de verzonden gegevens.

Merk op dat dit ook in de andere richting werkt. Als je een back-up wilt maken van de externe computer naar de de lokale computer, verwissel je de externe en lokale argumenten:
rsync -avze ssh gebruiker@externe.computer:map/ /home/gebruiker/map/

Andere belangrijke opties

Om een exacte kopie van een map te bekomen, kun je de optie --delete aan de rsync opdracht toevoegen. Deze optie vergelijkt de mappen en verwijderd alle mappen en bestanden die niet in de bronmap voorkomen.

De --delete optie zorgt voor een identieke kopie van de twee mappen. Het nadeel ervan is dat als je per vergissing een bestand wist en je op regelmatige intervallen de mappen synchroniseert, dat je het gewiste bestand niet meer kunt herstellen.

De tegenhanger van --delete is --backup en --backup-dir of --suffix. Indien een bestand reeds in de doelmap aanwezig is, zal rsync eerst een back-up maken, voor het bestand overschreven wordt. Zelf gebruik ik dit weinig, maar het kan nuttig zijn.

Bij het maken van een back-up onder toezicht, gebruik ik graag de optie --progress. Zo kun je volgen hoe het kopiëren van elk bestand verloopt. Bij back-ups zonder toezicht is --progress niet erg waardevol.

Aan de slag

Veel nieuwe gebruikers haken af als ze zien hoeveel opties en argumenten een rsync opdracht kan gebruiken. Deze tip helpt u op weg. Raadpleeg verder de rsync map pagina's en zoek via google naar antwoorden en oplossingen van rsync-gebruikers.