17Aug

Guide du non-débutant sur la synchronisation des données avec Rsync

Le protocole rsync peut être très simple à utiliser pour les tâches de sauvegarde / synchronisation ordinaires, mais certaines de ses fonctionnalités plus avancées peuvent vous surprendre. Dans cet article, nous allons montrer comment même les plus grands stockeurs de données et les amateurs de sauvegarde peuvent utiliser rsync comme une solution unique pour tous leurs besoins de redondance de données.

Avertissement: Advanced Geeks seulement

Si vous êtes assis là en pensant "Que diable rsync?" Ou "Je n'utilise que rsync pour des tâches vraiment simples", vous pouvez consulter notre article précédent sur la façon d'utiliser rsync pour sauvegardervos données sur Linux, qui donne une introduction à rsync, vous guident à travers l'installation, et présente ses fonctions plus basiques. Une fois que vous avez une bonne compréhension de l'utilisation de rsync( honnêtement, ce n'est pas si complexe) et que vous êtes à l'aise avec un terminal Linux, vous êtes prêt à passer à ce guide avancé.

Exécuter rsync sur Windows

Tout d'abord, mettons nos lecteurs Windows sur la même page que nos gourous Linux. Bien que rsync soit conçu pour fonctionner sur des systèmes de type Unix, il n'y a aucune raison de ne pas pouvoir l'utiliser aussi facilement sur Windows. Cygwin produit une merveilleuse API Linux que nous pouvons utiliser pour lancer rsync, alors allez sur leur site web et téléchargez la version 32 bits ou 64 bits, en fonction de votre ordinateur.

L'installation est simple;vous pouvez conserver toutes les options à leurs valeurs par défaut jusqu'à ce que vous arriviez à l'écran "Sélectionner les paquets".

Maintenant, vous devez faire les mêmes étapes pour Vim et SSH, mais les paquets vont avoir l'air un peu différents quand vous allez les sélectionner, donc voici quelques captures d'écran:

Installation de Vim:

Installation de SSH:

Après avoirsélectionné ces trois paquets, continuez à cliquer sur Suivant jusqu'à la fin de l'installation. Ensuite, vous pouvez ouvrir Cygwin en cliquant sur l'icône que le programme d'installation a placé sur votre bureau.

Commandes rsync:

simple à avancé Maintenant que les utilisateurs Windows sont sur la même page, jetons un coup d'œil à une simple commande rsync, et montrons comment l'utilisation de certains commutateurs avancés peut rapidement la rendre complexe.

Disons que vous avez un tas de fichiers qui ont besoin d'être sauvegardés - qui ne le fait pas ces jours-ci? Vous branchez votre disque dur portable de sorte que vous pouvez sauvegarder vos fichiers d'ordinateurs, et exécutez la commande suivante:

rsync -a /home/geek/files/ /mnt/usb/files/

Ou, la façon dont il se pencherait sur un ordinateur Windows avec Cygwin:

rsync -a /cygdrive/c/files/ /cygdrive/e/files/

Assez simple, et àÀ ce stade, il n'est vraiment pas nécessaire d'utiliser rsync, car vous pouvez simplement faire glisser et déposer les fichiers. Toutefois, si votre autre disque dur contient déjà certains fichiers et n'a besoin que des versions mises à jour plus les fichiers créés depuis la dernière synchronisation, cette commande est pratique car elle envoie uniquement les nouvelles données sur le disque dur. Avec de gros fichiers, et surtout le transfert de fichiers sur Internet, c'est une grosse affaire.

Sauvegardez vos fichiers sur un disque dur externe et gardez le disque dur au même endroit que votre ordinateur est une très mauvaise idée, alors jetons un coup d'oeil à ce qu'il faudrait pour commencer à envoyer vos fichiers sur Internet à un autre ordinateur(celui que vous avez loué, un membre de la famille, etc.)

rsync -av --delete -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

La commande ci-dessus enverrait vos fichiers à un autre ordinateur avec une adresse IP de 10.1.1.1.Il supprime les fichiers superflus de la destination qui n'existent plus dans le répertoire source, affiche les noms de fichiers transférés pour que vous ayez une idée de ce qui se passe, et tunnelise rsync via SSH sur le port 12345.

Le -a -v -eLes interrupteurs -delete sont parmi les plus basiques et les plus utilisés;vous devriez déjà en savoir beaucoup sur eux si vous lisez ce tutoriel. Passons en revue d'autres commutateurs qui sont parfois ignorés mais incroyablement utiles:

