# Kako optimizirati sinhronizacijo podatkov z rsync

rsync je vsestransko orodje, ki poenostavlja prenos datotek prek omrežnih povezav in pospeši sinhronizacijo lokalnih map. Zaradi visoke prilagodljivosti je to sinhronizacijsko orodje odlična izbira za najrazličnejše operacije na ravni datotek.

## Kaj je rsync?

rsync, kratica za »remote synchronisation« (daljinska sinhronizacija), je prilagodljivo in omrežno združljivo **orodje za sinhronizacijo** v sistemu Linux. Ta odprtokodni program se lahko uporablja za sinhronizacijo datotek in map med lokalnimi sistemi ali prek omrežij. Orodje uporablja **tehniko diferencialnega prenosa podatkov**, pri kateri se prenesejo le tisti deli podatkov, ki so se dejansko spremenili. To zmanjša količino izmenjanih podatkov in znatno pospeši proces sinhronizacije. Zahvaljujoč številnim možnostim rsync omogoča **natančno nadzorovanje sinhronizacijskega delovanja**. Prilagodljiva sintaksa omogoča tako preprosto lokalno kopiranje kot tudi kompleksne omrežne sinhronizacije.

## Kakšna je sintaksa za rsync?

Sintaksa ukazov programa rsync ima preprosto strukturo in je podobna sintaksi ukazov SSH, SCP in CP. Osnovna struktura je naslednja:

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

Pot vira, iz katerega naj se podatki sinhronizirajo, se vnese v `source`, ciljna pot pa se določi v `destination`. Program rsync ponuja **vrsto možnosti,** s katerimi lahko uporabniki prilagodijo postopek sinhronizacije svojim potrebam. Najpogosteje uporabljane možnosti so:

- `-a` (arhivi): ohrani rekurzivne pravice do datotek, časovne oznake, skupine, lastnike in posebne lastnosti datotek
- `-v` (podrobno): Prikaže podrobne informacije o procesu sinhronizacije
- `-r` (recursive): Sinhronizira imenike in njihovo vsebino rekurzivno
- `-u` (posodobitev): prenese samo datoteke, ki so novejše od tistih, ki so že v ciljnem imeniku
- `-z` (compress): Zmanjša promet podatkov prek omrežja
- `-n` –itemize-changes: Prikaže seznam sprememb, ki bodo izvedene
- `--delete`: Iz ciljnega imenika izbriše datoteke, ki v izvorni mapi ne obstajajo več
- `--exclude`: Izključi določene datoteke ali imenike iz sinhronizacije
- `--dry-run`: Simulira proces sinhronizacije, ne da bi dejansko prenesel datoteke
- `--progress`: Prikaže napredek prenosa datotek
- `--partial`: Datoteke, ki so bile delno prenesene, ostanejo v ciljnem imeniku, če se prenos prekine. Ko se prenos nadaljuje, se datoteka nadaljuje od zadnjega stanja

## Primeri sintakse rsync

Naslednji primeri sintakse ukaza rsync naj bi olajšali razumevanje njegove uporabe. V naslednjem primeru kode se ustvari imenik `dir1`, ki vsebuje 100 praznih testnih datotek, ter drugi prazen imenik `dir2`:

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

Vsebino `dir1` je mogoče na istem sistemu sinhronizirati s `dir2` z uporabo možnosti `-r`:

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

Druga možnost je uporaba opcije `-a`, ki sinhronizira rekurzivno in vključuje simbolične povezave, datoteke posebnih naprav, čase sprememb, skupine, lastnike in pooblastila:

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

**Opomba**: Poševnica (/) na koncu imena izvorne mape v ukazu rsync je pomembna, saj pomeni **,** da **je treba sinhronizirati vsebino mape, ne pa same mape**.

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

Tukaj je primer izpisa:

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

Če imenik vira nima končnega poševnika, se bo imenik vira kopiral v ciljni imenik:

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

Tukaj je izpis:

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

Uporaba poševnice na koncu imena izvorne mape zagotavlja, da sinhronizacija poteka po načrtu in da se vsebina izvorne mape prenese v pravo ciljno mapo.

