# Πώς να βελτιστοποιήσετε τον συγχρονισμό δεδομένων με το rsync

Το rsync είναι ένα ευέλικτο εργαλείο που απλοποιεί τη μεταφορά αρχείων μέσω δικτυακών συνδέσεων και επιταχύνει τον συγχρονισμό των τοπικών καταλόγων. Η μεγάλη ευελιξία του καθιστά αυτό το εργαλείο συγχρονισμού μια εξαιρετική επιλογή για μια ποικιλία λειτουργιών σε επίπεδο αρχείων.

## Τι είναι το rsync;

Το rsync, συντομογραφία του «remote synchronisation» (απομακρυσμένος συγχρονισμός), είναι ένα ευέλικτο και συμβατό με δίκτυα **εργαλείο συγχρονισμού** για το Linux. Το πρόγραμμα ανοιχτού κώδικα μπορεί να χρησιμοποιηθεί για τον συγχρονισμό αρχείων και καταλόγων μεταξύ τοπικών συστημάτων ή μέσω δικτύων. Το εργαλείο χρησιμοποιεί μια **τεχνική διαφορικής μεταφοράς δεδομένων**, σύμφωνα με την οποία μεταφέρονται μόνο τα τμήματα των δεδομένων που έχουν πράγματι υποστεί αλλαγές. Αυτό ελαχιστοποιεί τον όγκο των δεδομένων που ανταλλάσσονται και επιταχύνει σημαντικά τη διαδικασία συγχρονισμού. Χάρη σε μια ποικιλία επιλογών, το rsync επιτρέπει **τον ακριβή έλεγχο της συμπεριφοράς συγχρονισμού**. Η ευέλικτη σύνταξη καθιστά δυνατές τόσο τις απλές τοπικές αντιγραφές όσο και τους σύνθετους συγχρονισμούς δικτύου.

## Ποια είναι η σύνταξη του rsync;

Η σύνταξη των εντολών του rsync έχει απλή δομή και είναι παρόμοια με αυτή των SSH, SCP και CP. Η βασική δομή έχει ως εξής:

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

Η διαδρομή προέλευσης από την οποία πρέπει να γίνει ο συγχρονισμός των δεδομένων εισάγεται στο πεδίο `source`, ενώ η διαδρομή προορισμού καθορίζεται στο πεδίο `destination`. Το rsync προσφέρει μια **σειρά από επιλογές** που μπορούν να χρησιμοποιήσουν οι χρήστες για να προσαρμόσουν τη διαδικασία συγχρονισμού στις ανάγκες τους. Οι πιο συχνά χρησιμοποιούμενες επιλογές είναι:

- `-a` (αρχεία): Διατηρεί τα δικαιώματα αρχείων, τις χρονικές σημάνσεις, τις ομάδες, τους ιδιοκτήτες και τις ειδικές ιδιότητες των αρχείων
- `-v` (verbose): Εμφανίζει λεπτομερείς πληροφορίες σχετικά με τη διαδικασία συγχρονισμού
- `-r` (αναδρομικό): Συγχρονίζει τους καταλόγους και το περιεχόμενό τους αναδρομικά
- `-u` (ενημέρωση): Μεταφέρει μόνο αρχεία που είναι νεότερα από αυτά που βρίσκονται ήδη στον κατάλογο προορισμού
- `-z` (compress): Μειώνει την κυκλοφορία δεδομένων στο δίκτυο
- `-n` –itemize-changes: Εμφανίζει μια λίστα με τις αλλαγές που θα γίνουν
- `--delete`: Διαγράφει αρχεία στον κατάλογο προορισμού που δεν υπάρχουν πλέον στην πηγή
- `--exclude`: Εξαιρεί ορισμένα αρχεία ή καταλόγους από τον συγχρονισμό
- `--dry-run`: Προσομοιώνει τη διαδικασία συγχρονισμού χωρίς να μεταφέρει πραγματικά αρχεία
- `--progress`: Εμφανίζει την πρόοδο της μεταφοράς αρχείων
- `--partial`: Τα αρχεία που έχουν μεταφερθεί εν μέρει παραμένουν στον κατάλογο προορισμού εάν η μεταφορά διακοπεί. Όταν η μεταφορά συνεχιστεί, το αρχείο συνεχίζεται από την τελευταία του κατάσταση

