CentOS 5.x
Mq pergunta parecia semelhante a este, mas eu não tinha certeza ...
Eu tenho dois servidores (completamente isolados um do outro), cada um com um diretório e subdiretórios que devem ter o mesmo conteúdo exato.
Por exemplo, o layout do diretório pode 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, eu gostaria de uma maneira de fazer uma verificação recursiva e ter algo para confirmar que tudo corresponde.
Também quero evitar o uso de ferramentas de terceiros.
Alguma ideia?
rsync
? Então ... uhm, usersync
(com-n
opção)?Respostas:
Uma boa maneira é usar o md5sums em todos os arquivos da árvore:
Execute isso no server1:
Execute isso no server2
Em seguida, basta comparar os dois arquivos (usando diff) ou o que quiser.
É isso que você procura?
Obviamente, você pode usar o SSH para apenas executar o comando remotamente, se desejar.
fonte
ssh user@servera 'find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum'
Se você não se importa necessariamente com o que mudou, apenas que algo mudou, o rsync ainda é realmente bom para isso. Tente executar este comando e dê uma olhada na saída, assumindo que isso seja executado em 'servera'.
A lista resultante será aqueles arquivos que teriam sido modificados se você realmente executasse o processo de sincronização. Lembre-se de que os arquivos aparecerão na lista mesmo que apenas o carimbo de data e hora tenha sido alterado, mas o conteúdo permaneça o mesmo. Como adicionamos o
-n
sinalizador, nenhuma ação será executada, apenas relatada.fonte
rsync
. Para estar completamente correto, no entanto, você precisa executar o procedimentorsync
nas duas direções. Ou seja, você precisa adicionar isso:rsync -avcn serverb:/opt/foo/ /opt/foo
Embora você possa hackear um script rápido que calcule hashes MD5 individuais para arquivos individuais em um diretório, a melhor maneira de fazer isso seria usar uma ferramenta chamada
md5deep
que calculará recursivamente os hashes de todos os arquivos em um diretório e depois produzirá para um arquivo. Em seguida, ele pode ser usado em outro diretório, usando o primeiro arquivo hash como entrada e fornecendo uma lista de arquivos diferentes entre os dois diretórios.Então, tomando o seu exemplo, você seguiria este processo:
Calcular hashes do diretório necessário no servidor A:
md5deep -r /opt/foo/ > file_hashes.txt
Copie o arquivo
file_hashes.txt
no servidor B para comparação.Calcule os hashes do diretório necessário no Servidor B, mas pegue os hashes de arquivo do Servidor A como um arquivo de entrada usando o
-x
sinalizador para mostrar apenas arquivos diferentes:md5deep -x file_hashes.txt -r /opt/foo/
O conjunto de ferramentas md5deep faz parte do sistema de gerenciamento de pacotes da maioria das distribuições, e o melhor é que ele suporta vários algoritmos de hash diferentes, não apenas o MD5. Portanto, se você é paranóico em relação a colisões, tem várias alternativas disponíveis. As ferramentas a seguir fazem parte do md5deep, cada uma fornecendo um algoritmo de hash alternativo:
fonte
Eu usei uma técnica semelhante ao @ scott-pack. Isso mostrará as diferenças bidirecionais. Tudo o que começa com "exclusão" é um arquivo que está no servidor remoto, mas não no servidor local. Todo diretório listado sem nenhum conteúdo de arquivo é aquele que não possui alterações. Todo arquivo listado é um arquivo que não existe no servidor remoto ou a versão local é "mais recente".
fonte