# Kaip optimizuoti duomenų sinchronizavimą naudojant „rsync“

„rsync“ yra universalus įrankis, kuris supaprastina failų perdavimą per tinklo ryšį ir pagreitina vietinių katalogų sinchronizavimą. Dėl didelio lankstumo šis sinchronizavimo įrankis yra puikus pasirinkimas įvairioms operacijoms su failais.

## Kas yra rsync?

„rsync“ (trumpinys nuo „remote synchronisation“) – tai lanksti ir su tinklu suderinama **sinchronizavimo priemonė**, skirta „Linux“ aplinkai. Ši atvirojo kodo programa gali būti naudojama failams ir katalogams sinchronizuoti tarp vietinių sistemų arba per tinklą. Priemonė naudoja **diferencinį duomenų perdavimo metodą**, kai perduodamos tik tos duomenų dalys, kurios iš tikrųjų buvo pakeistos. Tai sumažina keičiamų duomenų kiekį ir žymiai pagreitina sinchronizavimo procesą. Dėl įvairių parinkčių „rsync“ leidžia **tiksliai valdyti sinchronizavimo veikimą**. Lanksti sintaksė leidžia atlikti tiek paprastas vietines kopijas, tiek sudėtingas tinklo sinchronizacijas.

## Kokia yra „rsync“ sintaksė?

Komandos „rsync“ sintaksė yra paprasta ir panaši į SSH, SCP bei CP sintaksę. Pagrindinė struktūra yra tokia:

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

Šaltinio kelias, iš kurio turi būti sinchronizuojami duomenys, įvedamas `source` pozicijoje, o paskirties kelias nurodomas `destination` pozicijoje. „rsync“ siūlo **įvairias parinktis**, kurias naudotojai gali pasitelkti, kad sinchronizavimo procesą pritaikytų savo poreikiams. Dažniausiai naudojamos parinktys yra:

- `-a` (archyvai): Išsaugo rekursyvias failų teises, laiko žymes, grupes, savininkus ir specialias failų savybes
- `-v` (išsamus): Rodo išsamią informaciją apie sinchronizavimo procesą
- `-r` (recursive): sinchronizuoja katalogus ir jų turinį rekursyviai
- `-u` (atnaujinimas): Perkelia tik tuos failus, kurie yra naujesni už tuos, kurie jau yra tikslinėje kataloge
- `-z` (compress): Sumažina duomenų srautą tinkle
- `-n` –itemize-changes: rodo sąrašą pakeitimų, kurie bus atlikti
- `--delete`: Ištrina paskirties kataloge esančius failus, kurių šaltinyje jau nebėra
- `--exclude`: Iš sinchronizacijos pašalina tam tikrus failus ar katalogus
- `--dry-run`: Imituoja sinchronizavimo procesą, faktiškai neperduodant failų
- `--progress`: Rodo failų perkėlimo eigą
- `--partial`: Jei perkėlimas nutraukiamas, iš dalies perkelti failai lieka tikslinėje kataloge. Atnaujinus perkėlimą, failo perkėlimas tęsiamas nuo paskutinės būsenos

## „rsync“ sintaksės pavyzdžiai

Šie „rsync“ sintaksės pavyzdžiai turėtų padėti geriau suprasti, kaip naudojama ši komanda. Šiame kodo pavyzdyje sukuriama katalogas `dir1`, kuriame yra 100 tuščių bandomųjų failų, ir antrasis tuščias katalogas `dir2`“:

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

`dir1` turinį galima sinchronizuoti toje pačioje sistemoje su `dir2`, naudojant `-r` parinktį:

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

Arba galima pasinaudoti `-a` parinktimi, kuri sinchronizuoja rekursyviai ir apima simbolines nuorodas, specialiųjų įrenginių failus, pakeitimo laiką, grupes, savininkus ir leidimus:

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

**Pastaba**: Kablelis (/) rsync komandos šaltinio katalogo pabaigoje yra svarbus, nes jis nurodo **,** kad **turi būti sinchronizuotas katalogo turinys, o ne pats katalogas**.

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

Štai pavyzdys, kaip atrodys rezultatas:

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

Jei šaltinio katalogo pavadinime nėra galinio kablelio, šaltinio katalogas bus nukopijuotas į paskirties katalogą:

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

Štai rezultatas:

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

Naudojant kablelį šaltinio katalogo pabaigoje užtikrinama, kad sinchronizavimo procesas vyktų kaip numatyta ir kad šaltinio katalogo turinys būtų perkeltas į tinkamą paskirties katalogą.

