CentOS 5.x
La question Mq semblait similaire à celle-ci mais je n'étais pas sûr ...
J'ai deux serveurs (complètement isolés l'un de l'autre), chacun avec un répertoire et des sous-répertoires qui devraient avoir le même contenu exact.
Par exemple, la disposition du répertoire pourrait être quelque chose comme:
SERVEUR A -
/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt
SERVEUR B -
/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt
Idéalement, je voudrais un moyen de faire une vérification récursive et d'avoir quelque chose qui confirme que tout correspond.
Je souhaite également éviter d'utiliser des outils tiers.
Des idées?
rsync
? Alors ... euh, utiliserrsync
(avec-n
option)?Réponses:
Une bonne façon consiste à utiliser md5sums sur chaque fichier de l'arborescence:
Exécutez ceci sur server1:
Exécutez ceci sur server2
Ensuite, comparez simplement les deux fichiers (en utilisant diff) ou ce que vous voulez.
Cela correspond-il à ce que vous recherchez?
Bien sûr, vous pouvez utiliser SSH pour exécuter la commande à distance si vous le souhaitez.
la source
ssh user@servera 'find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum'
Si vous ne vous souciez pas nécessairement de ce qui a changé, juste que quelque chose a changé, rsync est toujours très bon pour cela. Essayez d'exécuter cette commande et jetez un œil à la sortie, en supposant qu'elle est exécutée à partir de 'servera'.
La liste résultante sera les fichiers qui auraient été modifiés si vous aviez réellement exécuté le processus de synchronisation. Gardant à l'esprit que les fichiers apparaîtront dans la liste même si seul l'horodatage a changé, mais le contenu est resté le même. Depuis que nous avons ajouté le
-n
drapeau, aucune action ne sera réellement effectuée, uniquement signalée.la source
rsync
. Pour être complètement correct, cependant, vous devez exécuter lersync
dans les deux directions. Autrement dit, vous devez ajouter ceci:rsync -avcn serverb:/opt/foo/ /opt/foo
Bien que vous puissiez pirater ensemble un script rapide qui calculera les hachages MD5 individuels pour les fichiers individuels dans un répertoire, la meilleure façon de le faire serait d'utiliser un outil appelé
md5deep
qui calculera récursivement les hachages de tous les fichiers dans un répertoire, puis sortira les dans un fichier. Il peut ensuite être utilisé sur un autre répertoire, en prenant le premier fichier de hachage en entrée et en vous fournissant une liste de fichiers différents entre les deux répertoires.Donc, en prenant votre exemple, vous suivriez ce processus:
Calculez les hachages du répertoire requis sur le serveur A:
md5deep -r /opt/foo/ > file_hashes.txt
Copiez le fichier
file_hashes.txt
sur le serveur B pour comparaison.Calculez les hachages du répertoire requis sur le serveur B, mais en prenant les hachages de fichiers du serveur A comme fichier d'entrée en utilisant l'
-x
indicateur pour n'afficher que les fichiers différents:md5deep -x file_hashes.txt -r /opt/foo/
L'ensemble d'outils md5deep fait partie du système de gestion de packages de la plupart des distributions, et la grande chose est qu'il prend en charge un certain nombre d'algorithmes de hachage différents, pas seulement MD5. Donc, si vous êtes paranoïaque à propos des collisions, vous avez un certain nombre d'alternatives disponibles. Les outils suivants font partie de md5deep, chacun fournissant un algorithme de hachage alternatif:
la source
J'ai utilisé une technique similaire à @ scott-pack. Cela vous donnera une différence dans les deux sens. Tout ce qui commence par "supprimer" est un fichier qui se trouve sur le serveur distant mais pas sur le serveur local. Chaque répertoire répertorié sans aucun contenu de fichier est celui qui n'a aucune modification. Chaque fichier répertorié est un fichier qui n'existe pas sur le serveur distant ou la version locale est "plus récente".
la source