# Kuinka optimoida tietojen synkronointi rsync-komennolla

rsync on monipuolinen työkalu, joka helpottaa tiedostojen siirtoa verkkoyhteyksien kautta ja nopeuttaa paikallisten hakemistojen synkronointia. Suuren joustavuutensa ansiosta tämä synkronointityökalu on erinomainen valinta monenlaisiin tiedostotason toimintoihin.

## Mikä on rsync?

rsync, lyhenne sanoista ”remote synchronisation”, on joustava ja verkko-yhteensopiva **synkronointityökalu** Linux-ympäristössä. Tätä avoimen lähdekoodin ohjelmaa voidaan käyttää tiedostojen ja hakemistojen synkronointiin paikallisten järjestelmien välillä tai verkkojen yli. Työkalu hyödyntää **differentiaalista tiedonsiirtotekniikkaa**, jossa siirretään vain ne tiedot, jotka ovat tosiasiallisesti muuttuneet. Tämä minimoi siirrettävän datan määrän ja nopeuttaa synkronointiprosessia huomattavasti. Monipuolisten asetusten ansiosta rsync mahdollistaa **synkronointitoimintojen tarkan hallinnan**. Joustava syntaksi mahdollistaa sekä yksinkertaiset paikalliset kopioinnit että monimutkaiset verkkosynkronoinnit.

## Mikä on rsync-komennon syntaksi?

rsync-komennon syntaksi on rakenteeltaan yksinkertainen ja muistuttaa SSH:n, SCP:n ja CP:n syntaksia. Perusrakenne on seuraava:

```bash
rsync [OPTION] source destination
```

Lähdepolku, josta tiedot synkronoidaan, syötetään kenttään `source`, kun taas kohdepolku määritetään kenttään `destination`. rsync tarjoaa **useita vaihtoehtoja**, joiden avulla käyttäjät voivat mukauttaa synkronointiprosessin tarpeisiinsa. Yleisimmin käytettyjä vaihtoehtoja ovat:

- `-a` (arkistot): Säilyttää tiedostojen rekursiiviset käyttöoikeudet, aikaleimat, ryhmät, omistajat ja tiedostojen erityisominaisuudet
- `-v` (verbose): Näyttää yksityiskohtaisia tietoja synkronointiprosessista
- `-r` (recursive): Synkronoi hakemistot ja niiden sisällön rekursiivisesti
- `-u` (päivitys): Siirtää vain tiedostot, jotka ovat uudempia kuin kohdekansiossa jo olevat tiedostot
- `-z` (compress): Vähentää verkkoliikennettä
- `-n` –itemize-changes: Näyttää luettelon tehtävistä muutoksista
- `--delete`: Poistaa kohdekansiosta tiedostot, joita ei enää ole lähdekansiossa
- `--exclude`: Sulkee tietyt tiedostot tai hakemistot synkronoinnin ulkopuolelle
- `--dry-run`: Simuloi synkronointiprosessia siirtämättä tiedostoja
- `--progress`: Näyttää tiedostojen siirron etenemisen
- `--partial`: Osittain siirretyt tiedostot jäävät kohdekansioon, jos siirto keskeytyy. Kun siirto jatketaan, tiedoston siirto jatkuu siitä, mihin se jäi

## Esimerkkejä rsync-syntaksista

Seuraavat esimerkit rsync-komennon syntaksista auttavat ymmärtämään, miten komentoa käytetään. Seuraava koodiesimerkki luo hakemiston `dir1`, joka sisältää 100 tyhjää testitiedostoa, sekä toisen tyhjän hakemiston `dir2`:

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

Kohdan `dir1` sisältö voidaan synkronoida samassa järjestelmässä kohdan `dir2` kanssa käyttämällä vaihtoehtoa `-r`:

```bash
$ rsync -r dir1/ dir2
```

Vaihtoehtoisesti voidaan käyttää vaihtoehtoa `-a`, joka synkronoi tiedostot rekursiivisesti ja sisältää symboliset linkit, erityiset laitetiedostot, muokkausajat, ryhmät, omistajat ja käyttöoikeudet:

```bash
$ rsync -a dir1/ dir2
```

**Huomautus**: Rsync-komennon lähdekansion lopussa oleva kauttaviiva (/) on tärkeä **,** sillä se osoittaa **,** että **synkronoitava on kansion sisältö, ei itse kansio**.

```bash
$ rsync -a dir1/ dir2
```

Tässä on esimerkki tuloksesta:

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

Jos lähdekansiossa ei ole loppuviivaa, lähdekansio kopioidaan kohdekansioon:

```bash
$ rsync -a dir1 dir2
```

Tässä on tulos:

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

Lähdekansion lopussa olevan kauttaviivan käyttäminen varmistaa, että synkronointiprosessi sujuu odotetusti ja että lähdekansion sisältö päätyy oikeaan kohdekansioon.

