rsync är ett mångsidigt verktyg som förenklar filö­ver­fö­ring via nät­verk­san­slut­ning­ar och påskyndar syn­kro­ni­se­ring­en av lokala kataloger. Den höga flex­i­bi­li­te­ten gör syn­kro­ni­se­rings­verk­ty­get till ett utmärkt val för en rad olika åtgärder på filnivå.

Vad är rsync?

rsync, en för­kort­ning av ”remote synchro­ni­sa­tion”, är ett flexibelt och nät­verks­kom­pa­ti­belt syn­kro­ni­se­rings­verk­tyg för Linux. Det öppna käll­kods­pro­gram­met kan användas för att syn­kro­ni­se­ra filer och kataloger mellan lokala system eller över nätverk. Verktyget använder en dif­fe­ren­ti­ell da­taö­ver­fö­rings­tek­nik, där endast de delar av data som faktiskt har ändrats överförs. Detta minimerar mängden da­ta­ut­byte och påskyndar syn­kro­ni­se­rings­pro­ces­sen avsevärt. Tack vare en mängd olika al­ter­na­tiv möjliggör rsync en precis kontroll av syn­kro­ni­se­rings­be­te­en­det. Den flexibla syntaxen gör både enkla lokala kopior och komplexa nät­verks­syn­kro­ni­se­ring­ar möjliga.

Vad är syntaxen för rsync?

Kom­man­do­syn­tax­en för rsync har en enkel struktur och liknar den för SSH, SCP och CP. Den grund­läg­gan­de struk­tu­ren är följande:

rsync [OPTION] source destination
bash

Käll­sök­vä­gen som data ska syn­kro­ni­se­ras från anges i source, medan mål­sök­vä­gen anges som destination. rsync erbjuder en rad olika al­ter­na­tiv som an­vän­dar­na kan använda för att anpassa syn­kro­ni­se­rings­pro­ces­sen efter sina behov. De van­li­gas­te al­ter­na­ti­ven är:

  • -a (arkiv): Bevarar rekursiva fil­be­hö­rig­he­ter, tids­stämp­lar, grupper, ägare och speciella fi­le­gen­ska­per
  • -v (verbose): Visar de­tal­je­rad in­for­ma­tion om syn­kro­ni­se­rings­pro­ces­sen
  • -r (rekursiv): Syn­kro­ni­se­rar kataloger och deras innehåll rekursivt
  • -u (update): Överför endast filer som är nyare än de som redan finns i mål­ka­ta­lo­gen
  • -z (compress): Minskar da­ta­tra­fi­ken över nätverket
  • -n –itemize-changes: Visar en lista över de ändringar som ska göras
  • --delete: Tar bort filer i mål­ka­ta­lo­gen som inte längre finns i källan
  • --exclude: Utesluter vissa filer eller kataloger från syn­kro­ni­se­ring­en
  • --dry-run: Simulerar syn­kro­ni­se­rings­pro­ces­sen utan att faktiskt överföra filer
  • --progress: Visar filö­ver­fö­ring­ens förlopp
  • --partial: Filer som har överförts delvis finns kvar i mål­ka­ta­lo­gen om över­fö­ring­en avbryts. När över­fö­ring­en åter­upp­tas fort­sät­ter filen från sitt senaste tillstånd

Exempel på rsync-syntax

Följande exempel på rsync-syntax bör göra det lättare att förstå hur kommandot används. Följande ko­dex­em­pel skapar katalogen dir1 med 100 tomma testfiler och en andra tom katalog dir2:

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

In­ne­hål­let i dir1 kan syn­kro­ni­se­ras på samma system med dir2 med hjälp av al­ter­na­ti­vet -r:

$ rsync -r dir1/ dir2
bash

Al­ter­na­tivt kan al­ter­na­ti­vet -a användas, som syn­kro­ni­se­rar rekursivt och in­ne­hål­ler sym­bo­lis­ka länkar, speciella en­hets­fi­ler, änd­rings­ti­der, grupper, ägare och be­hö­rig­he­ter:

$ rsync -a dir1/ dir2
bash

Observera: Sned­strec­ket (/) i slutet av käll­ka­ta­lo­gen i ett rsync-kommando är viktigt eftersom det anger att in­ne­hål­let i katalogen ska syn­kro­ni­se­ras, inte katalogen i sig.

$ rsync -a dir1/ dir2
bash

Här är ett exempel på re­sul­ta­tet:

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

Om käll­ka­ta­lo­gen inte har en av­slu­tan­de sned­streck kommer käll­ka­ta­lo­gen att kopieras till mål­ka­ta­lo­gen:

$ rsync -a dir1 dir2
bash

Här är re­sul­ta­tet:

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

