Dans un article précédent intitulé Outils d'administration système :Utiliser rsync pour gérer la sauvegarde, la restauration et la synchronisation des fichiers, j'ai parlé de cp
et sftp
, et j'ai regardé les bases de rsync
pour déplacer des fichiers. Il y a aussi quelques autres excellents articles ici sur Activer Sysadmin sur tar et SSH que vous devriez consulter. Copier des fichiers vers et depuis des systèmes distants et avoir un moyen simple d'exécuter une sauvegarde de quelque chose sur lequel vous travaillez (ou, d'ailleurs, des données critiques de l'entreprise) sont des outils de base utiles dans la boîte à outils sysadmin que j'utilise encore et encore. Parfois, cependant, vous voudrez peut-être faire quelque chose d'un peu plus sophistiqué, comme déplacer des données sur un lien moins fiable ou plus lent. Rsync
peut fournir un cryptage pour le protéger en transit, une compression pour le rendre plus fluide et des sommes de contrôle pour vous assurer d'obtenir ce que vous attendiez.
[ Les lecteurs ont également aimé : Comment copier en toute sécurité des fichiers entre des hôtes Linux à l'aide de SCP et SFTP ]
Maintenir un site Web
J'ai commencé à utiliser rsync
pour synchroniser une version locale d'un site Web que j'administrais à l'époque des ténèbres, lorsque CI/CD n'était qu'une étincelle dans les yeux de son père. Je pourrais conserver une copie locale sur laquelle travailler et également avoir une sauvegarde de la dernière version du site. Je vais utiliser ce scénario comme exemple. Vous pouvez utiliser rsync
pour synchroniser n'importe quel système de fichiers distant pour les sauvegardes ou comme moyen rapide de créer un pipeline de test à la production. Je l'ai également utilisé pour synchroniser un répertoire, puis utilisé tar
pour créer des sauvegardes locales :
skipworthy ~ enable websync ls -al
total 8
drwxrwxr-x 2 skipworthy skipworthy 4096 Dec 16 13:57 .
drwxrwxr-x 5 skipworthy skipworthy 4096 Dec 16 14:01 ..
skipworthy ~ enable websync rsync -aruv 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
enable/
enable/bar
enable/foo
enable/index
sent 85 bytes received 229 bytes 209.33 bytes/sec
total size is 0 speedup is 0.00
skipworthy ~ enable websync ls -l
total 4
dr-xr-xr-x 2 skipworthy skipworthy 4096 Dec 16 13:49 enable
Comme avant avec le rsync
local , nous fonctionnons en mode archive, en préservant mtime et les attributs de fichier, récursifs dans les sous-répertoires et ne mettant à jour que les données nouvelles ou modifiées.
Remarque :-v
signifie presque toujours verbeux , en envoyant la sortie à la console.
Supposons que je veuille ajouter une page au site et la télécharger :
skipworthy ~ enable websync rsync -aruv ./* 192.168.11.111:/usr/share/httpd/enable
sending incremental file list
pagetwo
rsync: recv_generator: mkdir "/usr/share/httpd/enable/enable" failed: Permission denied (13)
C'est le bon moment pour noter qu'il y a certaines choses auxquelles vous devez penser lorsque vous utilisez rsync
pour envoyer des fichiers. Rsync
a besoin d'une autorisation pour l'ensemble de l'arborescence de répertoires, pas seulement pour le répertoire de destination. Il existe plusieurs façons d'y parvenir. D'une part, il est possible de spécifier le uid et gid du rsync
démon dans /etc/rsyncd.conf
. Une autre méthode consiste à exécuter rsync
en tant qu'utilisateur avec les autorisations requises. Ces deux éléments peuvent être problématiques dans un environnement sécurisé, alors soyez prudent ici.
Notez également que par défaut, lorsque vous utilisez rsync
à distance, vous vous connectez directement au rsync
service sur le port 873 . Vous devez y penser lors de la configuration des règles et des autorisations du pare-feu. De plus, il existe des autorisations SELinux, qui sont une toute autre discussion et n'entrent pas dans le cadre de cet article. Une solution au problème des autorisations de répertoire et aux problèmes de sécurité, en général, consiste à utiliser SSH (cela devrait vous sembler familier maintenant). SSH configure un tunnel crypté et peut être configuré pour écouter sur n'importe quel port, sans oublier que vous pouvez spécifier une clé SSH pour sécuriser davantage la connexion et rendre les connexions à distance un peu plus conviviales pour l'automatisation.
Fonctionnalités avancées
Pour cet exemple suivant, je vais appliquer ces modifications en tant qu'utilisateur root. S'il vous plaît, ne faites pas comme moi :
rsync -aruv -e ssh ./* [email protected]:/usr/share/httpd/enable
[email protected]'s password:
sending incremental file list
pagetwo
sent 246 bytes received 36 bytes 43.38 bytes/sec
total size is 31 speedup is 0.11
Notez à nouveau que les options SSH habituelles sont disponibles pour les connexions, y compris la spécification du port et de l'emplacement de la clé. Rsync
vous permet également de sélectionner l'option shell distant, tant qu'il est installé aux deux extrémités et configuré dans .ssh/config
.
Sommes de contrôle
J'ai mentionné les sommes de contrôle plus tôt, et il y a deux choses potentiellement utiles ici. Tout d'abord, rsync
exécute une somme de contrôle par défaut, puis la vérifie sur la cible, ce qui vous avertira en cas de perte ou d'endommagement de données en vol.
Deuxièmement, vous pouvez également utiliser des sommes de contrôle pour déterminer quels fichiers transférer (c'est-à-dire quels fichiers sont réellement différents entre la source et la destination), ce qui est utile si vous n'êtes pas sûr que le mtime /une heure représente la version réelle du fichier que vous voulez. J'ai eu des systèmes de fichiers que j'essayais de synchroniser et qui étaient touchés par une autre application, donc les heures étaient incorrectes.
skipworthy ~ enable websync rsync -aruv -e ssh --checksum 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
sent 26 bytes received 364 bytes 780.00 bytes/sec
Remarque :Cela entraîne des frais généraux supplémentaires lors du traitement et du transfert, car une somme de contrôle est générée pour chaque fichier de chaque côté, puis comparée.
Compression
Une autre astuce utile est la compression. Le -z
l'option compressera le flux, --zc
définit le type de compression, et --zl
définit le niveau :
skipworthy ~ enable websync rsync -aruv -e ssh --zc=zlib --zl=6 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
sent 26 bytes received 248 bytes 548.00 bytes/sec
total size is 31 speedup is 0.11
Si vous ne spécifiez pas le type ou le niveau, rsync
utilise une liste fournie dans le RSYNC_COMPRESS_LIST variable d'environnement à négocier pour un type et un niveau de compression communs.
[ Vous souhaitez en savoir plus sur l'automatisation du système ? Démarrez avec The Automated Enterprise, un livre gratuit de Red Hat. ]
Récapitulez
Alors voilà :rsync
est encore un autre de ces outils qui est toujours utile et pertinent pour l'administration des systèmes Linux - un outil que j'ai été heureux d'avoir à plusieurs reprises dans ma carrière. Il y a beaucoup, beaucoup plus de choses que vous pouvez faire avec et que nous n'avions pas la place d'explorer ici. Comme toujours, consultez les pages de manuel !