## Παραδείγματα σύνταξης του rsync

Τα παρακάτω παραδείγματα σύνταξης του rsync θα σας βοηθήσουν να κατανοήσετε καλύτερα τον τρόπο χρήσης της εντολής. Το παρακάτω παράδειγμα κώδικα δημιουργεί τον κατάλογο `dir1`, ο οποίος περιλαμβάνει 100 κενά αρχεία δοκιμής, καθώς και έναν δεύτερο κενό κατάλογο `dir2`:

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

Το περιεχόμενο του `dir1` μπορεί να συγχρονιστεί στο ίδιο σύστημα με `dir2` χρησιμοποιώντας την επιλογή `-r`:

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

Εναλλακτικά, μπορεί να χρησιμοποιηθεί η επιλογή `-a`, η οποία πραγματοποιεί αναδρομικό συγχρονισμό και περιλαμβάνει συμβολικούς συνδέσμους, ειδικά αρχεία συσκευών, χρόνους τροποποίησης, ομάδες, ιδιοκτήτες και δικαιώματα:

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

**Σημείωση**: Η κάθετος (/) στο τέλος του καταλόγου προέλευσης σε μια εντολή rsync είναι σημαντική **,** καθώς υποδηλώνει ότι **πρέπει να συγχρονιστεί** το **περιεχόμενο του καταλόγου και όχι ο ίδιος ο κατάλογος**.

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

Ακολουθεί ένα παράδειγμα του αποτελέσματος:

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

Εάν ο κατάλογος προέλευσης δεν τελειώνει με κάθετο, ο κατάλογος προέλευσης θα αντιγραφεί στον κατάλογο προορισμού:

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

Ακολουθεί το αποτέλεσμα:

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

Η χρήση της κάθετου στο τέλος του καταλόγου προέλευσης διασφαλίζει ότι η διαδικασία συγχρονισμού εκτελείται όπως αναμένεται και ότι το περιεχόμενο του καταλόγου προέλευσης μεταφέρεται στον σωστό κατάλογο προορισμού.

## Πώς να συγχρονίσετε το rsync με ένα απομακρυσμένο σύστημα

Ο συγχρονισμός ενός απομακρυσμένου συστήματος με το rsync συνήθως δεν είναι δύσκολος, υπό την προϋπόθεση ότι έχετε **πρόσβαση SSH στον απομακρυσμένο υπολογιστή** και διαθέτετε τα απαραίτητα στοιχεία πιστοποίησης. Το rsync χρησιμοποιεί συχνά το SSH (Secure Shell) για την ασφαλή επικοινωνία με απομακρυσμένα συστήματα. Για να χρησιμοποιήσετε αυτό το εργαλείο, πρέπει να είναι εγκατεστημένο και στις δύο πλευρές.

Εάν επιβεβαιωθεί η πρόσβαση μέσω SSH μεταξύ των δύο υπολογιστών, ο φάκελος `dir1` μπορεί να συγχρονιστεί σε έναν απομακρυσμένο υπολογιστή. Σε αυτή την περίπτωση, πρέπει να μεταφερθεί ο ίδιος ο κατάλογος, γι’ αυτό και η τελική κάθετος έχει παραλειφθεί στην παρακάτω εντολή:

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

Αν ένας κατάλογος μετακινηθεί από ένα τοπικό σύστημα σε ένα απομακρυσμένο σύστημα, αυτό ονομάζεται **λειτουργία push**. Αντίθετα, όταν ένας απομακρυσμένος κατάλογος συγχρονίζεται με ένα τοπικό σύστημα, αυτό ονομάζεται **λειτουργία pull**. Η σύνταξη για αυτό έχει ως εξής:

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

## Ποιες άλλες επιλογές υπάρχουν στο rsync;

Η τυπική συμπεριφορά του rsync μπορεί να προσαρμοστεί περαιτέρω χρησιμοποιώντας τις παρακάτω επιλογές.

### Μεταφορά μη συμπιεσμένων αρχείων με το rsync

Ο φόρτος του δικτύου κατά τη μεταφορά μη συμπιεσμένων αρχείων μπορεί να μειωθεί χρησιμοποιώντας την επιλογή `-z`:

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