Genom att använda sned­streck i slutet av käll­ka­ta­lo­gen sä­ker­stäl­ler du att syn­kro­ni­se­rings­pro­ces­sen körs som förväntat och att in­ne­hål­let i käll­ka­ta­lo­gen hamnar i rätt mål­ka­ta­log.

Hur man syn­kro­ni­se­rar rsync med ett fjärr­sy­stem

Det är van­ligt­vis inte svårt att syn­kro­ni­se­ra ett fjärr­sy­stem med rsync, förutsatt att du har SSH-åtkomst till fjärr­da­torn och har nödvändig au­ten­ti­se­rings­in­for­ma­tion. Rsync använder ofta SSH (Secure Shell) för säker kom­mu­ni­ka­tion med fjärr­sy­stem. För att kunna använda detta verktyg måste det vara in­stal­le­rat på båda sidor.

Om SSH-åtkomst mellan de två datorerna ve­ri­fie­ras kan mappen dir1 syn­kro­ni­se­ras på en fjärr­da­tor. I detta fall måste den faktiska katalogen överföras, vilket är an­led­ning­en till att den av­slu­tan­de sned­strec­ken har ute­läm­nats i följande kommando:

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

Om en katalog flyttas från ett lokalt system till ett fjärr­sy­stem kallas detta för en push-operation. När en fjärr­ka­ta­log syn­kro­ni­se­ras med ett lokalt system kallas detta däremot för en pull-operation. Syntaxen för detta är följande:

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

Vilka andra al­ter­na­tiv finns det i rsync?

Det vanliga beteendet för rsync kan anpassas yt­ter­li­ga­re med hjälp av al­ter­na­ti­ven nedan.

Överföra icke-kom­pri­me­ra­de filer med rsync

Nät­verks­be­last­ning­en vid över­fö­ring av okom­pri­me­ra­de filer kan minskas med hjälp av al­ter­na­tiv -z:

$ rsync -az source destination
bash

Visa framsteg och återuppta avbrutna över­fö­ring­ar

Med -P kan du kombinera al­ter­na­ti­ven --progress och --partial. Detta ger dig en översikt över över­fö­ring­ar­nas fram­skri­dan­de och gör det också möjligt att återuppta avbrutna över­fö­ring­ar samtidigt:

$ rsync -azP source destination
bash

Här är re­sul­ta­tet:

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

Kör kommandot igen för att få ett kortare resultat. Detta gör det möjligt för rsync att avgöra om ändringar har gjorts baserat på änd­rings­tid­punk­ter.

$ rsync -azP source destination
bash

Här är re­sul­ta­tet:

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

Håll kataloger syn­kro­ni­se­ra­de med rsync

För att sä­ker­stäl­la att två kataloger verkligen hålls syn­kro­ni­se­ra­de är det nöd­vän­digt att ta bort filer som har tagits bort från käll­ka­ta­lo­gen i mål­ka­ta­lo­gen. Men rsync tar inte bort filer från mål­ka­ta­lo­gen au­to­ma­tiskt. Detta kan ändras med al­ter­na­ti­vet --delete. Det är dock viktigt att använda detta al­ter­na­tiv med för­sik­tig­het, eftersom det tar bort filer i mål­ka­ta­lo­gen som inte längre finns i käll­ka­ta­lo­gen.

Innan du använder det här al­ter­na­ti­vet bör du använda al­ter­na­tiv --dry-run. Då kan du simulera syn­kro­ni­se­rings­pro­ces­sen utan att radera några faktiska filer. På så sätt kan du sä­ker­stäl­la att endast önskade ändringar görs utan att viktiga data går förlorade av misstag:

$ rsync -a --delete source destination
bash

Uteslut filer och kataloger från syn­kro­ni­se­ring

I rsync kan du använda al­ter­na­ti­vet --exclude för att exkludera vissa filer och kataloger från syn­kro­ni­se­ring­en. Detta är an­vänd­bart om du till exempel inte vill syn­kro­ni­se­ra temporära filer, loggfiler eller annat innehåll.

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

Om du har angett ett mönster för att exkludera filer kan du använda al­ter­na­ti­vet --include= för att skriva över denna ex­klu­de­ring för vissa filer som matchar ett annat mönster.

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

Spara sä­ker­hetsko­pi­or med rsync

Med al­ter­na­ti­vet --backup kan du spara sä­ker­hetsko­pi­or av viktiga filer. Det kan användas till­sam­mans med al­ter­na­ti­vet --backup-dir för att ange vilken katalog sä­ker­hetsko­pi­or­na ska sparas i:

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

Du hittar en de­tal­je­rad översikt över olika sä­ker­hetsko­pi­e­rings­sce­na­ri­er i vår artikel om sä­ker­hetsko­pi­e­ring av servrar med rsync.

Gå till huvudmeny