5.9. Synkronisering af data mellem to steder med rsync

At synkronisere data mellem to kataloger eller to maskiner er meget nyttigt. Tanken er at man har ca. samme data to steder - det kan enten være to kataloger på samme maskine eller to forskellige maskiner (f.eks. en laptop og en stationær maskine). Man ønsker så elegant at kunne overføre de ændrede filer fra den ene maskine til den anden - i forhold til sidste gang de to maskiner blev synkroniseret mod hinanden.

Det første man skal gøre er at installere rsync-pakken på ens maskine (tjek dette med rpm -q rsync) samt rsync på den anden maskine sammen med OpenSSH (Secure Shell) hvis man vil synkronisere mellem to maskiner. Opsætning og installation af OpenSSH er forklaret i "Linux - Friheden til sikkerhed på Internettet", der kan findes på cvs.linuxbog.dk. Man skal også sætte miljø-variablen RSYNC_rsh=ssh i brugerens opstartsfil (~/.bashrc "export RSYNC_rsh=ssh" eller ~/.tcshrc "setenv RSYNC_RSH ssh").

Programmet rsync er genialt - det sammenligner filer i de to ender via tjeksummer og opdaterer filen i den ene ende kun med ændringerne mellem de to filer. Ofte har man få ændringer - og dermed kan rsync spare rigtig meget tid og båndbredde.

Antag at brugerens email-katalog ~/mail evt. med en række under-kataloger findes på egen maskine (den vi kører kommandoer fra) samt maskinen asterix.

Antager vi først at asterix har de nyeste filer som skal synkroniseres over til vores egen maskine, da skriver vi:


[tyge@hven ~]$ rsync -azv asterix:mail ~
Bemærk at hvis der også er ændrede filer på egen maskine siden sidste synkronisering så overskrives disse.

Antager vi modsat at vores egen maskine har de nyeste filer som skal synkroniseres over til asterix, og vi vil slette eventuelle andre filer på asterix, da skriver vi


[tyge@hven ~]$ rsync -azv --delete ~ asterix:mail

Derefter vil asterix have eksakt de samme filer som vores maskine i ~/mail. Med parameteren --delete sørger vi også for at slette eventuelle filer på asterix under ~/mail som ikke findes på vores egen maskine.

Med de to ovennævnte eksempler vil filer blive overskrevet fra den ene maskine til den anden uanset hvilke filer der er de nyeste. Lad os nu antage at vi gerne vil synkronisere mail-katalogerne så det altid er de nyeste filer som findes begge steder.


Egen maskine:
mail/fil1   April 2
mail/fil2   April 3
mail/fil3   April 1

asterix:
mail/fil1   April 5
mail/fil2   April 1


Bagefter har begge maskiner:
mail/fil1   April 5
mail/fil2   April 3
mail/fil3   April 1

Dette gøres ved


[tyge@hven ~]$ rsync -auvz mail/ asterix:mail/
[tyge@hven ~]$ rsync -auvz asterix:mail/ mail/


Bemærk: At rsync fungerer forskeligt alt efter om der kommer / efter katalog-navnet. Pas på med dette.