rsync er et allsidig verktøy som forenkler filoverføring via nettverkstilkoblinger og fremskynder synkroniseringen av lokale kataloger. Den store fleksibiliteten gjør synkroniseringsverktøyet til et utmerket valg for en rekke operasjoner på filnivå.

Hva er rsync?

rsync, en forkortelse for «remote synchronisation», er et fleksibelt og nettverkskompatibelt synkroniseringsverktøy for Linux. Dette åpen kildekode-programmet kan brukes til å synkronisere filer og mapper mellom lokale systemer eller over nettverk. Verktøyet benytter en teknikk for differensial dataoverføring, der kun de delene av dataene som faktisk er endret, overføres. Dette minimerer datamengden som utveksles og gjør synkroniseringsprosessen betydelig raskere. Takket være en rekke alternativer gir rsync mulighet for presis kontroll over synkroniseringsatferden. Den fleksible syntaksen gjør både enkle lokale kopier og komplekse nettverkssynkroniseringer mulig.

Hva er syntaksen for rsync?

Kommandosyntaksen til rsync har en enkel struktur og ligner på syntaksen til SSH, SCP og CP. Den grunnleggende strukturen er som følger:

rsync [OPTION] source destination
bash

Kildebanen som dataene skal synkroniseres fra, angis i source, mens målbanen angis i destination. rsync tilbyr en rekke alternativer som brukerne kan benytte for å tilpasse synkroniseringsprosessen til sine behov. De mest brukte alternativene er:

  • -a (arkiver): Bevarer rekursive filrettigheter, tidsstempler, grupper, eiere og spesielle filegenskaper
  • -v (detaljert): Viser detaljert informasjon om synkroniseringsprosessen
  • -r (rekursiv): Synkroniserer kataloger og innholdet i dem rekursivt
  • -u (update): Overfører kun filer som er nyere enn de som allerede finnes i målkatalogen
  • -z (compress): Reduserer datatrafikken over nettverket
  • -n –itemize-changes: Viser en liste over endringene som skal gjøres
  • --delete: Sletter filer i målkatalogen som ikke lenger finnes i kilden
  • --exclude: Ekskluderer bestemte filer eller kataloger fra synkroniseringen
  • --dry-run: Simulerer synkroniseringsprosessen uten å overføre filer
  • --progress: Viser fremdriften i filoverføringen
  • --partial: Filer som er delvis overført, forblir i målkatalogen hvis overføringen avbrytes. Når overføringen gjenopptas, fortsetter filen fra den siste tilstanden

Eksempler på rsync-syntaks

Følgende eksempler på rsync-syntaks skal gjøre det lettere å forstå hvordan kommandoen brukes. Følgende kodeeksempel oppretter katalogen dir1 med 100 tomme testfiler og en annen tom katalog, dir2:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

Innholdet i dir1 kan synkroniseres på samme system med dir2 ved hjelp av -r:

$ rsync -r dir1/ dir2
bash

Alternativt kan alternativet -a brukes, som synkroniserer rekursivt og inkluderer symbolske lenker, spesielle enhetsfiler, endringstidspunkter, grupper, eiere og tillatelser:

$ rsync -a dir1/ dir2
bash

Merk: Skråstreken (/) på slutten av kildemappen i en rsync-kommando er viktig, fordi den angir at innholdet i mappen skal synkroniseres, ikke selve mappen.

$ rsync -a dir1/ dir2
bash

Her er et eksempel på resultatet:

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

Hvis kildemappen ikke har en avsluttende skråstrek, vil kildemappen bli kopiert til målmappen:

$ rsync -a dir1 dir2
bash

Her er resultatet:

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

Ved å bruke skråstreken på slutten av kildemappen sikrer du at synkroniseringsprosessen gjennomføres som forventet, og at innholdet i kildemappen havner i riktig målmappe.

Hvordan synkronisere rsync med et eksternt system

Det er vanligvis ikke vanskelig å synkronisere et eksternt system med rsync, forutsatt at du har SSH-tilgang til den eksterne datamaskinen og har den nødvendige påloggingsinformasjonen. Rsync bruker ofte SSH (Secure Shell) for sikker kommunikasjon med eksterne systemer. For å kunne bruke dette verktøyet må det være installert på begge sider.

Hvis SSH-tilgangen mellom de to datamaskinene er bekreftet, kan mappen dir1 synkroniseres på en ekstern datamaskin. I dette tilfellet må selve katalogen overføres, og det er derfor den avsluttende skråstreken er utelatt i følgende kommando:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Hvis en katalog flyttes fra et lokalt system til et eksternt system, kalles dette en push-operasjon. Når en ekstern katalog derimot synkroniseres med et lokalt system, kalles dette en pull-operasjon. Syntaksen for dette er som følger:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash

Hvilke andre alternativer finnes det i rsync?

Standardinnstillingene til rsync kan tilpasses ytterligere ved hjelp av alternativene nedenfor.

Overføring av ikke-komprimerte filer med rsync

Nettverksbelastningen ved overføring av ikke-komprimerte filer kan reduseres ved å bruke alternativ -z:

$ rsync -az source destination
bash

Visning av fremdrift og gjenopptakelse av avbrutte overføringer

Med -P kan du kombinere alternativene --progress og --partial. Dette gir deg oversikt over overføringene og lar deg samtidig gjenoppta avbrutte overføringer:

$ rsync -azP source destination
bash

Her er resultatet:

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

Kjør kommandoen på nytt for å få et kortere utdata. Dette gjør at rsync kan avgjøre om det er gjort endringer ut fra endringstidspunktene.

$ rsync -azP source destination
bash

Her er resultatet:

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

Hold katalogene synkronisert med rsync

For å sikre at to kataloger faktisk holdes synkronisert, er det nødvendig å slette filer som er fjernet fra kildekatalogen i målkatalogen. Men rsync sletter ikke filer fra målkatalogen automatisk. Dette kan endres ved hjelp av alternativet --delete. Det er imidlertid viktig å bruke dette alternativet med forsiktighet, siden det sletter filer i målkatalogen som ikke lenger finnes i kilden.

Før du bruker dette alternativet, bør du bruke alternativ --dry-run. Dette gjør at du kan simulere synkroniseringsprosessen uten å slette noen faktiske filer. På den måten kan du sikre at bare de ønskede endringene blir gjort, uten at du ved et uhell mister viktige data:

$ rsync -a --delete source destination
bash

Ekskluder filer og mapper fra synkroniseringen

I rsync kan du bruke alternativet --exclude til å ekskludere bestemte filer og mapper fra synkroniseringen. Dette er nyttig hvis du for eksempel ikke ønsker å synkronisere midlertidige filer, loggfiler eller annet innhold.

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

Hvis du har angitt et mønster for å ekskludere filer, kan du bruke alternativ --include= til å overstyre denne ekskluderingen for bestemte filer som samsvarer med et annet mønster.

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

Lagre sikkerhetskopier med rsync

Alternativ --backup lar deg lagre sikkerhetskopier av viktige filer. Det kan brukes sammen med alternativ --backup-dir for å angi mappen der sikkerhetskopiene skal lagres:

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

Du finner en detaljert oversikt over de ulike sikkerhetskopieringsscenariene i artikkelen vår om sikkerhetskopiering av servere med rsync.

Go to Main Menu