rsync on mo­ni­puo­li­nen työkalu, joka helpottaa tie­dos­to­jen siirtoa verk­ko­yh­teyk­sien kautta ja nopeuttaa pai­kal­lis­ten ha­ke­mis­to­jen synk­ro­noin­tia. Suuren jous­ta­vuu­ten­sa ansiosta tämä synk­ro­noin­ti­työ­ka­lu on erin­omai­nen valinta mo­nen­lai­siin tie­dos­to­ta­son toi­min­toi­hin.

Mikä on rsync?

rsync, lyhenne sanoista ”remote synchro­ni­sa­tion”, on joustava ja verkko-yh­teen­so­pi­va synk­ro­noin­ti­työ­ka­lu Linux-ym­pä­ris­tös­sä. Tätä avoimen läh­de­koo­din ohjelmaa voidaan käyttää tie­dos­to­jen ja ha­ke­mis­to­jen synk­ro­noin­tiin pai­kal­lis­ten jär­jes­tel­mien välillä tai verkkojen yli. Työkalu hyödyntää dif­fe­ren­ti­aa­lis­ta tie­don­siir­to­tek­niik­kaa, jossa siir­re­tään vain ne tiedot, jotka ovat to­sia­sial­li­ses­ti muut­tu­neet. Tämä minimoi siir­ret­tä­vän datan määrän ja nopeuttaa synk­ro­noin­tipro­ses­sia huo­mat­ta­vas­ti. Mo­ni­puo­lis­ten asetusten ansiosta rsync mah­dol­lis­taa synk­ro­noin­ti­toi­min­to­jen tarkan hallinnan. Joustava syntaksi mah­dol­lis­taa sekä yk­sin­ker­tai­set pai­kal­li­set ko­pioin­nit että mo­ni­mut­kai­set verk­ko­synk­ro­noin­nit.

Mikä on rsync-komennon syntaksi?

rsync-komennon syntaksi on ra­ken­teel­taan yk­sin­ker­tai­nen ja muis­tut­taa SSH:n, SCP:n ja CP:n syntaksia. Pe­rus­ra­ken­ne on seuraava:

rsync [OPTION] source destination
bash

Läh­de­pol­ku, josta tiedot synk­ro­noi­daan, syötetään kenttään source, kun taas koh­de­pol­ku mää­ri­te­tään kenttään destination. rsync tarjoaa useita vaih­toeh­to­ja, joiden avulla käyttäjät voivat mukauttaa synk­ro­noin­tipro­ses­sin tar­pei­siin­sa. Ylei­sim­min käy­tet­ty­jä vaih­toeh­to­ja ovat:

  • -a (arkistot): Säilyttää tie­dos­to­jen re­kur­sii­vi­set käyt­tö­oi­keu­det, ai­ka­lei­mat, ryhmät, omistajat ja tie­dos­to­jen eri­tyi­so­mi­nai­suu­det
  • -v (verbose): Näyttää yk­si­tyis­koh­tai­sia tietoja synk­ro­noin­tipro­ses­sis­ta
  • -r (recursive): Synkronoi ha­ke­mis­tot ja niiden sisällön re­kur­sii­vi­ses­ti
  • -u (päivitys): Siirtää vain tiedostot, jotka ovat uudempia kuin koh­de­kan­sios­sa jo olevat tiedostot
  • -z (compress): Vähentää verk­ko­lii­ken­net­tä
  • -n –itemize-changes: Näyttää luettelon teh­tä­vis­tä muu­tok­sis­ta
  • --delete: Poistaa koh­de­kan­sios­ta tiedostot, joita ei enää ole läh­de­kan­sios­sa
  • --exclude: Sulkee tietyt tiedostot tai ha­ke­mis­tot synk­ro­noin­nin ul­ko­puo­lel­le
  • --dry-run: Simuloi synk­ro­noin­tipro­ses­sia siir­tä­mät­tä tie­dos­to­ja
  • --progress: Näyttää tie­dos­to­jen siirron ete­ne­mi­sen
  • --partial: Osittain siirretyt tiedostot jäävät koh­de­kan­sioon, jos siirto keskeytyy. Kun siirto jatketaan, tiedoston siirto jatkuu siitä, mihin se jäi

