Hur du använder Rsync för att synkronisera lokala och fjärrkataloger

Introduktion

Rsync, som står för ”remote sync” (fjärrsynkronisering), är ett verktyg för fjärr- och lokalsynkronisering av filer. Det använder en algoritm som minimerar mängden data som kopieras genom att endast flytta de delar av filerna som har ändrats.

I den här guiden kommer vi att täcka den grundläggande användningen av det här kraftfulla verktyget.

Vad är Rsync?

Rsync är ett mycket flexibelt nätverksaktiverat synkroniseringsverktyg. På grund av dess allestädes närvarande på Linux och Unix-liknande system och dess popularitet som ett verktyg för systemskript ingår det som standard i de flesta Linuxdistributioner.

Basisk syntax

Den grundläggande syntaxen för rsync är mycket okomplicerad och fungerar på ett sätt som liknar ssh, scp och cp.

Vi kommer att skapa två testkataloger och några testfiler med följande kommandon:

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

Vi har nu en katalog som heter dir1 med 100 tomma filer i den.

  • ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

Vi har också en tom katalog som heter dir2.

För att synkronisera innehållet i dir1 till dir2 på samma system skriver du:

  • rsync -r dir1/ dir2

Objektet -r betyder rekursiv, vilket är nödvändigt för katalogsynkronisering.

Vi skulle också kunna använda flaggan -a i stället:

  • rsync -a dir1/ dir2

Optionen -a är en kombinationsflagga. Det står för ”archive” och synkroniserar rekursivt och bevarar symboliska länkar, special- och enhetsfiler, ändringstider, grupp, ägare och behörigheter. Det är vanligare än -r och är oftast det du vill använda.

En viktig anmärkning

Du kanske har lagt märke till att det finns ett avslutande snedstreck (/) i slutet av det första argumentet i ovanstående kommandon:

  • rsync -a dir1/ dir2

Detta är nödvändigt för att betyda ”innehållet i dir1”. Alternativet, utan det avslutande snedstrecket, skulle placera dir1, inklusive katalogen, inom dir2. Detta skulle skapa en hierarki som ser ut på följande sätt:

  • ~/dir2/dir1/

Du ska alltid dubbelkolla dina argument innan du utför ett rsync-kommando. Rsync tillhandahåller en metod för att göra detta genom att överlämna alternativen -n eller --dry-run. Flaggan -v (för verbose) är också nödvändig för att få lämplig utdata:

  • rsync -anv dir1/ dir2
Output
sending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .

Växla denna utdata med den utdata vi får när vi tar bort det avslutande snedstrecket:

  • rsync -anv dir1 dir2
Output
sending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .

Du kan se här att själva katalogen överförs.

Hur du använder Rsync för att synkronisera med ett fjärrsystem

Synkronisering till ett fjärrsystem är trivialt om du har SSH-åtkomst till fjärrmaskinen och rsync installerat på båda sidor. När du har SSH-åtkomst verifierad mellan de två maskinerna kan du synkronisera mappen dir1 från tidigare till en fjärrdator genom att använda den här syntaxen (observera att vi vill överföra den faktiska katalogen i det här fallet, så vi utelämnar det avslutande snedstrecket):

  • rsync -a ~/dir1 username@remote_host:destination_directory

Det här kallas för en ”push”-operation eftersom den pushar en katalog från det lokala systemet till ett fjärrsystem. Den motsatta operationen är ”pull”. Den används för att synkronisera en fjärrkatalog till det lokala systemet. Om dir1 fanns på fjärrsystemet istället för på vårt lokala system skulle syntaxen vara:

  • rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

Likt cp och liknande verktyg är källan alltid det första argumentet och destinationen alltid det andra.

Nyttiga alternativ för Rsync

Rsync tillhandahåller många alternativ för att ändra verktygets standardbeteende. Vi har redan diskuterat några av de mer nödvändiga flaggorna.

Om du överför filer som inte redan har komprimerats, till exempel textfiler, kan du minska nätverksöverföringen genom att lägga till komprimering med alternativet -z:

  • rsync -az source destination

Flaggan -P är mycket användbar. Den kombinerar flaggorna --progress och --partial. Den första av dessa ger dig en framstegsindikator för överföringarna och den andra låter dig återuppta avbrutna överföringar:

  • rsync -azP source destination
Output
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). . .

Om vi kör kommandot igen kommer vi att få en kortare utskrift, eftersom inga ändringar har gjorts. Detta illustrerar rsyncs förmåga att använda modifieringstider för att avgöra om ändringar har gjorts.

  • rsync -azP source destination
Output
sending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00

Vi kan uppdatera modifieringstiden för några av filerna och se att rsync på ett intelligent sätt återkopierar endast de ändrade filerna:

  • touch dir1/file{1..10}
  • rsync -azP source destination
Output
sending incremental file listfile1 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)file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101). . .

För att hålla två kataloger verkligen synkroniserade är det nödvändigt att radera filer från destinationskatalogen om de tas bort från källan. Som standard tar rsync inte bort något från destinationskatalogen.

Vi kan ändra detta beteende med alternativet --delete. Innan du använder det här alternativet bör du använda alternativet --dry-run och göra tester för att förhindra dataförlust:

  • rsync -a --delete source destination

Om du vill utesluta vissa filer eller kataloger som finns i en katalog som du synkroniserar kan du göra det genom att ange dem i en kommaseparerad lista som följer efter alternativet --exclude=:

  • rsync -a --exclude=pattern_to_exclude source destination

Om vi har angett ett mönster som ska uteslutas kan vi åsidosätta den uteslutningen för filer som matchar ett annat mönster genom att använda alternativet --include=.

  • rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

Slutligt kan rsyncs --backup-alternativ användas för att lagra säkerhetskopior av viktiga filer. Det används tillsammans med alternativet --backup-dir, som anger den katalog där säkerhetskopiorna ska lagras.

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

Slutsats

Rsync kan förenkla filöverföringar över nätverksanslutningar och ge robusthet åt synkronisering av lokala kataloger. Flexibiliteten hos rsync gör det till ett bra alternativ för många olika operationer på filnivå.

En behärskning av rsync gör att du kan utforma komplexa säkerhetskopieringsoperationer och få finkornig kontroll över vad som överförs och hur.

Lämna ett svar

Din e-postadress kommer inte publiceras.