So können Sie feststellen, welche Dateien sich auf zwei Servern unterscheiden

312
Edik Mkoyan

Hier sehen wir, dass die MD5-Summen dieser beiden Verzeichnisse unterschiedlich sind. Wie können Sie feststellen, ob die Ordnerstrukturen oder bestimmte Dateien der Grund für diesen Unterschied sind?

[skynet] ~> ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \; | sort -k 34 | md5sum '   Ubuntu 14.04.4 LTS evn-web04.tumo.lab ssh-pty  f247a2e41cf54f14cefe83b8872ae862 -  [skynet] ~> ssh evn-web03 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \; | sort -k 34 | md5sum ' Ubuntu 14.04.4 LTS evn-web03.tumo.lab ssh-pty  53413a49fb754210666f4292e8b9ee14 - 
0

3 Antworten auf die Frage

1
a CVn

Generieren Sie die Liste der Dateien auf einem Server und prüfen Sie sie auf dem anderen. Wiederholen Sie den Vorgang in umgekehrter Reihenfolge mit den Servern und sortieren Sie die Listen.

Sammeln Sie zunächst eine Liste von Dateien und die entsprechenden Hashes auf evn-web04:

ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \;' 

Zweitens übergeben Sie dies an das gleiche Hash-Dienstprogramm auf evn-web03, übergeben Sie --checkund filtern Sie alle Elemente, die nicht identisch sind:

ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \;' | \ ssh evn-web03 "md5sum --check - | grep -vE ': OK$'" 

Dadurch erhalten Sie eine Liste der Dateien, die:

  • existiert auf evn-web04, aber nicht auf evn-web03 oder
  • existiert auf evn-web04 und unterscheidet sich zwischen evn-web04 und evn-web03

Um eine vollständige Liste der Unterschiede zu erhalten, müssen Sie auch die Serverreihenfolge umkehren (da evtl. Dateien auf evn-web03 vorhanden sind, die auf evn-web04 nicht vorhanden sind und die oben nicht abgefangen werden). Führen Sie einfach die gleichen Befehle erneut aus, setzen Sie jedoch die Schaltstellen der Servernamen.

Wie kann ich die Liste der Dateien in einem bestimmten Unterverzeichnis generieren? Ich meine, wie kann ich den vollständigen Baum erhalten und wahrscheinlich auch einige Dateien oder Ordner ausschließen. Edik Mkoyan vor 8 Jahren 0
@EdikMkoyan Passen Sie einfach die Parameter an `find` an, um sie an Ihre Bedürfnisse anzupassen. `md5sum --check` wird streng auf die Liste der Dateien schauen, aus denen es gespeist wird (weshalb Sie dies auch zweimal tun müssen, um sicherzustellen, dass beide Server vollständig synchronisiert sind). a CVn vor 8 Jahren 0
1
MariusMatutiae

Der folgende Einliner wird es tun:

diff <(find /path/to/dir -type f -exec su -c 'echo -n {}; md5sum {}' \;) \\ <(ssh me@remote find /path/to/dir -type f -exec su -c 'echo -n {}; md5sum {}' \;) 

Es wird oft unterschätzt, dass diese Art von Aufgaben dank Prozessersetzung mit einem einzigen Befehl ausgeführt werden kann.

Dies ist ein guter Vorschlag. Ich mache diese Art von Sachen ab und zu selbst; Ich weiß nicht, warum ich es nicht als mögliche Lösung für das OP-Problem aufgefasst habe. a CVn vor 8 Jahren 0
1
RedGrittyBrick

Mein erster Gedanke war zu benutzen

rsync ... --dry-run path user@remote:/path 

Aus der Manpage

-n, --dry-run perform a trial run with no changes made 

Rsync meldet alle Dateien, die sich unterscheiden

Ich muss aber auch prüfen, ob der Inhalt zweier Verzeichnisse gleich ist Edik Mkoyan vor 8 Jahren 0