--progress - Ce commutateur nous permet de voir la progression du transfert de chaque fichier. Il est particulièrement utile lors du transfert de gros fichiers sur Internet, mais peut générer une quantité insensée d'informations lorsque vous transférez de petits fichiers sur un réseau rapide.

Une commande rsync avec le commutateur --progress en tant que sauvegarde est en cours:

--partial - Ceci est un autre commutateur qui est particulièrement utile lors du transfert de fichiers volumineux sur Internet. Si rsync est interrompue pour une raison quelconque au milieu d'un transfert de fichier, le fichier partiellement transféré est conservé dans le répertoire de destination et le transfert reprend là où il s'était arrêté une fois la commande rsync exécutée à nouveau. Lorsque vous transférez de gros fichiers sur Internet( disons, quelques gigaoctets), il n'y a rien de pire que d'avoir une seconde panne d'Internet, un écran bleu ou une erreur humaine qui retarde le transfert de votre fichier et vous oblige à tout recommencer.

-P - ce commutateur combine --progress et --partial, donc utilisez-le à la place et il rendra votre commande rsync un peu plus propre.

-z ou --compress - Ce commutateur permet à rsync de compresser les données du fichier lors de son transfert, ce qui réduit la quantité de données à envoyer à la destination. C'est en fait un commutateur assez commun mais loin d'être essentiel, qui ne vous profite vraiment que sur les transferts entre connexions lentes, et ne fait rien pour les types de fichiers suivants: 7z, avi, bz2, deb, g, z iso, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h ou -human-lisible - Si vous utilisez le commutateur --progress, vous voudrez certainement utiliser celui-ci aussi. Autrement dit, à moins que vous ne souhaitiez convertir des octets en mégaoctets à la volée. L'option -h convertit tous les nombres sortis en un format lisible par l'utilisateur, ce qui vous permet de comprendre la quantité de données transférées.

-n ou --dry-run - Ce commutateur est essentiel pour savoir quand vous écrivez votre script rsync pour la première fois. Il effectue un test mais n'apporte aucune modification. Les modifications en cours sont restituées normalement, ce qui vous permet de tout relire et de vous assurer que tout se passe bien avant de lancer votre script en production.

-R ou --relative - Ce commutateur doit être utilisé si le répertoire de destination n'existe pas déjà.Nous utiliserons cette option plus tard dans ce guide afin de pouvoir créer des répertoires sur la machine cible avec des horodatages dans les noms de dossiers.

--exclude-from - Ce commutateur est utilisé pour lier à une liste d'exclusion qui contient des chemins de répertoire que vous ne voulez pas sauvegarder. Il a juste besoin d'un fichier texte brut avec un répertoire ou un chemin de fichier sur chaque ligne.

--include-from - Similaire à --exclude-from, mais il est lié à un fichier contenant des répertoires et des chemins de fichiers que vous voulez sauvegarder.

--stats - Pas vraiment un changement important, mais si vous êtes un administrateur système, il peut être utile de connaître les statistiques détaillées de chaque sauvegarde, juste pour pouvoir surveiller la quantité de trafic envoyé sur votre réseau et tel.

--log-file - Cela vous permet d'envoyer la sortie rsync vers un fichier journal. Nous recommandons fortement ceci pour les sauvegardes automatisées dans lesquelles vous n'êtes pas là pour lire la sortie vous-même. Donnez toujours des fichiers journaux une fois dans votre temps libre pour vous assurer que tout fonctionne correctement. En outre, c'est un commutateur crucial pour un administrateur système à utiliser, de sorte que vous ne vous demandez pas comment vos sauvegardes ont échoué pendant que vous avez quitté le stagiaire en charge.

Jetons un coup d'oeil à notre commande rsync maintenant que nous avons ajouté quelques commutateurs supplémentaires:

rsync -avzhP --delete --stats --log-fichier = /home/geek/rsynclogs/ backup.log --exclude-from '/home/geek/ exclude.txt'-e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/

La commande est encore assez simple, mais nous n'avons toujours pas créé une solution de sauvegarde correcte. Même si nos fichiers se trouvent maintenant dans deux emplacements physiques différents, cette sauvegarde ne protège en rien de l'une des principales causes de perte de données: l'erreur humaine.

Sauvegardes de clichés

Si vous supprimez accidentellement un fichier, qu'un virus corrompt l'un de vos fichiers ou quelque chose d'autre qui altère irrémédiablement vos fichiers, puis exécutez votre script de sauvegarde rsync, vos données sauvegardées sont remplacées par les modifications indésirables. Quand une telle chose se produit( pas si, mais quand), votre solution de sauvegarde n'a rien fait pour vous protéger de votre perte de données.