### Εμφάνιση της προόδου και συνέχιση διακοπέντων μεταδόσεων

Με `-P` μπορείτε να συνδυάσετε τις επιλογές `--progress` και `--partial`. Έτσι, έχετε μια γενική εικόνα της προόδου των μεταδόσεων και ταυτόχρονα μπορείτε να συνεχίσετε τις διακοπείσες μεταδόσεις:

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

Ακολουθεί το αποτέλεσμα:

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

Εκτελέστε ξανά την εντολή για να λάβετε μια συντομότερη έξοδο. Αυτό επιτρέπει στο rsync να προσδιορίσει αν έχουν γίνει αλλαγές με βάση τις ώρες αλλαγής.

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

Ακολουθεί το αποτέλεσμα:

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

### Διατηρήστε τους καταλόγους συγχρονισμένους με το rsync

Για να διασφαλιστεί ότι δύο κατάλογοι παραμένουν πράγματι συγχρονισμένοι, είναι απαραίτητο να **διαγραφούν** από τον κατάλογο προορισμού τα αρχεία που έχουν αφαιρεθεί από τον κατάλογο προέλευσης. Ωστόσο, το rsync δεν διαγράφει αυτόματα τα αρχεία από τον κατάλογο προορισμού. Αυτό μπορεί να τροποποιηθεί με την επιλογή `--delete`. Ωστόσο, είναι σημαντικό να χρησιμοποιείτε αυτή την επιλογή με προσοχή, καθώς διαγράφει αρχεία στον κατάλογο προορισμού που δεν υπάρχουν πλέον στον κατάλογο προέλευσης.

Πριν χρησιμοποιήσετε αυτήν την επιλογή, θα πρέπει να χρησιμοποιήσετε την επιλογή `--dry-run`. Αυτό θα σας επιτρέψει να πραγματοποιήσετε μια **προσομοίωση της διαδικασίας συγχρονισμού** χωρίς να διαγράψετε πραγματικά αρχεία. Με αυτόν τον τρόπο μπορείτε να βεβαιωθείτε ότι θα γίνουν μόνο οι επιθυμητές αλλαγές, χωρίς να χάσετε κατά λάθος σημαντικά δεδομένα:

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

### Εξαίρεση αρχείων και φακέλων από τον συγχρονισμό

Στο rsync, μπορείτε να χρησιμοποιήσετε την επιλογή `--exclude` για **να εξαιρέσετε** συγκεκριμένα αρχεία και καταλόγους από τον συγχρονισμό. Αυτό είναι χρήσιμο αν, για παράδειγμα, δεν θέλετε να συγχρονίσετε προσωρινά αρχεία, αρχεία καταγραφής ή άλλο περιεχόμενο.

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

Εάν έχετε ορίσει ένα πρότυπο για τον αποκλεισμό αρχείων, μπορείτε να χρησιμοποιήσετε την επιλογή `--include=` για να παρακάμψετε αυτόν τον αποκλεισμό για συγκεκριμένα αρχεία που αντιστοιχούν σε διαφορετικό πρότυπο.

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

### Αποθήκευση αντιγράφων ασφαλείας με το rsync

Η επιλογή `--backup` σας επιτρέπει να αποθηκεύετε αντίγραφα ασφαλείας σημαντικών αρχείων. Μπορεί να χρησιμοποιηθεί σε συνδυασμό με την επιλογή `--backup-dir` για να καθορίσετε τον κατάλογο στον οποίο θα αποθηκευτούν τα αρχεία αντιγράφων ασφαλείας:

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

Μπορείτε να βρείτε μια αναλυτική παρουσίαση των διαφόρων σεναρίων δημιουργίας αντιγράφων ασφαλείας στο άρθρο μας σχετικά με [τα αντίγραφα ασφαλείας διακομιστών με το rsync](https://www.ionos.com/el-gr/digitalguide/diakomistis/ergaleia/rythmisi-antigrafon-asfaleias-diakomisti-me-to-rsync/).


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/diakomistis/ergaleia/rsync/](https://www.ionos.com/el-gr/digitalguide/diakomistis/ergaleia/rsync/) for AI/LLM consumption.