## Kaip sinchronizuoti „rsync“ su nuotoline sistema

Nuotolinės sistemos sinchronizavimas naudojant „rsync“ paprastai nėra sudėtingas, jei turite **SSH prieigą prie nuotolinio kompiuterio** ir reikiamą autentifikavimo informaciją. „Rsync“ dažnai naudoja SSH (Secure Shell) saugiam ryšiui su nuotolinėmis sistemomis užtikrinti. Norint naudoti šią priemonę, ji turi būti įdiegta abiejose pusėse.

Jei patvirtinta, kad tarp dviejų kompiuterių veikia SSH ryšys, aplanką `dir1` galima sinchronizuoti nuotolinio kompiuterio. Šiuo atveju reikia perkelti patį katalogą, todėl toliau pateiktoje komandoje pabaigos brūkšnys buvo praleistas:

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

Jei katalogas perkeltas iš vietinės sistemos į nuotolinę sistemą, tai vadinama **„push“ operacija**. Tuo tarpu, kai nuotolinis katalogas sinchronizuojamas su vietine sistema, tai vadinama **„pull“ operacija**. Sintaksė yra tokia:

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

## Kokios dar galimybės yra „rsync“?

„rsync“ standartinį veikimą galima toliau pritaikyti naudojant toliau nurodytas parinktis.

### Nesuspaustų failų perkėlimas naudojant „rsync“

Tinklo apkrovą perkeliant nesuspaustus failus galima sumažinti naudojant `-z` parinktį:

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

### Eigos rodymas ir nutrauktų perdavimų tęsimas

Pasirinkus `-P`, galite sujungti `--progress` ir `--partial` parinktis. Tai suteikia galimybę stebėti perdavimo eigą ir tuo pačiu metu atnaujinti nutrauktus perdavimus:

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

Štai rezultatas:

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

Vykdykite komandą dar kartą, kad gautumėte trumpesnį išvesties tekstą. Tai leidžia „rsync“ nustatyti, ar buvo padaryti pakeitimai, remiantis pakeitimų laiku.

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

Štai rezultatas:

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

### Sinchronizuokite katalogus naudodami „rsync“

Norint užtikrinti, kad du katalogai būtų iš tikrųjų sinchronizuoti, būtina iš tikslinio katalogo **pašalinti** failus, kurie buvo ištrinti iš šaltinio katalogo. Tačiau „rsync“ automatiškai nepašalina failų iš tikslinio katalogo. Tai galima pakeisti naudojant `--delete` parinktį. Vis dėlto šią parinktį reikia naudoti atsargiai, nes ji pašalina failus iš tikslinio katalogo, kurių šaltinio kataloge jau nebėra.

Prieš naudodami šią parinktį, turėtumėte pasinaudoti `--dry-run` parinktimi. Tai leis jums atlikti **sinchronizavimo proceso imitavimą** neištrinant jokių tikrų failų. Tokiu būdu galėsite užtikrinti, kad bus atlikti tik norimi pakeitimai ir netyčia neprarastumėte svarbių duomenų:

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

### Išskirti failus ir katalogus iš sinchronizavimo

Naudojant „rsync“, galite pasinaudoti `--exclude` parinktimi, kad tam tikri failai ir katalogai **nebūtų** sinchronizuojami. Tai praverčia, jei, pavyzdžiui, nenorite sinchronizuoti laikinių failų, žurnalo failų ar kito turinio.

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

Jei nurodėte failų išskyrimo šabloną, galite pasinaudoti `--include=` parinktimi, kad pakeistumėte šį išskyrimą tam tikriems failams, kurie atitinka kitą šabloną.

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

### Atsargines kopijas išsaugokite naudodami „rsync“

`--backup` parinktis leidžia išsaugoti svarbių failų atsargines kopijas. Ji gali būti naudojama kartu su `--backup-dir` parinktimi, kad būtų nurodytas katalogas, kuriame turi būti išsaugoti atsarginių kopijų failai:

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

Išsamią įvairių atsarginių kopijų kūrimo scenarijų apžvalgą rasite mūsų straipsnyje apie [serverių atsarginių kopijų kūrimą naudojant „rsync](https://www.ionos.com/lt-lt/digitalguide/serveris/irankiai/serverio-atsarginiu-kopiju-kurimas-naudojant-rsync/)“.


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