¿Cómo puedo diferenciar dos servidores Redhat Linux?

15

Tengo dos servidores que deberían tener la misma configuración, excepto por las diferencias conocidas.

Mediante la ejecución:

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

Puedo encontrar una lista de todos los archivos en un servidor y compararlo con la lista de archivos en el otro servidor. Esto me mostrará las diferencias en los nombres de los archivos que residen en los servidores.

Lo que realmente quiero hacer es ejecutar una suma de verificación en todos los archivos en ambos servidores y compararlos para también encontrar dónde los contenidos son diferentes. p.ej

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

¿Es esta una forma sensata de hacer esto? Estaba pensando que rysnc ya tiene la mayor parte de esta funcionalidad, pero ¿se puede usar para proporcionar la lista de diferencias?

Stuart Woodward
fuente
2
La próxima vez debe usar en -print0lugar de -printy en xargs -0lugar de xargs. Evitará cualquier problema causado por nombres de archivo "extraños".
Cristian Ciupitu 01 de

Respuestas:

22

Tienes razón, rsync es perfecto para esto. Uso --itemize-changes(también conocido como -i). Asegúrese de que puede ejecutar esto como root en ambos lados (o algún otro usuario con acceso completo a la máquina):

rsync -ani --delete / root@remotehost:/
  • -a es para el archivo, y básicamente hace que rsync haga un duplicado exacto (aparte de algunos casos que involucran enlaces)
  • -n es para funcionamiento en seco, y significa que nada se cambiará realmente (¡Esto es IMPORTANTE! :))
  • -i es para cambios en los ítems, y genera un formato simple de entender una vez que lo obtienes mostrando cada archivo que necesita ser actualizado (la sintaxis se explica completamente en la página del manual bajo la ayuda detallada para ese activador).
  • --delete hace que rsync elimine los archivos que existen en el destino pero no en la fuente.

Si desea excluir ciertas rutas, use comandos como --exclude /var. Los patrones de exclusión son relativos al directorio fuente (que en este caso es /, por lo que son efectivamente absolutos).

Alex J
fuente
Si se excluye / var, también puede excluir el que se almacenan crontabs, lo que probablemente DO necesitan ser revisados. Sin embargo, sí desea excluir cosas como / var / log y / var / cache
Sean Reifschneider
7

Es posible que desee investigar el indicador -c de rsync. De man rsync:

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

Dejaría un comentario a la respuesta de Alex Jurkiewicz, pero no tengo suficiente representante: '(todavía ...

Mike Mazur
fuente
1
Existen algunos escenarios en los que esta bandera es útil. Lo más común que he visto es cuando tienes datos almacenados en algún tipo de formato 'extraño' (generalmente binario) que tiene un tamaño constante. Si el archivo se actualiza mediante un proceso automatizado en ambos lados de la sincronización exactamente al mismo tiempo (digamos rotación de registro o similar), rsync puede perderlo cuando se sincroniza solo en tamaño / m-tiempo. Definitivamente posible, pero bastante raro.
Alex J
Hubiera esperado que solo sumara el contenido de los archivos, para que pudieras comparar sin prestar atención al mod-time y demás, pero parece que Alex tiene razón ... ¿hay una buena manera de ignorar todos los meta- datos y solo prestar atención al contenido, como lo hace git?
iconoclasta
4

Una herramienta útil que debe considerar es "rpm -Va". Esto imprimirá una lista de todos los archivos empaquetados que difieren de cuando fueron empaquetados. Esto ignora los archivos no empaquetados, pero es una muy buena manera de tener una idea de los archivos que se modificaron desde la instalación, que forman parte del sistema base. También incluyen un indicador que le indica si se consideran archivos de configuración.

Por ejemplo:

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

Entonces, ".bashrc" y "yum-updatesd.conf" son archivos de "configuración" que han cambiado en tamaño, tiempo y suma de comprobación MD5. "rdate" ha tenido su cambio de modo ...

La base de datos RPM es algo muy útil.

Sean Reifschneider
fuente