Esi­merk­ke­jä rsync-syn­tak­sis­ta

Seuraavat esimerkit rsync-komennon syn­tak­sis­ta auttavat ym­mär­tä­mään, miten komentoa käytetään. Seuraava koo­die­si­merk­ki luo ha­ke­mis­ton dir1, joka sisältää 100 tyhjää tes­ti­tie­dos­toa, sekä toisen tyhjän ha­ke­mis­ton dir2:

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

Kohdan dir1 sisältö voidaan synk­ro­noi­da samassa jär­jes­tel­mäs­sä kohdan dir2 kanssa käyt­tä­mäl­lä vaih­toeh­toa -r:

$ rsync -r dir1/ dir2
bash

Vaih­toeh­toi­ses­ti voidaan käyttää vaih­toeh­toa -a, joka synkronoi tiedostot re­kur­sii­vi­ses­ti ja sisältää sym­bo­li­set linkit, erityiset lai­te­tie­dos­tot, muok­kausa­jat, ryhmät, omistajat ja käyt­tö­oi­keu­det:

$ rsync -a dir1/ dir2
bash

Huomautus: Rsync-komennon läh­de­kan­sion lopussa oleva kaut­ta­vii­va (/) on tärkeä , sillä se osoittaa , että synk­ro­noi­ta­va on kansion sisältö, ei itse kansio.

$ rsync -a dir1/ dir2
bash

Tässä on esimerkki tu­lok­ses­ta:

sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Jos läh­de­kan­sios­sa ei ole lop­pu­vii­vaa, läh­de­kan­sio ko­pioi­daan koh­de­kan­sioon:

$ rsync -a dir1 dir2
bash

Tässä on tulos:

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
. . .
bash

Läh­de­kan­sion lopussa olevan kaut­ta­vii­van käyt­tä­mi­nen varmistaa, että synk­ro­noin­tipro­ses­si sujuu odo­te­tus­ti ja että läh­de­kan­sion sisältö päätyy oikeaan koh­de­kan­sioon.

Kuinka synk­ro­noi­da rsync etä­jär­jes­tel­män kanssa

Etä­jär­jes­tel­män synk­ro­noin­ti rsync-oh­jel­mal­la ei yleensä ole vaikeaa, kunhan sinulla on SSH-yhteys etä­tie­to­ko­nee­seen ja tar­vit­ta­vat tun­nis­tau­tu­mis­tie­dot. Rsync käyttää usein SSH:ta (Secure Shell) tur­val­li­seen tie­don­siir­toon etä­jär­jes­tel­mien kanssa. Jotta tätä työkalua voi käyttää, sen on oltava asen­net­tu­na mo­lem­mil­le koneille.

Jos SSH-yhteys näiden kahden tie­to­ko­neen välillä on vah­vis­tet­tu, kansio dir1 voidaan synk­ro­noi­da etä­tie­to­ko­neel­le. Tässä ta­pauk­ses­sa var­si­nai­nen hakemisto on siir­ret­tä­vä, minkä vuoksi seu­raa­vas­ta ko­men­nos­ta on jätetty pois lopussa oleva kaut­ta­vii­va:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Jos hakemisto siir­re­tään pai­kal­li­ses­ta jär­jes­tel­mäs­tä etä­jär­jes­tel­mään, tätä kutsutaan push-toi­min­nok­si. Sen sijaan kun etä­ha­ke­mis­to synk­ro­noi­daan pai­kal­li­sen jär­jes­tel­män kanssa, tätä kutsutaan pull-toi­min­nok­si. Sen syntaksi on seuraava:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash

Mitä muita vaih­toeh­to­ja rsync:ssä on?

rsync-komennon ole­tusar­vois­ta käyt­täy­ty­mis­tä voidaan muokata edelleen alla olevien asetusten avulla.

