CentOS 5.x
La pregunta de Mq parecía similar a esta, pero no estaba segura ...
Tengo dos servidores (completamente aislados entre sí), cada uno con un directorio y subdirectorios que deben tener el mismo contenido exacto.
Por ejemplo, el diseño del directorio podría ser algo como:
SERVIDOR 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
SERVIDOR 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
Idealmente, me gustaría una forma de hacer una verificación recursiva y hacer que algo confirme que todo coincide.
También quiero evitar el uso de herramientas de terceros.
¿Algunas ideas?
rsync
? Entonces ... uhm, ¿usarrsync
(con-n
opción)?Respuestas:
Una buena manera es usar md5sums en cada archivo del árbol:
Ejecute esto en el servidor1:
Ejecute esto en el servidor2
Luego solo compara los dos archivos (usando diff) o lo que quieras.
¿Es eso lo que estás buscando?
Por supuesto, puede usar SSH para ejecutar el comando de forma remota si lo desea.
fuente
ssh user@servera 'find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum'
Si no necesariamente te importa lo que cambió, solo que algo ha cambiado, rsync sigue siendo realmente bueno para eso. Intente ejecutar este comando y eche un vistazo a la salida, suponiendo que esto se ejecute desde 'servera'.
La lista resultante será aquellos archivos que se habrían modificado si realmente hubiera ejecutado el proceso de sincronización. Teniendo en cuenta que los archivos aparecerán en la lista incluso si solo se modificó la marca de tiempo, pero el contenido se mantuvo igual. Como agregamos el
-n
indicador, no se realizarán acciones, solo se informarán.fuente
rsync
. Para ser completamente correcto, sin embargo, debe ejecutar elrsync
en ambas direcciones. Es decir, debe agregar esto:rsync -avcn serverb:/opt/foo/ /opt/foo
Si bien podría hackear un script rápido que calculará hashes MD5 individuales para archivos individuales en un directorio, la mejor manera de hacerlo sería usar una herramienta llamada
md5deep
que calculará recursivamente los hashes de todos los archivos en un directorio y luego generará ellos a un archivo. Luego se puede usar en otro directorio, tomando el primer archivo hash como entrada y proporcionándole una lista de archivos que son diferentes entre los dos directorios.Entonces, tomando su ejemplo, seguiría este proceso:
Calcule los hashes del directorio requerido en el Servidor A:
md5deep -r /opt/foo/ > file_hashes.txt
Copie el archivo
file_hashes.txt
en el Servidor B para comparar.Calcule los hashes del directorio requerido en el Servidor B, pero tome los hashes del archivo del Servidor A como un archivo de entrada utilizando el
-x
indicador para mostrar solo los archivos que son diferentes:md5deep -x file_hashes.txt -r /opt/foo/
El conjunto de herramientas md5deep forma parte del sistema de gestión de paquetes de la mayoría de las distribuciones, y lo mejor es que admite varios algoritmos de hashing diferentes, no solo MD5. Entonces, si eres paranoico sobre las colisiones, tienes varias alternativas disponibles. Las siguientes herramientas forman parte de md5deep, y cada una proporciona un algoritmo de hash alternativo:
fuente
Utilicé una técnica similar a @ scott-pack. Esto le dará una diferencia bidireccional. Todo lo que comienza con "eliminar" es un archivo que está en el servidor remoto pero no en el servidor local. Cada directorio listado sin ningún contenido de archivo es uno que no tiene cambios. Cada archivo que aparece en la lista es un archivo que no existe en el servidor remoto o que la versión local es "más nueva".
fuente