Πώς να βελτιστοποιήσετε τον συγχρονισμό δεδομένων με το rsync
Το rsync είναι ένα ευέλικτο εργαλείο που απλοποιεί τη μεταφορά αρχείων μέσω δικτυακών συνδέσεων και επιταχύνει τον συγχρονισμό των τοπικών καταλόγων. Η μεγάλη ευελιξία του καθιστά αυτό το εργαλείο συγχρονισμού μια εξαιρετική επιλογή για μια ποικιλία λειτουργιών σε επίπεδο αρχείων.
Τι είναι το rsync;
Το rsync, συντομογραφία του «remote synchronisation» (απομακρυσμένος συγχρονισμός), είναι ένα ευέλικτο και συμβατό με δίκτυα εργαλείο συγχρονισμού για το Linux. Το πρόγραμμα ανοιχτού κώδικα μπορεί να χρησιμοποιηθεί για τον συγχρονισμό αρχείων και καταλόγων μεταξύ τοπικών συστημάτων ή μέσω δικτύων. Το εργαλείο χρησιμοποιεί μια τεχνική διαφορικής μεταφοράς δεδομένων, σύμφωνα με την οποία μεταφέρονται μόνο τα τμήματα των δεδομένων που έχουν πράγματι υποστεί αλλαγές. Αυτό ελαχιστοποιεί τον όγκο των δεδομένων που ανταλλάσσονται και επιταχύνει σημαντικά τη διαδικασία συγχρονισμού. Χάρη σε μια ποικιλία επιλογών, το rsync επιτρέπει τον ακριβή έλεγχο της συμπεριφοράς συγχρονισμού. Η ευέλικτη σύνταξη καθιστά δυνατές τόσο τις απλές τοπικές αντιγραφές όσο και τους σύνθετους συγχρονισμούς δικτύου.
Ποια είναι η σύνταξη του rsync;
Η σύνταξη των εντολών του rsync έχει απλή δομή και είναι παρόμοια με αυτή των SSH, SCP και CP. Η βασική δομή έχει ως εξής:
rsync [OPTION] source destinationbashΗ διαδρομή προέλευσης από την οποία πρέπει να γίνει ο συγχρονισμός των δεδομένων εισάγεται στο πεδίο source, ενώ η διαδρομή προορισμού καθορίζεται στο πεδίο destination. Το rsync προσφέρει μια σειρά από επιλογές που μπορούν να χρησιμοποιήσουν οι χρήστες για να προσαρμόσουν τη διαδικασία συγχρονισμού στις ανάγκες τους. Οι πιο συχνά χρησιμοποιούμενες επιλογές είναι:
-a(αρχεία): Διατηρεί τα δικαιώματα αρχείων, τις χρονικές σημάνσεις, τις ομάδες, τους ιδιοκτήτες και τις ειδικές ιδιότητες των αρχείων-v(verbose): Εμφανίζει λεπτομερείς πληροφορίες σχετικά με τη διαδικασία συγχρονισμού-r(αναδρομικό): Συγχρονίζει τους καταλόγους και το περιεχόμενό τους αναδρομικά-u(ενημέρωση): Μεταφέρει μόνο αρχεία που είναι νεότερα από αυτά που βρίσκονται ήδη στον κατάλογο προορισμού-z(compress): Μειώνει την κυκλοφορία δεδομένων στο δίκτυο-n–itemize-changes: Εμφανίζει μια λίστα με τις αλλαγές που θα γίνουν--delete: Διαγράφει αρχεία στον κατάλογο προορισμού που δεν υπάρχουν πλέον στην πηγή--exclude: Εξαιρεί ορισμένα αρχεία ή καταλόγους από τον συγχρονισμό--dry-run: Προσομοιώνει τη διαδικασία συγχρονισμού χωρίς να μεταφέρει πραγματικά αρχεία--progress: Εμφανίζει την πρόοδο της μεταφοράς αρχείων--partial: Τα αρχεία που έχουν μεταφερθεί εν μέρει παραμένουν στον κατάλογο προορισμού εάν η μεταφορά διακοπεί. Όταν η μεταφορά συνεχιστεί, το αρχείο συνεχίζεται από την τελευταία του κατάσταση
Παραδείγματα σύνταξης του rsync
Τα παρακάτω παραδείγματα σύνταξης του rsync θα σας βοηθήσουν να κατανοήσετε καλύτερα τον τρόπο χρήσης της εντολής. Το παρακάτω παράδειγμα κώδικα δημιουργεί τον κατάλογο dir1, ο οποίος περιλαμβάνει 100 κενά αρχεία δοκιμής, καθώς και έναν δεύτερο κενό κατάλογο dir2:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashΤο περιεχόμενο του dir1 μπορεί να συγχρονιστεί στο ίδιο σύστημα με dir2 χρησιμοποιώντας την επιλογή -r:
$ rsync -r dir1/ dir2bashΕναλλακτικά, μπορεί να χρησιμοποιηθεί η επιλογή -a, η οποία πραγματοποιεί αναδρομικό συγχρονισμό και περιλαμβάνει συμβολικούς συνδέσμους, ειδικά αρχεία συσκευών, χρόνους τροποποίησης, ομάδες, ιδιοκτήτες και δικαιώματα:
$ rsync -a dir1/ dir2bashΣημείωση: Η κάθετος (/) στο τέλος του καταλόγου προέλευσης σε μια εντολή rsync είναι σημαντική , καθώς υποδηλώνει ότι πρέπει να συγχρονιστεί το περιεχόμενο του καταλόγου και όχι ο ίδιος ο κατάλογος.
$ rsync -a dir1/ dir2bashΑκολουθεί ένα παράδειγμα του αποτελέσματος:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashΕάν ο κατάλογος προέλευσης δεν τελειώνει με κάθετο, ο κατάλογος προέλευσης θα αντιγραφεί στον κατάλογο προορισμού:
$ rsync -a dir1 dir2bashΑκολουθεί το αποτέλεσμα:
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
. . .bashΗ χρήση της κάθετου στο τέλος του καταλόγου προέλευσης διασφαλίζει ότι η διαδικασία συγχρονισμού εκτελείται όπως αναμένεται και ότι το περιεχόμενο του καταλόγου προέλευσης μεταφέρεται στον σωστό κατάλογο προορισμού.
Πώς να συγχρονίσετε το rsync με ένα απομακρυσμένο σύστημα
Ο συγχρονισμός ενός απομακρυσμένου συστήματος με το rsync συνήθως δεν είναι δύσκολος, υπό την προϋπόθεση ότι έχετε πρόσβαση SSH στον απομακρυσμένο υπολογιστή και διαθέτετε τα απαραίτητα στοιχεία πιστοποίησης. Το rsync χρησιμοποιεί συχνά το SSH (Secure Shell) για την ασφαλή επικοινωνία με απομακρυσμένα συστήματα. Για να χρησιμοποιήσετε αυτό το εργαλείο, πρέπει να είναι εγκατεστημένο και στις δύο πλευρές.
Εάν επιβεβαιωθεί η πρόσβαση μέσω SSH μεταξύ των δύο υπολογιστών, ο φάκελος dir1 μπορεί να συγχρονιστεί σε έναν απομακρυσμένο υπολογιστή. Σε αυτή την περίπτωση, πρέπει να μεταφερθεί ο ίδιος ο κατάλογος, γι’ αυτό και η τελική κάθετος έχει παραλειφθεί στην παρακάτω εντολή:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashΑν ένας κατάλογος μετακινηθεί από ένα τοπικό σύστημα σε ένα απομακρυσμένο σύστημα, αυτό ονομάζεται λειτουργία push. Αντίθετα, όταν ένας απομακρυσμένος κατάλογος συγχρονίζεται με ένα τοπικό σύστημα, αυτό ονομάζεται λειτουργία pull. Η σύνταξη για αυτό έχει ως εξής:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machinebashΠοιες άλλες επιλογές υπάρχουν στο rsync;
Η τυπική συμπεριφορά του rsync μπορεί να προσαρμοστεί περαιτέρω χρησιμοποιώντας τις παρακάτω επιλογές.
Μεταφορά μη συμπιεσμένων αρχείων με το rsync
Ο φόρτος του δικτύου κατά τη μεταφορά μη συμπιεσμένων αρχείων μπορεί να μειωθεί χρησιμοποιώντας την επιλογή -z:
$ rsync -az source destinationbashΕμφάνιση της προόδου και συνέχιση διακοπέντων μεταδόσεων
Με -P μπορείτε να συνδυάσετε τις επιλογές --progress και --partial. Έτσι, έχετε μια γενική εικόνα της προόδου των μεταδόσεων και ταυτόχρονα μπορείτε να συνεχίσετε τις διακοπείσες μεταδόσεις:
$ rsync -azP source destinationbashΑκολουθεί το αποτέλεσμα:
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)
. . .bashΕκτελέστε ξανά την εντολή για να λάβετε μια συντομότερη έξοδο. Αυτό επιτρέπει στο rsync να προσδιορίσει αν έχουν γίνει αλλαγές με βάση τις ώρες αλλαγής.
$ rsync -azP source destinationbashΑκολουθεί το αποτέλεσμα:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashΔιατηρήστε τους καταλόγους συγχρονισμένους με το rsync
Για να διασφαλιστεί ότι δύο κατάλογοι παραμένουν πράγματι συγχρονισμένοι, είναι απαραίτητο να διαγραφούν από τον κατάλογο προορισμού τα αρχεία που έχουν αφαιρεθεί από τον κατάλογο προέλευσης. Ωστόσο, το rsync δεν διαγράφει αυτόματα τα αρχεία από τον κατάλογο προορισμού. Αυτό μπορεί να τροποποιηθεί με την επιλογή --delete. Ωστόσο, είναι σημαντικό να χρησιμοποιείτε αυτή την επιλογή με προσοχή, καθώς διαγράφει αρχεία στον κατάλογο προορισμού που δεν υπάρχουν πλέον στον κατάλογο προέλευσης.
Πριν χρησιμοποιήσετε αυτήν την επιλογή, θα πρέπει να χρησιμοποιήσετε την επιλογή --dry-run. Αυτό θα σας επιτρέψει να πραγματοποιήσετε μια προσομοίωση της διαδικασίας συγχρονισμού χωρίς να διαγράψετε πραγματικά αρχεία. Με αυτόν τον τρόπο μπορείτε να βεβαιωθείτε ότι θα γίνουν μόνο οι επιθυμητές αλλαγές, χωρίς να χάσετε κατά λάθος σημαντικά δεδομένα:
$ rsync -a --delete source destinationbashΕξαίρεση αρχείων και φακέλων από τον συγχρονισμό
Στο rsync, μπορείτε να χρησιμοποιήσετε την επιλογή --exclude για να εξαιρέσετε συγκεκριμένα αρχεία και καταλόγους από τον συγχρονισμό. Αυτό είναι χρήσιμο αν, για παράδειγμα, δεν θέλετε να συγχρονίσετε προσωρινά αρχεία, αρχεία καταγραφής ή άλλο περιεχόμενο.
$ rsync -a --exclude=pattern_to_exclude source destinationbashΕάν έχετε ορίσει ένα πρότυπο για τον αποκλεισμό αρχείων, μπορείτε να χρησιμοποιήσετε την επιλογή --include= για να παρακάμψετε αυτόν τον αποκλεισμό για συγκεκριμένα αρχεία που αντιστοιχούν σε διαφορετικό πρότυπο.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashΑποθήκευση αντιγράφων ασφαλείας με το rsync
Η επιλογή --backup σας επιτρέπει να αποθηκεύετε αντίγραφα ασφαλείας σημαντικών αρχείων. Μπορεί να χρησιμοποιηθεί σε συνδυασμό με την επιλογή --backup-dir για να καθορίσετε τον κατάλογο στον οποίο θα αποθηκευτούν τα αρχεία αντιγράφων ασφαλείας:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashΜπορείτε να βρείτε μια αναλυτική παρουσίαση των διαφόρων σεναρίων δημιουργίας αντιγράφων ασφαλείας στο άρθρο μας σχετικά με τα αντίγραφα ασφαλείας διακομιστών με το rsync.