Come posso diff due server Redhat Linux?


15

Ho due server che dovrebbero avere la stessa configurazione ad eccezione delle differenze note.

Eseguendo:

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

Posso trovare un elenco di tutti i file su un server e confrontarlo con l'elenco dei file sull'altro server. Questo mi mostrerà le differenze nei nomi dei file che risiedono sui server.

Quello che voglio davvero fare è eseguire un checksum su tutti i file su entrambi i server e confrontarli per scoprire anche dove i contenuti sono diversi. per esempio

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

È un modo sensato per farlo? Pensavo che rysnc abbia già la maggior parte di questa funzionalità, ma può essere usato per fornire l'elenco delle differenze?


2
La prossima volta dovresti usare -print0invece di -printe xargs -0invece di xargs. Eviterai qualsiasi problema causato da nomi di file "dispari".
Cristian Ciupitu,

Risposte:


22

Hai ragione, rsync è perfetto per questo. Usa --itemize-changes(aka -i). Assicurati di poterlo eseguire come root su entrambi i lati (o qualche altro utente con accesso completo alla macchina):

rsync -ani --delete / root@remotehost:/
  • -a è per l'archivio e fondamentalmente rende rsync un duplicato esatto (a parte alcuni casi che coinvolgono collegamenti)
  • -n è per il funzionamento a secco, e significa che nulla sarà effettivamente cambiato (questo è IMPORTANTE! :))
  • -i è per le modifiche agli elementi e genera un formato semplice da capire una volta che lo ottieni, mostrando tutti i file che devono essere aggiornati (la sintassi è spiegata completamente nella pagina man sotto la guida dettagliata per quel trigger).
  • --delete fa sì che rsync elimini i file esistenti sulla destinazione ma non sull'origine.

Se si desidera escludere determinati percorsi, utilizzare comandi simili --exclude /var. I pattern di esclusione sono relativi alla directory di origine (che in questo caso è /, quindi sono effettivamente assoluti).


Se si esclude / var, sarà anche escludere dove crontab sono memorizzati, che probabilmente DO bisogno di essere controllato. Tuttavia, si desidera escludere cose come / var / log e / var / cache
Sean Reifschneider,

7

Potresti voler esaminare il flag -c di rsync. Da man rsync:

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

Lascerei un commento alla risposta di Alex Jurkiewicz, ma non ho abbastanza rappresentante: '(ancora ...


1
Esistono alcuni scenari in cui questa bandiera è utile. Il più comune che ho visto è quando hai i dati memorizzati in una sorta di formato "strano" (di solito binario) che ha una dimensione costante. Se il file viene aggiornato da un processo automatizzato su entrambi i lati della sincronizzazione esattamente nello stesso momento (diciamo rotazione del registro o simili), rsync può perderlo quando si esegue la sincronizzazione solo su size / m-time. Sicuramente possibile, ma piuttosto raro.
Alex J,

Mi sarei aspettato che facesse solo il checksum del contenuto dei file, in modo da poter confrontare senza prestare attenzione al mod-time e così via, ma sembra che Alex abbia ragione ... c'è un buon modo per ignorare tutte le meta- dati e prestare attenzione solo al contenuto, come fa Git?
iconoclasta,

4

Uno strumento utile da considerare è "rpm -Va". Questo stamperà un elenco di tutti i file impacchettati che differiscono da quando sono stati impacchettati. Ciò ignora qualsiasi file non compresso, ma è un ottimo modo per farsi un'idea dei file che sono stati modificati dopo l'installazione, che fanno parte del sistema di base. Includono anche un flag che indica se sono considerati file di configurazione.

Per esempio:

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

Quindi ".bashrc" e "yum-updatesd.conf" sono file di "configurazione" che sono cambiati in dimensione, tempo e checksum MD5. "rdate" ha avuto il cambio di modalità ...

Il database RPM è molto utile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.