Como posso diferenciar dois servidores Redhat Linux?

15

Eu tenho dois servidores que devem ter a mesma configuração, exceto por diferenças conhecidas.

Correndo:

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

Posso encontrar uma lista de todos os arquivos em um servidor e compará-la com a lista de arquivos no outro servidor. Isso me mostrará as diferenças nos nomes dos arquivos que residem nos servidores.

O que eu realmente quero fazer é executar uma soma de verificação em todos os arquivos nos dois servidores e compará-los para descobrir também onde o conteúdo é diferente. por exemplo

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

Esta é uma maneira sensata de fazer isso? Eu estava pensando que o rysnc já tem a maior parte dessa funcionalidade, mas pode ser usado para fornecer a lista de diferenças?

Stuart Woodward
fonte
2
Da próxima vez que você deve usar em -print0vez de -printe em xargs -0vez de xargs. Você evitará problemas causados ​​por nomes de arquivos "ímpares".
Cristian Ciupitu 01/06/2009

Respostas:

22

Você está certo, o rsync é perfeito para isso. Use --itemize-changes(aka -i). Certifique-se de poder executar isso como root nos dois lados (ou em algum outro usuário com acesso total à máquina):

rsync -ani --delete / root@remotehost:/
  • -a é para arquivamento e basicamente faz com que o rsync faça uma duplicata exata (além de alguns casos envolvendo links)
  • -n é para funcionamento a seco e significa que nada será realmente alterado (este é IMPORTANTE! :))
  • -i é para alterações de itens e gera um formato simples de entender, uma vez que você obtém, mostrando todos os arquivos que precisam ser atualizados (a sintaxe é explicada totalmente na página de manual, com a ajuda detalhada desse gatilho).
  • --delete faz com que o rsync exclua os arquivos existentes no destino, mas não na fonte.

Se você deseja excluir certos caminhos, use comandos como --exclude /var. Os padrões de exclusão são relativos ao diretório de origem (que neste caso é /, portanto são efetivamente absolutos).

Alex J
fonte
Se você excluir / var, você também excluirá onde crontabs são armazenados, o que provavelmente FAZER necessidade de ser verificado. No entanto, você deseja excluir coisas como / var / log e / var / cache
Sean Reifschneider
7

Você pode investigar o sinalizador -c do rsync. De man rsync:

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

Gostaria de deixar um comentário para a resposta de Alex Jurkiewicz, mas não tenho representante suficiente: '(ainda ...

Mike Mazur
fonte
1
Existem alguns cenários em que esse sinalizador é útil. O mais comum que eu vi é quando você tem dados armazenados em algum tipo de formato 'estranho' (geralmente binário), que é um tamanho constante. Se o arquivo for atualizado por um processo automatizado nos dois lados da sincronização exatamente ao mesmo tempo (digamos rotação de log ou similar), o rsync poderá perdê-lo ao sincronizar apenas em tamanho / m-tempo. Definitivamente possível, mas bastante raro.
Alex J
Eu esperava que apenas verificasse a soma do conteúdo dos arquivos, para que você pudesse comparar sem prestar atenção ao tempo de modificação e assim por diante, mas parece que Alex está certo ... existe uma boa maneira de ignorar todas as meta- dados e apenas preste atenção ao conteúdo, da mesma maneira que o git?
Iconoclast
4

Uma ferramenta útil que você deve considerar é "rpm -Va". Isso imprimirá uma lista de todos os arquivos compactados que diferem de quando foram empacotados. Isso ignora qualquer arquivo não empacotado, mas é uma maneira muito boa de ter uma idéia dos arquivos que foram alterados desde a instalação, que fazem parte do sistema base. Eles também incluem um sinalizador que informa se eles são considerados arquivos de configuração.

Por exemplo:

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

Portanto, ".bashrc" e "yum-updatesd.conf" são arquivos de "configuração" que foram alterados em tamanho, hora e soma de verificação MD5. "rdate" teve sua mudança de modo ...

O banco de dados RPM é uma coisa muito útil.

Sean Reifschneider
fonte