Sådan optimeres datasynkronisering med rsync
rsync er et alsidigt værktøj, der forenkler filoverførsel via netværksforbindelser og fremskynder synkroniseringen af lokale mapper. Den store fleksibilitet gør synkroniseringsværktøjet til et fremragende valg til en lang række opgaver på filniveau.
Hvad er rsync?
rsync, en forkortelse for »remote synchronisation«, er et fleksibelt og netværkskompatibelt synkroniseringsværktøj til Linux. Dette open source-program kan bruges til at synkronisere filer og mapper mellem lokale systemer eller på tværs af netværk. Værktøjet anvender en teknik til differentiel dataoverførsel, hvor kun de dele af dataene, der rent faktisk er blevet ændret, overføres. Dette minimerer mængden af dataudveksling og fremskynder synkroniseringsprocessen betydeligt. Takket være en række forskellige indstillinger giver rsync mulighed for præcis styring af synkroniseringsadfærden. Den fleksible syntaks gør både enkle lokale kopier og komplekse netværkssynkroniseringer mulige.
Hvad er syntaksen for rsync?
Kommandosyntaksen i rsync har en enkel struktur og ligner den i SSH, SCP og CP. Den grundlæggende struktur er som følger:
rsync [OPTION] source destinationbashDen kildevej, som dataene skal synkroniseres fra, indtastes i source, mens destinationsvejen angives i destination. rsync tilbyder en række indstillinger, som brugerne kan anvende til at tilpasse synkroniseringsprocessen til deres behov. De mest anvendte indstillinger er:
-a(arkiver): Bevarer rekursive filrettigheder, tidsstempler, grupper, ejere og særlige filegenskaber-v(detaljeret): Viser detaljerede oplysninger om synkroniseringsprocessen-r(rekursiv): Synkroniserer mapper og deres indhold rekursivt-u(update): Overfører kun filer, der er nyere end dem, der allerede findes i målmappen-z(compress): Reducerer datatrafikken over netværket-n–itemize-changes: Viser en liste over de ændringer, der skal foretages--delete: Sletter filer i målmappen, der ikke længere findes i kilden--exclude: Udelukker bestemte filer eller mapper fra synkroniseringen--dry-run: Simulerer synkroniseringsprocessen uden faktisk at overføre filer--progress: Viser fremskridtet i filoverførslen--partial: Filer, der er blevet delvist overført, forbliver i målmappen, hvis overførslen afbrydes. Når overførslen genoptages, fortsættes filen fra den sidste tilstand
Eksempler på rsync-syntaks
Følgende eksempler på rsync-syntaks bør gøre det lettere at forstå, hvordan kommandoen bruges. I det følgende kodeeksempel oprettes mappen dir1, der indeholder 100 tomme testfiler, samt en anden tom mappe, dir2:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashIndholdet i dir1 kan synkroniseres på samme system med dir2 ved hjælp af -r:
$ rsync -r dir1/ dir2bashAlternativt kan man bruge indstillingen -a, som synkroniserer rekursivt og omfatter symbolske links, specielle enhedsfiler, ændringstidspunkter, grupper, ejere og tilladelser:
$ rsync -a dir1/ dir2bashBemærk: Skråstregen (/) i slutningen af kildemappen i en rsync-kommando er vigtig, da den angiver , at det er indholdet af mappen, der skal synkroniseres, og ikke selve mappen.
$ rsync -a dir1/ dir2bashHer er et eksempel på resultatet:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashHvis kildemappen ikke slutter med en skråstreg, kopieres kildemappen til målmappen:
$ rsync -a dir1 dir2bashHer 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
. . .bashVed at bruge skråstregen i slutningen af kildemappen sikrer man, at synkroniseringsprocessen forløber som forventet, og at indholdet af kildemappen ender i den rigtige målmappe.
Sådan synkroniserer du rsync med et fjernsystem
Det er som regel ikke svært at synkronisere et fjernsystem med rsync, forudsat at du har SSH-adgang til fjerncomputeren og de nødvendige godkendelsesoplysninger. Rsync bruger ofte SSH (Secure Shell) til sikker kommunikation med fjernsystemer. For at kunne bruge dette værktøj skal det være installeret på begge sider.
Hvis SSH-adgangen mellem de to computere er bekræftet, kan mappen dir1 synkroniseres på en fjerncomputer. I dette tilfælde skal selve mappen overføres, og derfor er den afsluttende skråstreg udeladt i følgende kommando:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashHvis en mappe flyttes fra et lokalt system til et fjernsystem, kaldes dette en push-operation. Når en fjernmappe derimod synkroniseres med et lokalt system, kaldes dette en pull-operation. Syntaksen herfor er som følger:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machinebashHvilke andre muligheder findes der i rsync?
rsyncs standardadfærd kan tilpasses yderligere ved hjælp af nedenstående indstillinger.
Overførsel af ikke-komprimerede filer med rsync
Netværksbelastningen ved overførsel af ikke-komprimerede filer kan reduceres ved hjælp af indstilling -z:
$ rsync -az source destinationbashVisning af fremskridt og genoptagelse af afbrudte transmissioner
Med -P kan du kombinere indstillingerne --progress og --partial. Det giver dig et overblik over, hvor langt overførslerne er nået, og giver dig samtidig mulighed for at genoptage afbrudte overførsler:
$ rsync -azP source destinationbashHer 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)
. . .bashUdfør kommandoen igen for at få et kortere output. Dette gør det muligt for rsync at afgøre, om der er foretaget ændringer, ud fra ændringstidspunkterne.
$ rsync -azP source destinationbashHer er resultatet:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashHold mapper synkroniseret med rsync
For at sikre, at to mapper rent faktisk holdes synkroniseret, er det nødvendigt at slette filer, der er blevet fjernet fra kildemappen, i målmappen. Men rsync sletter ikke automatisk filer fra målmappen. Dette kan ændres med parameteren --delete. Det er dog vigtigt at bruge denne parameter med forsigtighed, da den sletter filer i målmappen, som ikke længere findes i kildemappen.
Inden du bruger denne indstilling, bør du benytte indstilling --dry-run. Dette giver dig mulighed for at simulere synkroniseringsprocessen uden at slette nogen faktiske filer. På den måde kan du sikre dig, at kun de ønskede ændringer foretages, uden at du ved et uheld mister vigtige data:
$ rsync -a --delete source destinationbashUdelad filer og mapper fra synkroniseringen
I rsync kan du bruge parameteren --exclude til at udelukke bestemte filer og mapper fra synkroniseringen. Dette er nyttigt, hvis du f.eks. ikke ønsker at synkronisere midlertidige filer, logfiler eller andet indhold.
$ rsync -a --exclude=pattern_to_exclude source destinationbashHvis du har angivet et mønster til udelukkelse af filer, kan du bruge indstillingen --include= til at tilsidesætte denne udelukkelse for bestemte filer, der matcher et andet mønster.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashGem sikkerhedskopier med rsync
Med indstilling --backup kan du gemme sikkerhedskopier af vigtige filer. Den kan bruges sammen med indstilling --backup-dir til at angive det bibliotek, hvor sikkerhedskopierne skal gemmes:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashDu kan finde en detaljeret oversigt over de forskellige sikkerhedskopieringsscenarier i vores artikel om sikkerhedskopiering af servere med rsync.