## Kuinka synkronoida rsync etäjärjestelmän kanssa

Etäjärjestelmän synkronointi rsync-ohjelmalla ei yleensä ole vaikeaa, kunhan sinulla on **SSH-yhteys etätietokoneeseen** ja tarvittavat tunnistautumistiedot. Rsync käyttää usein SSH:ta (Secure Shell) turvalliseen tiedonsiirtoon etäjärjestelmien kanssa. Jotta tätä työkalua voi käyttää, sen on oltava asennettuna molemmille koneille.

Jos SSH-yhteys näiden kahden tietokoneen välillä on vahvistettu, kansio `dir1` voidaan synkronoida etätietokoneelle. Tässä tapauksessa varsinainen hakemisto on siirrettävä, minkä vuoksi seuraavasta komennosta on jätetty pois lopussa oleva kauttaviiva:

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

Jos hakemisto siirretään paikallisesta järjestelmästä etäjärjestelmään, tätä kutsutaan **push-toiminnoksi**. Sen sijaan kun etähakemisto synkronoidaan paikallisen järjestelmän kanssa, tätä kutsutaan **pull-toiminnoksi**. Sen syntaksi on seuraava:

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

## Mitä muita vaihtoehtoja rsync:ssä on?

rsync-komennon oletusarvoista käyttäytymistä voidaan muokata edelleen alla olevien asetusten avulla.

### Pakkaamattomien tiedostojen siirtäminen rsync-komennolla

Verkon kuormitusta pakkaamattomien tiedostojen siirron yhteydessä voidaan vähentää käyttämällä vaihtoehtoa `-z`:

```bash
$ rsync -az source destination
```

### Lähetyksen etenemisen näyttö ja keskeytyneiden lähetysten jatkaminen

Valinnalla `-P` voit yhdistää valinnat `--progress` ja `--partial`. Näin saat yleiskuvan lähetysten etenemisestä ja voit samalla jatkaa keskeytyneitä lähetyksiä:

```bash
$ rsync -azP source destination
```

Tässä on tulos:

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

Suorita komento uudelleen, jotta saat lyhyemmän tulosteen. Näin rsync voi määrittää muutosten perusteella, onko muutoksia tehty.

```bash
$ rsync -azP source destination
```

Tässä on tulos:

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

### Pidä hakemistot synkronoituna rsync-komennolla

Jotta kaksi hakemistoa pysyisivät varmasti synkronoituna, on tarpeen **poistaa** kohdehakemistosta ne tiedostot, jotka on poistettu lähdehakemistosta. Rsync ei kuitenkaan poista tiedostoja kohdehakemistosta automaattisesti. Tätä toimintaa voidaan muuttaa `--delete`. Tätä vaihtoehtoa on kuitenkin käytettävä varovasti, sillä se poistaa kohdehakemistosta tiedostot, joita lähdehakemistossa ei enää ole.

Ennen kuin käytät tätä vaihtoehtoa, sinun tulisi käyttää vaihtoehtoa `--dry-run`. Näin voit **simuloida synkronointiprosessia** poistamatta varsinaisia tiedostoja. Näin voit varmistaa, että vain halutut muutokset tehdään ilman, että menetät vahingossa tärkeitä tietoja:

```bash
$ rsync -a --delete source destination
```

### Sulje tiedostot ja kansiot synkronoinnin ulkopuolelle

rsync-komennossa voit käyttää `--exclude` **sulkeaksesi** tietyt tiedostot ja kansiot synkronoinnin **ulkopuolelle**. Tämä on hyödyllistä esimerkiksi silloin, kun et halua synkronoida väliaikaisia tiedostoja, lokitiedostoja tai muuta sisältöä.

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

Jos olet määrittänyt tiedostojen poissulkemista koskevan säännön, voit käyttää vaihtoehtoa `--include=` ohittaaksesi tämän poissulkemisen tiettyjen tiedostojen osalta, jotka vastaavat erilaista sääntöä.

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

### Tallenna varmuuskopiot rsync-komennolla

Vaihtoehdolla `--backup` voit tallentaa varmuuskopiot tärkeistä tiedostoista. Sitä voidaan käyttää yhdessä vaihtoehdon `--backup-dir` kanssa, jotta voidaan määrittää kansio, johon varmuuskopiotiedostot tallennetaan:

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

Yksityiskohtainen katsaus erilaisiin varmuuskopiointitilanteisiin löytyy artikkelistamme, joka käsittelee [palvelinten varmuuskopiointia rsync-ohjelmalla.](https://www.ionos.com/fi-fi/digitalguide/palvelin/tyoekalut/palvelimen-varmuuskopioiden-maeaerittaeminen-rsync-komennolla/)


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/palvelin/tyoekalut/rsync/](https://www.ionos.com/fi-fi/digitalguide/palvelin/tyoekalut/rsync/) for AI/LLM consumption.