Hur man optimerar datasynkronisering med rsync
rsync är ett mångsidigt verktyg som förenklar filöverföring via nätverksanslutningar och påskyndar synkroniseringen av lokala kataloger. Den höga flexibiliteten gör synkroniseringsverktyget till ett utmärkt val för en rad olika åtgärder på filnivå.
Vad är rsync?
rsync, en förkortning av ”remote synchronisation”, är ett flexibelt och nätverkskompatibelt synkroniseringsverktyg för Linux. Det öppna källkodsprogrammet kan användas för att synkronisera filer och kataloger mellan lokala system eller över nätverk. Verktyget använder en differentiell dataöverföringsteknik, där endast de delar av data som faktiskt har ändrats överförs. Detta minimerar mängden datautbyte och påskyndar synkroniseringsprocessen avsevärt. Tack vare en mängd olika alternativ möjliggör rsync en precis kontroll av synkroniseringsbeteendet. Den flexibla syntaxen gör både enkla lokala kopior och komplexa nätverkssynkroniseringar möjliga.
Vad är syntaxen för rsync?
Kommandosyntaxen för rsync har en enkel struktur och liknar den för SSH, SCP och CP. Den grundläggande strukturen är följande:
rsync [OPTION] source destinationbashKällsökvägen som data ska synkroniseras från anges i source, medan målsökvägen anges som destination. rsync erbjuder en rad olika alternativ som användarna kan använda för att anpassa synkroniseringsprocessen efter sina behov. De vanligaste alternativen är:
-a(arkiv): Bevarar rekursiva filbehörigheter, tidsstämplar, grupper, ägare och speciella filegenskaper-v(verbose): Visar detaljerad information om synkroniseringsprocessen-r(rekursiv): Synkroniserar kataloger och deras innehåll rekursivt-u(update): Överför endast filer som är nyare än de som redan finns i målkatalogen-z(compress): Minskar datatrafiken över nätverket-n–itemize-changes: Visar en lista över de ändringar som ska göras--delete: Tar bort filer i målkatalogen som inte längre finns i källan--exclude: Utesluter vissa filer eller kataloger från synkroniseringen--dry-run: Simulerar synkroniseringsprocessen utan att faktiskt överföra filer--progress: Visar filöverföringens förlopp--partial: Filer som har överförts delvis finns kvar i målkatalogen om överföringen avbryts. När överföringen återupptas fortsätter 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 kodexempel skapar katalogen dir1 med 100 tomma testfiler och en andra tom katalog dir2:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashInnehållet i dir1 kan synkroniseras på samma system med dir2 med hjälp av alternativet -r:
$ rsync -r dir1/ dir2bashAlternativt kan alternativet -a användas, som synkroniserar rekursivt och innehåller symboliska länkar, speciella enhetsfiler, ändringstider, grupper, ägare och behörigheter:
$ rsync -a dir1/ dir2bashObservera: Snedstrecket (/) i slutet av källkatalogen i ett rsync-kommando är viktigt eftersom det anger att innehållet i katalogen ska synkroniseras, inte katalogen i sig.
$ rsync -a dir1/ dir2bashHär är ett exempel på resultatet:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashOm källkatalogen inte har en avslutande snedstreck kommer källkatalogen att kopieras till målkatalogen:
$ rsync -a dir1 dir2bashHär är 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
. . .bashGenom att använda snedstreck i slutet av källkatalogen säkerställer du att synkroniseringsprocessen körs som förväntat och att innehållet i källkatalogen hamnar i rätt målkatalog.
Hur man synkroniserar rsync med ett fjärrsystem
Det är vanligtvis inte svårt att synkronisera ett fjärrsystem med rsync, förutsatt att du har SSH-åtkomst till fjärrdatorn och har nödvändig autentiseringsinformation. Rsync använder ofta SSH (Secure Shell) för säker kommunikation med fjärrsystem. För att kunna använda detta verktyg måste det vara installerat på båda sidor.
Om SSH-åtkomst mellan de två datorerna verifieras kan mappen dir1 synkroniseras på en fjärrdator. I detta fall måste den faktiska katalogen överföras, vilket är anledningen till att den avslutande snedstrecken har utelämnats i följande kommando:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashOm en katalog flyttas från ett lokalt system till ett fjärrsystem kallas detta för en push-operation. När en fjärrkatalog synkroniseras 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_machinebashVilka andra alternativ finns det i rsync?
Det vanliga beteendet för rsync kan anpassas ytterligare med hjälp av alternativen nedan.
Överföra icke-komprimerade filer med rsync
Nätverksbelastningen vid överföring av okomprimerade filer kan minskas med hjälp av alternativ -z:
$ rsync -az source destinationbashVisa framsteg och återuppta avbrutna överföringar
Med -P kan du kombinera alternativen --progress och --partial. Detta ger dig en översikt över överföringarnas framskridande och gör det också möjligt att återuppta avbrutna överföringar samtidigt:
$ rsync -azP source destinationbashHär är 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)
. . .bashKö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å ändringstidpunkter.
$ rsync -azP source destinationbashHär är resultatet:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashHåll kataloger synkroniserade med rsync
För att säkerställa att två kataloger verkligen hålls synkroniserade är det nödvändigt att ta bort filer som har tagits bort från källkatalogen i målkatalogen. Men rsync tar inte bort filer från målkatalogen automatiskt. Detta kan ändras med alternativet --delete. Det är dock viktigt att använda detta alternativ med försiktighet, eftersom det tar bort filer i målkatalogen som inte längre finns i källkatalogen.
Innan du använder det här alternativet bör du använda alternativ --dry-run. Då kan du simulera synkroniseringsprocessen utan att radera några faktiska filer. På så sätt kan du säkerställa att endast önskade ändringar görs utan att viktiga data går förlorade av misstag:
$ rsync -a --delete source destinationbashUteslut filer och kataloger från synkronisering
I rsync kan du använda alternativet --exclude för att exkludera vissa filer och kataloger från synkroniseringen. Detta är användbart om du till exempel inte vill synkronisera temporära filer, loggfiler eller annat innehåll.
$ rsync -a --exclude=pattern_to_exclude source destinationbashOm du har angett ett mönster för att exkludera filer kan du använda alternativet --include= för att skriva över denna exkludering för vissa filer som matchar ett annat mönster.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashSpara säkerhetskopior med rsync
Med alternativet --backup kan du spara säkerhetskopior av viktiga filer. Det kan användas tillsammans med alternativet --backup-dir för att ange vilken katalog säkerhetskopiorna ska sparas i:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashDu hittar en detaljerad översikt över olika säkerhetskopieringsscenarier i vår artikel om säkerhetskopiering av servrar med rsync.