Wie kann ich zwei Redhat Linux Server unterscheiden?

15

Ich habe zwei Server, die das gleiche Setup haben sollten, mit Ausnahme der bekannten Unterschiede.

Durch Laufen:

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

Ich kann eine Liste aller Dateien auf einem Server finden und mit der Liste der Dateien auf dem anderen Server vergleichen. Dies zeigt mir die Unterschiede in den Namen der Dateien, die sich auf den Servern befinden.

Ich möchte wirklich eine Prüfsumme für alle Dateien auf beiden Servern erstellen und diese vergleichen, um festzustellen, wo sich die Inhalte unterscheiden. z.B

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

Ist das ein vernünftiger Weg, dies zu tun? Ich dachte, dass Rysnc bereits die meisten dieser Funktionen hat, aber kann es verwendet werden, um die Liste der Unterschiede bereitzustellen?

Stuart Woodward
quelle
2
Das nächste Mal sollten Sie -print0anstelle von -printund xargs -0anstelle von verwenden xargs. Sie vermeiden Probleme, die durch "ungerade" Dateinamen verursacht werden.
Cristian Ciupitu

Antworten:

22

Du hast recht, rsync ist perfekt dafür. Verwenden Sie --itemize-changes(aka -i). Stellen Sie sicher, dass Sie dies auf beiden Seiten als root ausführen können (oder auf einem anderen Benutzer mit vollem Zugriff auf den Computer):

rsync -ani --delete / root@remotehost:/
  • -a ist für das Archiv und bewirkt, dass rsync ein genaues Duplikat erstellt (abgesehen von einigen Fällen, in denen es um Links geht).
  • -n ist für Trockenlauf und bedeutet, dass nichts geändert wird (dies ist WICHTIG! :))
  • -i dient zum Ändern von Elementen und gibt ein einfach zu verstehendes Format aus, in dem jede zu aktualisierende Datei angezeigt wird (die Syntax wird in der Manpage unter der ausführlichen Hilfe für diesen Trigger ausführlich erläutert).
  • --delete Mit rsync werden Dateien gelöscht, die auf dem Ziel, aber nicht auf der Quelle vorhanden sind.

Wenn Sie bestimmte Pfade ausschließen möchten, verwenden Sie Befehle wie --exclude /var. Die Ausschlussmuster sind relativ zum Quellverzeichnis (das in diesem Fall / ist, also praktisch absolut).

Alex J
quelle
Wenn Sie / var ausschließen, werden Sie auch ausschließen , wo crontabs gespeichert werden, was wahrscheinlich DO Notwendigkeit überprüft werden. Sie möchten jedoch Dinge wie / var / log und / var / cache ausschließen
Sean Reifschneider
7

Möglicherweise möchten Sie das -c-Flag von rsync untersuchen. Von man rsync:

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

Ich würde einen Kommentar zu Alex Jurkiewiczs Antwort hinterlassen, aber ich habe nicht genug Repräsentanten: '(noch ...

Mike Mazur
quelle
1
Es gibt einige Szenarien, in denen dieses Flag nützlich ist. Ich habe am häufigsten gesehen, dass Daten in einem seltsamen (normalerweise binären) Format gespeichert sind, das eine konstante Größe hat. Wenn die Datei durch einen automatisierten Prozess auf beiden Seiten der Synchronisierung genau zur gleichen Zeit aktualisiert wird (z. B. bei der Protokollrotation oder ähnlichem), kann rsync sie verpassen, wenn die Synchronisierung nur auf Größe / M-Zeit erfolgt. Auf jeden Fall möglich, aber eher selten.
Alex J
Ich hätte erwartet, dass es nur die Prüfsumme des Inhalts der Dateien enthält, damit Sie vergleichen können, ohne auf die Mod-Zeit usw. zu achten, aber anscheinend hat Alex recht ... gibt es eine gute Möglichkeit, alle Meta- Daten und nur auf den Inhalt achten, wie Git tut?
Iconoclast
4

Ein nützliches Tool, das Sie in Betracht ziehen sollten, ist "rpm -Va". Dadurch wird eine Liste aller gepackten Dateien ausgedruckt , die sich von denen unterscheiden, als sie gepackt wurden. Hierbei werden nicht gepackte Dateien ignoriert, aber es ist eine sehr gute Möglichkeit, sich einen Überblick über Dateien zu verschaffen, die seit der Installation geändert wurden und Teil des Basissystems sind. Sie enthalten auch ein Flag, das angibt, ob sie als Konfigurationsdateien gelten.

Beispielsweise:

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

".Bashrc" und "yum-updatesd.conf" sind also "Konfigurationsdateien", deren Größe, Zeit und MD5-Prüfsumme geändert wurden. "rdate" hat den Modus gewechselt ...

Die RPM-Datenbank ist eine sehr nützliche Sache.

Sean Reifschneider
quelle