Comment puis-je différencier deux serveurs Linux Redhat?

15

J'ai deux serveurs qui devraient avoir la même configuration à l'exception des différences connues.

En exécutant:

find / \( -path /proc -o -path /sys -o -path /dev \) -prune -o -print | sort > allfiles.txt

Je peux trouver une liste de tous les fichiers sur un serveur et la comparer à la liste des fichiers sur l'autre serveur. Cela me montrera les différences dans les noms des fichiers qui résident sur les serveurs.

Ce que je veux vraiment faire, c'est exécuter une somme de contrôle sur tous les fichiers sur les deux serveurs et les comparer pour trouver également où le contenu est différent. par exemple

find / \( -path /proc -o -path /sys -o -path /dev \) -prune -o -print | xargs /usr/bin/sha1sum

Est-ce une façon sensée de procéder? Je pensais que rysnc possède déjà la plupart de ces fonctionnalités mais peut-il être utilisé pour fournir la liste des différences?

Stuart Woodward
la source
2
La prochaine fois, vous devriez utiliser à la -print0place de -printet xargs -0au lieu de xargs. Vous éviterez tout problème causé par les noms de fichiers "étranges".
Cristian Ciupitu

Réponses:

22

Vous avez raison, rsync est parfait pour cela. Utilisez --itemize-changes(aka -i). Assurez-vous que vous pouvez l'exécuter en tant que root des deux côtés (ou d'un autre utilisateur avec un accès complet à la machine):

rsync -ani --delete / root@remotehost:/
  • -a est pour l'archive, et fait essentiellement rsync faire un doublon exact (à l'exception de certains cas impliquant des liens)
  • -n est pour un essai à sec, et signifie que rien ne sera réellement changé (celui-ci est IMPORTANT! :))
  • -i est pour les changements de détails et génère un format simple à comprendre une fois que vous obtenez-it montrant chaque fichier qui doit être mis à jour (la syntaxe est expliquée en détail dans la page de manuel sous l'aide détaillée de ce déclencheur).
  • --delete fait rsync supprimer les fichiers qui existent sur la destination mais pas sur la source.

Si vous souhaitez exclure certains chemins, utilisez des commandes comme --exclude /var. Les motifs d'exclusion sont relatifs au répertoire source (qui dans ce cas est /, ils sont donc effectivement absolus).

Alex J
la source
Si vous excluez / var, vous aussi exclure où crontab sont stockés, ce qui a probablement DO doivent être vérifiés. Cependant, vous voulez exclure des choses comme / var / log et / var / cache
Sean Reifschneider
7

Vous voudrez peut-être rechercher l'indicateur -c de rsync. De man rsync:

    -c, --checksum              skip based on checksum, not mod-time & size

Je laisserais un commentaire à la réponse d'Alex Jurkiewicz, mais je n'ai pas assez de représentants: '(pourtant ...

Mike Mazur
la source
1
Certains scénarios existent où ce drapeau est utile. Le plus courant que j'ai vu, c'est lorsque vous avez des données stockées dans une sorte de format `` bizarre '' (généralement binaire) qui est une taille constante. Si le fichier est mis à jour par un processus automatisé des deux côtés de la synchronisation exactement au même moment (par exemple, rotation du journal ou similaire), rsync peut le manquer lors de la synchronisation à la taille / m-temps uniquement. Certainement possible, mais plutôt rare.
Alex J
Je me serais attendu à ce qu'il vérifie simplement le contenu des fichiers, afin que vous puissiez comparer sans prêter attention à l'heure du module et ainsi de suite, mais il semble qu'Alex a raison ... existe-t-il un bon moyen d'ignorer toutes les méta données et ne prêter attention qu'au contenu, comme le fait git?
iconoclaste
4

Un outil utile que vous devriez considérer est "rpm -Va". Cela affichera une liste de tous les fichiers empaquetés qui diffèrent de quand ils ont été empaquetés. Cela ignore tous les fichiers non packagés, mais c'est un très bon moyen d'avoir une idée des fichiers qui ont été modifiés depuis l'installation, qui font partie du système de base. Ils incluent également un indicateur qui vous indique s'ils sont considérés comme des fichiers de configuration.

Par exemple:

S.5....T  c /root/.bashrc
S.5....T  c /etc/yum/yum-updatesd.conf
.M......    /usr/bin/rdate
..5....T  c /etc/dbbackup.conf
S.5....T  c /etc/webalizer.conf
SM5....T  c /etc/sysconfig/iptables-config

Ainsi, ".bashrc" et "yum-updatesd.conf" sont des fichiers de "configuration" dont la taille, l'heure et la somme de contrôle MD5 ont changé. "rdate" a eu son changement de mode ...

La base de données RPM est une chose très utile.

Sean Reifschneider
la source