# Kā optimizēt datu sinhronizāciju ar rsync

rsync ir daudzfunkcionāls rīks, kas atvieglo failu pārsūtīšanu pa tīkla savienojumiem un paātrina vietējo direktoriju sinhronizāciju. Lielā elastība padara šo sinhronizācijas rīku par lielisku risinājumu dažādām darbībām ar failiem.

## Kas ir rsync?

rsync, kas ir saīsinājums no „remote synchronisation“ (attālā sinhronizācija), ir elastīgs un tīklam piemērots **sinhronizācijas rīks** Linux vidē. Šo atvērtā koda programmu var izmantot failu un direktoriju sinhronizācijai starp lokālām sistēmām vai tīklos. Rīks izmanto **diferencētu datu pārraides metodi**, kuras ietvaros tiek pārraidītas tikai tās datu daļas, kas faktiski ir mainītas. Tas samazina datu apjomu, kas jāpārraida, un ievērojami paātrina sinhronizācijas procesu. Pateicoties dažādām opcijām, rsync ļauj **precīzi kontrolēt sinhronizācijas darbību**. Elastīgā sintakse ļauj veikt gan vienkāršas lokālas kopēšanas, gan sarežģītas tīkla sinhronizācijas.

## Kāda ir rsync sintakse?

Komandas rsync sintakse ir vienkārša un līdzinās SSH, SCP un CP sintaksei. Tās pamata struktūra ir šāda:

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

Avota ceļš, no kura dati ir jāsinhronizē, tiek ievadīts `source` pozīcijā, savukārt galamērķa ceļš tiek norādīts `destination` pozīcijā. rsync piedāvā **dažādas opcijas,** kuras lietotāji var izmantot, lai pielāgotu sinhronizācijas procesu savām vajadzībām. Visbiežāk izmantotās opcijas ir:

- `-a` (arhīvi): Saglabā rekursīvās failu atļaujas, laika zīmogus, grupas, īpašniekus un īpašās failu īpašības
- `-v` (izvērsts): Parāda detalizētu informāciju par sinhronizācijas procesu
- `-r` (recursive): sinhronizē direktorijus un to saturu rekursīvi
- `-u` (update): Pārsūta tikai tos failus, kas ir jaunāki par tiem, kuri jau atrodas mērķa direktorijā
- `-z` (compress): Samazina datu plūsmu tīklā
- `-n` –itemize-changes: parāda veicamo izmaiņu sarakstu
- `--delete`: Dzēš mērķa direktorijā failus, kas vairs neeksistē avotā
- `--exclude`: Izslēdz noteiktus failus vai direktorijus no sinhronizācijas
- `--dry-run`: Simulē sinhronizācijas procesu, faktiski nepārnesot failus
- `--progress`: Parāda failu pārraides gaitu
- `--partial`: Faili, kas ir daļēji pārnesti, paliek mērķa direktorijā, ja pārnešana tiek pārtraukta. Kad pārnešana tiek atsākta, faila pārnešana tiek turpināta no pēdējā stāvokļa

## rsync sintakses piemēri

Turpmākie rsync sintakses piemēri palīdzēs labāk izprast, kā šo komandu lietot. Šajā koda piemērā tiek izveidota mape `dir1`, kurā ir 100 tukši testa faili, kā arī otrā tukša mape `dir2`“:

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

`dir1` saturu var sinhronizēt tajā pašā sistēmā ar `dir2`, izmantojot `-r` opciju:

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

Alternatīvi var izmantot opciju `-a`, kas sinhronizē rekursīvi un iekļauj simboliskās saites, īpašos ierīču failus, izmaiņu laiku, grupas, īpašniekus un atļaujas:

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

**Piezīme**: Slīpsvītriņa (/) rsync komandas avota direktorija nosaukuma beigās ir svarīga, jo tā norāda **,** ka **jāsinhronizē direktorija saturs, nevis pati direktorija**.

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

Šeit ir izvades piemērs:

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

Ja avota direktorija beidzas bez slīpsvītras, avota direktorija tiks kopēta uz mērķa direktoriju:

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

Šeit ir izvade:

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