## Kako sinhronizirati rsync z oddaljenim sistemom

Sinhronizacija oddaljenega sistema z rsync-om običajno ni težka, če imate **SSH-dostop do oddaljenega računalnika** in potrebne podatke za avtentifikacijo. Rsync pogosto uporablja SSH (Secure Shell) za varno komunikacijo z oddaljenimi sistemi. Da bi lahko uporabljali to orodje, mora biti nameščeno na obeh straneh.

Če je dostop prek SSH med obema računalnikoma potrjen, je mogoče mapo `dir1` sinhronizirati na oddaljenem računalniku. V tem primeru je treba prenesti dejansko mapo, zato je v naslednjem ukazu izpuščena končna poševnica:

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

Če se imenik prenese z lokalnega sistema na oddaljeni sistem, to imenujemo **operacija »push**«. Nasprotno pa, če se oddaljeni imenik sinhronizira z lokalnim sistemom, to imenujemo **operacija »pull**«. Sintaksa za to je naslednja:

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

## Katere druge možnosti ponuja rsync?

Standardno delovanje programa rsync je mogoče dodatno prilagoditi s pomočjo spodaj navedenih možnosti.

### Prenos nestisnjenih datotek z rsync

Obremenitev omrežja pri prenosu nestisnjenih datotek je mogoče zmanjšati z uporabo možnosti `-z`:

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

### Prikaz napredka in nadaljevanje prekinjenih prenosov

Z `-P` lahko združite možnosti `--progress` in `--partial`. S tem dobite pregled nad potekom prenosov in hkrati lahko nadaljujete prekinjene prenose:

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

Tukaj je izpis:

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

Ponovno izvedite ukaz, da dobite krajši izpis. Tako lahko rsync na podlagi časa sprememb ugotovi, ali so bile izvedene spremembe.

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

Tukaj je izpis:

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

### Sinhronizirajte imenike z rsync

Da bi zagotovili dejansko sinhronizacijo obeh map, je treba v ciljni mapi **izbrisati** datoteke, ki so bile odstranjene iz izvorne mape. Vendar pa rsync datotek iz ciljne mape ne odstrani samodejno. To je mogoče spremeniti z uporabo opcije `--delete`. Vendar je pomembno, da to opcijo uporabljate previdno, saj izbriše datoteke v ciljni mapi, ki v izvorni mapi ne obstajajo več.

Preden uporabite to možnost, najprej uporabite možnost `--dry-run`. To vam bo omogočilo, da izvedete **simulacijo sinhronizacijskega postopka,** ne da bi pri tem izbrisali kakršne koli dejanske datoteke. Na ta način lahko zagotovite, da se izvedejo le želene spremembe, ne da bi po nesreči izgubili pomembne podatke:

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

### Izključi datoteke in mape iz sinhronizacije

V programu rsync lahko z uporabo opcije `--exclude` **izključite** določene datoteke in mape iz sinhronizacije. To je koristno, če na primer ne želite sinhronizirati začasnih datotek, dnevniških datotek ali druge vsebine.

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

Če ste določili vzorec za izključitev datotek, lahko z uporabo opcije `--include=` to izključitev prepisate za določene datoteke, ki ustrezajo drugemu vzorcu.

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

### Shranjevanje varnostnih kopij z rsync

Možnost `--backup` omogoča shranjevanje varnostnih kopij pomembnih datotek. Uporabite jo lahko skupaj z možnostjo `--backup-dir`, da določite imenik, v katerega naj se shranijo varnostne kopije:

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

Podroben pregled različnih scenarijev varnostnega kopiranja najdete v našem članku o [varnostnem kopiranju strežnikov z rsync](https://www.ionos.com/sl-si/digitalguide/streznik/orodja/nastavitev-varnostnih-kopij-streznika-z-rsync/).


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/streznik/orodja/rsync/](https://www.ionos.com/sl-si/digitalguide/streznik/orodja/rsync/) for AI/LLM consumption.