Le créateur de rsync l'a compris et a ajouté les arguments --backup et --backup-dir pour que les utilisateurs puissent exécuter des sauvegardes différentielles. Le tout premier exemple sur le site Web de rsync montre un script où une sauvegarde complète est exécutée tous les sept jours, puis les modifications apportées à ces fichiers sont sauvegardées quotidiennement dans des répertoires distincts. Le problème avec cette méthode est que pour récupérer vos fichiers, vous devez les récupérer efficacement sept fois différentes. De plus, la plupart des geeks exécutent leurs sauvegardes plusieurs fois par jour, vous pouvez donc facilement avoir plus de 20 répertoires de sauvegarde différents à un moment donné.Non seulement la récupération de vos fichiers est douloureuse, mais même le simple fait de consulter vos données sauvegardées peut prendre beaucoup de temps. Vous devez savoir à quel moment un fichier a été modifié pour trouver sa copie sauvegardée la plus récente. En plus de tout cela, il est inefficace d'exécuter des sauvegardes incrémentielles hebdomadaires( ou même moins souvent dans certains cas).

Sauvegardes instantanées à la rescousse! Les sauvegardes instantanées ne sont rien d'autre que des sauvegardes incrémentielles, mais elles utilisent des liens physiques pour conserver la structure de fichier de la source d'origine. Cela peut être difficile à comprendre au début, alors jetons un coup d'œil à un exemple.

Imaginez que nous ayons un script de sauvegarde qui sauvegarde automatiquement nos données toutes les deux heures. Chaque fois que rsync le fait, il nomme chaque sauvegarde au format: Backup-month-day-year-time.

Donc, à la fin d'une journée typique, nous aurions une liste de dossiers dans notre répertoire de destination comme ceci:

En parcourant l'un de ces répertoires, vous verriez chaque fichier du répertoire source exactement comme il était à ce moment-là.Pourtant, il n'y aurait pas de doublons dans deux répertoires.rsync accomplit cela avec l'utilisation de la liaison directe via l'argument --link-dest = DIR.

Bien sûr, afin d'avoir ces noms de répertoires joliment et proprement datés, nous allons devoir renforcer notre script rsync un peu. Jetons un coup d'oeil à ce qu'il faudrait pour accomplir une solution de sauvegarde comme celle-ci, puis nous expliquerons le script plus en détail:

#!/bin/ bash

#copy ancien time.txt à time2.txt

oui |cp ~ /backup/ time.txt ~ /backup/ time2.txt

#overwrite ancien fichier time.txt avec nouvel echo

echo `date +"% F-% I% p "` & gt;~ /backup/ time.txt

#make le fichier journal

echo "" & gt;~ /backup/ rsync-`date +"% F-% I% p "`. log Commande

#rsync

rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = ~ /backup/ rsync-`date +"% F-% I% p "`. log --exclude-de '~ / exclude.txt' --link-dest = /home/geek2/files/ `cat ~ /backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ `date +"% F-% I% p "` /

# ne pas oublier de scp le fichier journal et le mettre avec lesauvegarde

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ temps.txt`.log [email protected]: /home/geek2/files/` chat ~ /backup/ temps.txt` / rsync-`cat ~ /backup/ temps.txt`.log

serait un script rsync snapshot typique. Au cas où nous vous aurions perdu quelque part, disséquons-le morceau par morceau:

La première ligne de notre script copie le contenu de time.txt en time2.txt. Le canal yes est pour confirmer que nous voulons écraser le fichier. Ensuite, nous prenons l'heure actuelle et la mettons dans time.txt. Ces fichiers seront utiles plus tard.

