Inleiding
Rsync, wat staat voor “remote sync”, is een hulpmiddel voor het synchroniseren van bestanden op afstand en lokaal. Het gebruikt een algoritme dat de hoeveelheid gekopieerde gegevens minimaliseert door alleen de delen van bestanden te verplaatsen die zijn gewijzigd.
In deze gids zullen we het basisgebruik van dit krachtige hulpprogramma behandelen.
Wat is Rsync?
Rsync is een zeer flexibel netwerk-geschikt synchronisatiegereedschap. Door zijn alomtegenwoordigheid op Linux en Unix-achtige systemen en zijn populariteit als een tool voor systeem scripts, is het standaard opgenomen in de meeste Linux distributies.
Basissyntax
De basissyntax van rsync
is zeer rechttoe rechtaan, en werkt op een manier die vergelijkbaar is met ssh, scp, en cp.
We zullen twee test directories en een aantal test bestanden maken met de volgende commando’s:
- cd ~
- mkdir dir1
- mkdir dir2
- touch dir1/file{1..100}
We hebben nu een directory genaamd dir1
met 100 lege bestanden erin.
- ls dir1
Outputfile1 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
We hebben ook een lege directory genaamd dir2
.
Om de inhoud van dir1
te synchroniseren met dir2
op hetzelfde systeem, type:
- rsync -r dir1/ dir2
De -r
optie betekent recursief, wat nodig is voor directory synchronisatie.
We zouden in plaats daarvan ook de -a
vlag kunnen gebruiken:
- rsync -a dir1/ dir2
De -a
optie is een combinatie vlag. Het staat voor “archive” en synchroniseert recursief en bewaart symbolische koppelingen, speciale en apparaat bestanden, wijzigingstijden, groep, eigenaar, en permissies. Deze optie wordt vaker gebruikt dan -r
en is meestal wat u wilt gebruiken.
Een belangrijke opmerking
Het is u misschien opgevallen dat er een schuine streep achteraan staat (/
) aan het eind van het eerste argument in de bovenstaande commando’s:
- rsync -a dir1/ dir2
Dit is nodig om “de inhoud van dir1
” te betekenen. Het alternatief, zonder de schuine streep achteraan, zou dir1
, inclusief de directory, binnen dir2
plaatsen. Dit zou een hiërarchie creëren die er als volgt uitziet:
- ~/dir2/dir1/
Controleer altijd dubbel uw argumenten alvorens een rsync commando uit te voeren. Rsync biedt een methode om dit te doen door de -n
of --dry-run
opties door te geven. De -v
vlag (voor verbose) is ook nodig om de juiste uitvoer te krijgen:
- rsync -anv dir1/ dir2
Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
Vergelijk deze uitvoer met de uitvoer die we krijgen als we de slash achteraan verwijderen:
- rsync -anv dir1 dir2
Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
U kunt hier zien dat de directory zelf wordt overgezet.
Hoe Rsync te gebruiken om te synchroniseren met een systeem op afstand
Synchroniseren met een systeem op afstand is triviaal als u SSH toegang heeft tot de machine op afstand en rsync
aan beide kanten geïnstalleerd heeft. Zodra u SSH toegang tussen de twee machines geverifieerd hebt, kunt u de dir1
map van eerder naar een computer op afstand synchroniseren door deze syntax te gebruiken (merk op dat we de eigenlijke directory in dit geval willen overbrengen, dus laten we de schuine streep achteraan weg):
- rsync -a ~/dir1 username@remote_host:destination_directory
Dit wordt een “push” operatie genoemd omdat het een directory van het lokale systeem naar een systeem op afstand duwt. De tegenovergestelde operatie is “pull”. Deze wordt gebruikt om een directory op afstand te synchroniseren met het lokale systeem. Als de dir1
op het systeem op afstand zou staan in plaats van op ons lokale systeem, dan zou de syntaxis zijn:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Net als bij cp
en vergelijkbare tools, is de bron altijd het eerste argument, en de bestemming altijd het tweede.
Gebruikelijke opties voor Rsync
Rsync biedt veel opties om het standaard gedrag van het hulpprogramma te veranderen. We hebben al enkele van de meer noodzakelijke vlaggen besproken.
Als u bestanden overdraagt die nog niet gecomprimeerd zijn, zoals tekstbestanden, kunt u de netwerkoverdracht verminderen door compressie toe te voegen met de -z
optie:
- rsync -az source destination
De -P
vlag is erg nuttig. Het combineert de vlaggen --progress
en --partial
. De eerste geeft u een voortgangsbalk voor de overdrachten en de tweede staat u toe om onderbroken overdrachten te hervatten:
- rsync -azP source destination
Outputsending 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). . .
Als we het commando opnieuw uitvoeren, krijgen we een kortere uitvoer, omdat er geen wijzigingen zijn aangebracht. Dit illustreert rsync’s mogelijkheid om modificatietijden te gebruiken om te bepalen of er wijzigingen zijn aangebracht.
- rsync -azP source destination
Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
We kunnen de modificatietijd van sommige bestanden bijwerken en zien dat rsync op intelligente wijze alleen de gewijzigde bestanden opnieuw kopieert:
- touch dir1/file{1..10}
- rsync -azP source destination
Outputsending 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). . .
Om twee directories echt synchroon te houden, is het noodzakelijk om bestanden uit de doel directory te verwijderen als ze worden verwijderd uit de bron. Standaard verwijdert rsync niets uit de doelmap.
We kunnen dit gedrag veranderen met de --delete
optie. Voordat u deze optie gebruikt, moet u de --dry-run
optie gebruiken en testen om gegevensverlies te voorkomen:
- rsync -a --delete source destination
Als u bepaalde bestanden of mappen wilt uitsluiten die zich in een map bevinden die u synchroniseert, kunt u dit doen door ze op te geven in een door komma’s gescheiden lijst na de --exclude=
optie:
- rsync -a --exclude=pattern_to_exclude source destination
Als we een patroon hebben opgegeven om uit te sluiten, kunnen we die uitsluiting opheffen voor bestanden die overeenkomen met een ander patroon door de --include=
optie te gebruiken.
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Ten slotte kan rsync’s --backup
optie worden gebruikt om backups van belangrijke bestanden op te slaan. Het wordt gebruikt in combinatie met de --backup-dir
optie, die de directory specificeert waar de back-up bestanden moeten worden opgeslagen.
- rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Conclusie
Rsync kan bestandsoverdrachten over netwerkverbindingen vereenvoudigen en robuustheid toevoegen aan lokale directory synchronisatie. De flexibiliteit van rsync maakt het een goede optie voor veel verschillende operaties op bestandsniveau.
Beheersing van rsync stelt u in staat om complexe backup operaties te ontwerpen en fijnkorrelige controle te verkrijgen over wat wordt overgedragen en hoe.