Sådan bruger du Rsync til at synkronisere lokale og eksterne mapper

Indledning

Rsync, som står for “remote sync”, er et værktøj til ekstern og lokal filsynkronisering. Det bruger en algoritme, der minimerer mængden af data, der kopieres, ved kun at flytte de dele af filer, der er ændret.

I denne vejledning vil vi dække den grundlæggende brug af dette kraftfulde værktøj.

Hvad er Rsync?

Rsync er et meget fleksibelt netværksaktiveret synkroniseringsværktøj. På grund af dets allestedsnærværelse på Linux og Unix-lignende systemer og dets popularitet som et værktøj til systemskripter, er det som standard inkluderet i de fleste Linux-distributioner.

Grundlæggende syntaks

Den grundlæggende syntaks for rsync er meget ligetil og fungerer på en måde, der svarer til ssh, scp og cp.

Vi vil oprette to testmapper og nogle testfiler med følgende kommandoer:

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

Vi har nu en mappe kaldet dir1 med 100 tomme 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 også en tom mappe kaldet dir2.

For at synkronisere indholdet af dir1 til dir2 på det samme system skal du skrive:

  • rsync -r dir1/ dir2

Optionen -r betyder rekursiv, hvilket er nødvendigt for mappesynkronisering.

Vi kunne også bruge -a-flaget i stedet:

  • rsync -a dir1/ dir2

Muligheden -a er et kombinationsflag. Det står for “archive” og synkroniserer rekursivt og bevarer symbolske links, specielle filer og enhedsfiler, ændringstider, gruppe, ejer og tilladelser. Den er mere almindeligt anvendt end -r og er normalt den, du ønsker at bruge.

En vigtig bemærkning

Du har måske bemærket, at der er en afsluttende skråstreg (/) i slutningen af det første argument i ovenstående kommandoer:

  • rsync -a dir1/ dir2

Det er nødvendigt for at betyde “indholdet af dir1“. Alternativet, uden den afsluttende skråstreg, ville placere dir1, inklusive mappen, inden for dir2. Dette ville skabe et hierarki, der ser således ud:

  • ~/dir2/dir1/
  • ~/dir2/dir1/

Du skal altid dobbelttjekke dine argumenter, før du udfører en rsync-kommando. Rsync tilbyder en metode til at gøre dette ved at overdrage indstillingerne -n eller --dry-run. Flaget -v (for verbose) er også nødvendigt for at få det korrekte output:

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

Sammenlign dette output med det output, vi får, når vi fjerner den afsluttende skråstreg:

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

Du kan se her, at selve mappen overføres.

Sådan bruger du Rsync til at synkronisere med et fjernsystem

Synkronisering til et fjernsystem er trivielt, hvis du har SSH-adgang til fjernmaskinen og rsync installeret på begge sider. Når du har fået bekræftet SSH-adgang mellem de to maskiner, kan du synkronisere mappen dir1 fra tidligere til en fjerncomputer ved at bruge denne syntaks (bemærk, at vi ønsker at overføre den faktiske mappe i dette tilfælde, så vi udelader den afsluttende skråstreg):

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

Dette kaldes en “push”-operation, fordi den skubber en mappe fra det lokale system til et fjernsystem. Den modsatte operation er “pull”. Den bruges til at synkronisere en fjernmappe til det lokale system. Hvis dir1 var på fjernsystemet i stedet for vores lokale system, ville syntaksen være:

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

Lige cp og lignende værktøjer er kilden altid det første argument, og destinationen er altid det andet.

Nyttige muligheder for Rsync

Rsync indeholder mange muligheder for at ændre værktøjets standardadfærd. Vi har allerede diskuteret nogle af de mere nødvendige flag.

Hvis du overfører filer, der ikke allerede er blevet komprimeret, f.eks. tekstfiler, kan du reducere netværksoverførslen ved at tilføje komprimering med -z-indstillingen:

  • rsync -az source destination

Det -P-flag er meget nyttigt. Det kombinerer flagene --progress og --partial. Det første giver dig en statuslinje for overførslerne, og det andet giver dig mulighed for at genoptage afbrudte overførsler:

  • 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). . .

Hvis vi kører kommandoen igen, vil vi få et kortere output, fordi der ikke er foretaget nogen ændringer. Dette illustrerer rsyncs evne til at bruge ændringstider til at afgøre, om der er foretaget ændringer.

  • 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 opdatere ændringstiden på nogle af filerne og se, at rsync på intelligent vis kun kopierer de ændrede filer igen:

  • 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). . .

For at holde to mapper virkelig synkroniserede, er det nødvendigt at slette filer fra destinationsmappen, hvis de fjernes fra kilden. Som standard sletter rsync ikke noget fra destinationsmappen.

Vi kan ændre denne adfærd med indstillingen --delete. Før du bruger denne indstilling, skal du bruge indstillingen --dry-run og foretage testning for at forhindre tab af data:

  • rsync -a --delete source destination

Hvis du ønsker at udelukke visse filer eller mapper, der befinder sig i en mappe, du synkroniserer, kan du gøre det ved at angive dem i en kommasepareret liste efter indstillingen --exclude=:

  • rsync -a --exclude=pattern_to_exclude source destination

Hvis vi har angivet et mønster til udelukkelse, kan vi tilsidesætte denne udelukkelse for filer, der passer til et andet mønster, ved at bruge indstillingen --include=.

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

Endeligt kan rsync’s --backup-indstilling bruges til at gemme sikkerhedskopier af vigtige filer. Den bruges sammen med --backup-dir-indstillingen, som angiver den mappe, hvor backupfilerne skal gemmes.

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

Slutning

Rsync kan forenkle filoverførsler over netværksforbindelser og tilføje robusthed til synkronisering af lokale mapper. Fleksibiliteten i rsync gør det til en god mulighed for mange forskellige operationer på filniveau.

En beherskelse af rsync giver dig mulighed for at designe komplekse backup-operationer og opnå finkornet kontrol over, hvad der overføres og hvordan.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.