Slīpsvītru izmantojot avota direktorija beigās, tiek nodrošināts, ka sinhronizācijas process noris kā paredzēts un ka avota direktorija saturs nonāk pareizajā mērķa direktorijā.

## Kā sinhronizēt rsync ar attālo sistēmu

Attālās sistēmas sinhronizēšana ar rsync parasti nav sarežģīta, ja vien jums ir **SSH piekļuve attālajam datoram** un nepieciešamā autentifikācijas informācija. Rsync bieži izmanto SSH (Secure Shell) drošai saziņai ar attālajām sistēmām. Lai izmantotu šo rīku, tas jāinstalē abās pusēs.

Ja SSH savienojums starp abiem datoriem ir pārbaudīts, mapu `dir1` var sinhronizēt attālajā datorā. Šajā gadījumā ir jāpārnes pati mape, tāpēc turpmākajā komandā ir izlaists beigu slīpsvītriņš:

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

Ja direktoriju pārvieto no vietējās sistēmas uz attālo sistēmu, to sauc par **„push“ operāciju**. Savukārt, ja attālo direktoriju sinhronizē ar vietējo sistēmu, to sauc par **„pull“ operāciju**. Sintakse šim nolūkam ir šāda:

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

## Kādas citas iespējas piedāvā rsync?

rsync standarta darbību var pielāgot, izmantojot zemāk minētās opcijas.

### Nesaspiestu failu pārsūtīšana ar rsync

Tīkla slodzi, pārsūtot nesaspiestus failus, var samazināt, izmantojot `-z` opciju:

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

### Progresa parādīšana un pārtraukto pārraides atsākšana

Izmantojot `-P`, varat apvienot opcijas `--progress` un `--partial`. Tas sniedz pārskatu par pārraides gaitu un vienlaikus ļauj atsākt pārtrauktas pārraides:

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

Šeit ir izvade:

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

Atkārtojiet komandu, lai iegūtu īsāku izvadi. Tas ļauj rsync noteikt, vai ir veiktas izmaiņas, balstoties uz izmaiņu laikiem.

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

Šeit ir izvade:

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

### Saglabājiet direktoriju sinhronizāciju ar rsync

Lai nodrošinātu, ka abas mapes tiek patiešām sinhronizētas, ir nepieciešams mērķa mapē **dzēst** failus, kas ir izdzēsti no avota mapes. Taču rsync automātiski nedzēš failus no mērķa mapes. To var mainīt, izmantojot opciju `--delete`. Tomēr šo opciju ir svarīgi lietot ar piesardzību, jo tā dzēš mērķa mapē failus, kas vairs neeksistē avotā.

Pirms izmantot šo opciju, jums vajadzētu izmantot `--dry-run` opciju. Tas ļaus jums veikt **sinhronizācijas procesa simulāciju**, nedzēšot nevienu reālu failu. Tādējādi jūs varat nodrošināt, ka tiek veiktas tikai vēlamās izmaiņas, nejauši nezaudējot svarīgus datus:

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

### Izslēgt failus un mapes no sinhronizācijas

Programmā rsync var izmantot opciju `--exclude`, lai no sinhronizācijas **izslēgtu** noteiktus failus un direktorijus. Tas ir noderīgi, ja, piemēram, nevēlaties sinhronizēt pagaidu failus, žurnālu failus vai citu saturu.

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

Ja esat norādījis izslēgšanas kritēriju failiem, varat izmantot `--include=` opciju, lai pārrakstītu šo izslēgšanu noteiktiem failiem, kas atbilst citam kritērijam.

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

### Dublējumu saglabāšana ar rsync

Ar `--backup` opciju varat saglabāt svarīgu failu dublējumus. To var izmantot kopā ar `--backup-dir` opciju, lai norādītu direktoriju, kurā jāglabā dublējuma faili:

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

Sīkāku pārskatu par dažādiem dublēšanas scenārijiem varat atrast mūsu rakstā par [serveru dublēšanu ar rsync](https://www.ionos.com/lv-lv/digitalguide/serveris/riki/servera-dublejumu-konfiguresana-ar-rsync/).


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