La ligne suivante crée le fichier journal rsync, en le nommant rsync-date.log( où date est la date et l'heure réelles).

Maintenant, la commande rsync complexe dont nous vous avons averti:

-avzhPR, -e, --delete, --stats, --log-fichier, --exclude-from, --link-dest - Justeles commutateurs dont nous avons parlé plus tôt;faites défiler vers le haut si vous avez besoin d'un rappel.

--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Ce sont les permissions pour le répertoire de destination. Puisque nous faisons ce répertoire au milieu de notre script rsync, nous devons spécifier les permissions pour que notre utilisateur puisse y écrire des fichiers.

L'utilisation des commandes date et cat

Nous allons passer en revue chaque utilisation des commandes date et cat à l'intérieur de la commande rsync, dans l'ordre où elles se produisent. Remarque: nous sommes conscients qu'il existe d'autres façons d'accomplir cette fonctionnalité, en particulier avec l'utilisation de variables de déclaration, mais pour les besoins de ce guide, nous avons décidé d'utiliser cette méthode.

Le fichier journal est spécifié comme:

~ /backup/ rsync-`date +"% F-% I% p "`. log

Sinon, nous aurions pu le spécifier comme:

~ /backup/ rsync-`cat ~ /backup/ time.txt`.log

De toute façon, la commande --log-file devrait pouvoir trouver le fichier journal daté précédemment et y écrire.

Le fichier de destination du lien est spécifié comme suit:

--link-dest = /home/geek2/files/ `cat ~ /backup/ time2.txt`

Cela signifie que la commande --link-dest reçoit le répertoire de la sauvegarde précédente. Si nous exécutons des sauvegardes toutes les deux heures, et qu'il est 16h00 au moment où nous avons exécuté ce script, alors la commande --link-dest recherche le répertoire créé à 14h00 et ne transfère que les données qui ont changé depuis( si seulement).

Pour réitérer, c'est pourquoi time.txt est copié dans time2.txt au début du script, ainsi la commande --link-dest peut référencer cette heure plus tard.

Le répertoire de destination est spécifié comme:

[email protected]: /home/geek2/files/ `date +"% F-% I% p "`

Cette commande place simplement les fichiers source dans un répertoire qui a un titre de la date et l'heure actuelles.

Enfin, nous nous assurons qu'une copie du fichier journal est placée dans la sauvegarde.

scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ temps.txt`.log [email protected]: /home/geek2/files/` chat ~ /backup/ temps.txt` / rsync-`cat ~ /backup/ temps.txt`.log

Nous utilisonscopie sécurisée sur le port 12345 pour prendre le journal rsync et placez-le dans le bon répertoire. Pour sélectionner le bon fichier journal et vérifier qu'il se trouve au bon endroit, le fichier time.txt doit être référencé via la commande cat. Si vous vous demandez pourquoi nous avons décidé de chatter time.txt au lieu d'utiliser simplement la commande date, c'est parce que beaucoup de temps aurait pu passer pendant que la commande rsync était en cours d'exécution, donc pour nous assurer que nous avons le bon moment,le document texte que nous avons créé plus tôt.

Automation

Utilisez Cron sous Linux ou le planificateur de tâches sous Windows pour automatiser votre script rsync. Une chose dont vous devez faire attention est de s'assurer que vous mettez fin à tous les processus rsync en cours d'exécution avant de continuer un nouveau. Le planificateur de tâches semble fermer automatiquement toutes les instances en cours d'exécution, mais pour Linux, vous devrez être un peu plus créatif.

La plupart des distributions Linux peuvent utiliser la commande pkill, assurez-vous donc d'ajouter ce qui suit au début de votre script rsync:

pkill -9 rsync

Chiffrement

Non, nous n'avons pas encore terminé.Nous avons enfin une solution de sauvegarde fantastique( et gratuite!) En place, mais tous nos fichiers sont toujours susceptibles de vol. J'espère que vous sauvegardez vos fichiers dans des endroits éloignés de plusieurs centaines de kilomètres. Peu importe la sécurité de cet endroit lointain, le vol et le piratage peuvent toujours poser problème.

Dans nos exemples, nous avons canalisé tout notre trafic rsync via SSH, ce qui signifie que tous nos fichiers sont cryptés en transit vers leur destination. Cependant, nous devons nous assurer que la destination est aussi sûre. Gardez à l'esprit que rsync ne chiffre que vos données lors du transfert, mais les fichiers sont très ouverts une fois qu'ils atteignent leur destination.

Une des meilleures fonctionnalités de rsync est de ne transférer que les changements dans chaque fichier. Si vous avez tous vos fichiers cryptés et effectuez une modification mineure, le fichier entier devra être retransmis à la suite du cryptage complètement aléatoire de toutes les données après tout changement.

Pour cette raison, il est préférable / préférable d'utiliser un certain type de chiffrement de disque, tel que BitLocker pour Windows ou dm-crypt pour Linux. De cette façon, vos données sont protégées en cas de vol, mais les fichiers peuvent être transférés avec rsync et votre chiffrement ne nuira pas à ses performances. Il existe d'autres options disponibles qui fonctionnent de la même façon que rsync ou même implémentent une forme quelconque, comme Duplicity, mais elles ne disposent pas des fonctionnalités que rsync peut offrir.

Après avoir configuré vos sauvegardes de clichés sur un emplacement hors site et crypté vos disques durs source et de destination, donnez-vous une tape dans le dos pour maîtriser rsync et implémenter la solution de sauvegarde de données la plus infaillible possible.