Pak­kaa­mat­to­mien tie­dos­to­jen siir­tä­mi­nen rsync-ko­men­nol­la

Verkon kuor­mi­tus­ta pak­kaa­mat­to­mien tie­dos­to­jen siirron yh­tey­des­sä voidaan vähentää käyt­tä­mäl­lä vaih­toeh­toa -z:

$ rsync -az source destination
bash

Lä­he­tyk­sen ete­ne­mi­sen näyttö ja kes­key­ty­nei­den lä­he­tys­ten jat­ka­mi­nen

Va­lin­nal­la -P voit yhdistää valinnat --progress ja --partial. Näin saat yleis­ku­van lä­he­tys­ten ete­ne­mi­ses­tä ja voit samalla jatkaa kes­key­ty­nei­tä lä­he­tyk­siä:

$ rsync -azP source destination
bash

Tässä on tulos:

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

Suorita komento uudelleen, jotta saat lyhyemmän tulosteen. Näin rsync voi määrittää muutosten pe­rus­teel­la, onko muutoksia tehty.

$ rsync -azP source destination
bash

Tässä on tulos:

sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Pidä ha­ke­mis­tot synk­ro­noi­tu­na rsync-ko­men­nol­la

Jotta kaksi ha­ke­mis­toa py­syi­si­vät varmasti synk­ro­noi­tu­na, on tarpeen poistaa koh­de­ha­ke­mis­tos­ta ne tiedostot, jotka on poistettu läh­de­ha­ke­mis­tos­ta. Rsync ei kui­ten­kaan poista tie­dos­to­ja koh­de­ha­ke­mis­tos­ta au­to­maat­ti­ses­ti. Tätä toimintaa voidaan muuttaa --delete. Tätä vaih­toeh­toa on kuitenkin käy­tet­tä­vä varovasti, sillä se poistaa koh­de­ha­ke­mis­tos­ta tiedostot, joita läh­de­ha­ke­mis­tos­sa ei enää ole.

Ennen kuin käytät tätä vaih­toeh­toa, sinun tulisi käyttää vaih­toeh­toa --dry-run. Näin voit simuloida synk­ro­noin­tipro­ses­sia pois­ta­mat­ta var­si­nai­sia tie­dos­to­ja. Näin voit varmistaa, että vain halutut muutokset tehdään ilman, että menetät va­hin­gos­sa tärkeitä tietoja:

$ rsync -a --delete source destination
bash

Sulje tiedostot ja kansiot synk­ro­noin­nin ul­ko­puo­lel­le

rsync-ko­men­nos­sa voit käyttää --exclude sul­keak­se­si tietyt tiedostot ja kansiot synk­ro­noin­nin ul­ko­puo­lel­le. Tämä on hyö­dyl­lis­tä esi­mer­kik­si silloin, kun et halua synk­ro­noi­da vä­liai­kai­sia tie­dos­to­ja, lo­ki­tie­dos­to­ja tai muuta sisältöä.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Jos olet mää­rit­tä­nyt tie­dos­to­jen pois­sul­ke­mis­ta koskevan säännön, voit käyttää vaih­toeh­toa --include= ohit­taak­se­si tämän pois­sul­ke­mi­sen tiettyjen tie­dos­to­jen osalta, jotka vastaavat erilaista sääntöä.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

Tallenna var­muus­ko­piot rsync-ko­men­nol­la

Vaih­toeh­dol­la --backup voit tallentaa var­muus­ko­piot tärkeistä tie­dos­tois­ta. Sitä voidaan käyttää yhdessä vaih­toeh­don --backup-dir kanssa, jotta voidaan määrittää kansio, johon var­muus­ko­pio­tie­dos­tot tal­len­ne­taan:

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

Yk­si­tyis­koh­tai­nen katsaus eri­lai­siin var­muus­ko­pioin­ti­ti­lan­tei­siin löytyy ar­tik­ke­lis­tam­me, joka kä­sit­te­lee pal­ve­lin­ten var­muus­ko­pioin­tia rsync-oh­jel­mal­la.

Siirry pää­va­lik­koon