Jak mogę różnicować dwa serwery Linux Redhat?

15

Mam dwa serwery, które powinny mieć taką samą konfigurację, z wyjątkiem znanych różnic.

Biegiem:

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

Mogę znaleźć listę wszystkich plików na jednym serwerze i porównać ją z listą plików na drugim serwerze. To pokaże mi różnice w nazwach plików znajdujących się na serwerach.

Naprawdę chcę zrobić sumę kontrolną na wszystkich plikach na obu serwerach i porównać je, aby sprawdzić, gdzie zawartość jest inna. na przykład

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

Czy to rozsądny sposób, aby to zrobić? Myślałem, że rysnc ma już większość tej funkcjonalności, ale czy można go użyć do przedstawienia listy różnic?

Stuart Woodward
źródło
2
Następnym razem powinieneś użyć -print0zamiast -printi xargs -0zamiast xargs. Unikniesz problemów spowodowanych przez „nieparzyste” nazwy plików.
Cristian Ciupitu

Odpowiedzi:

22

Masz rację, rsync jest do tego idealny. Użyj --itemize-changes(aka -i). Upewnij się, że możesz uruchomić to jako root po obu stronach (lub jakiś inny użytkownik z pełnym dostępem do komputera):

rsync -ani --delete / root@remotehost:/
  • -a służy do archiwizacji i zasadniczo powoduje, że rsync tworzy dokładną kopię (oprócz niektórych przypadków z linkami)
  • -n jest na sucho i oznacza, że ​​nic się nie zmieni (ten jest WAŻNY! :))
  • -i służy do zmiany pozycji i generuje prosty, zrozumiały format, w którym można go znaleźć, pokazując każdy plik, który wymaga aktualizacji (składnia jest wyjaśniona w pełni na stronie podręcznika pod szczegółową pomocą dla tego wyzwalacza).
  • --delete sprawia, że ​​rsync usuwa pliki istniejące w miejscu docelowym, ale nie w źródle.

Jeśli chcesz wykluczyć określone ścieżki, użyj poleceń takich jak --exclude /var. Wzorce wykluczania są względne w stosunku do katalogu źródłowego (którym w tym przypadku jest /, więc są w rzeczywistości absolutne).

Alex J.
źródło
Jeśli wykluczyć / var, można również wykluczyć, gdzie są zapisane tabele, które prawdopodobnie DO muszą być sprawdzone. Jednak chcesz wykluczyć takie rzeczy jak / var / log i / var / cache
Sean Reifschneider,
7

Możesz sprawdzić flagę rsync -c. Od man rsync:

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

Zostawiłbym komentarz do odpowiedzi Alexa Jurkiewicza, ale nie mam wystarczającej liczby przedstawicieli: „(jeszcze ...

Mike Mazur
źródło
1
Istnieją pewne scenariusze, w których ta flaga jest przydatna. Najczęstsze, jakie widziałem, to dane przechowywane w jakimś „dziwnym” (zwykle binarnym) formacie, który ma stały rozmiar. Jeśli plik jest aktualizowany przez zautomatyzowany proces po obu stronach synchronizacji dokładnie w tym samym czasie (powiedzmy obrót dziennika lub podobny), rsync może go pominąć podczas synchronizacji tylko w rozmiarze / m-czasie. Zdecydowanie możliwe, ale raczej rzadkie.
Alex J
Spodziewałbym się, że po prostu zsumuje zawartość plików, abyś mógł porównać bez zwracania uwagi na mod-time itd. Wygląda jednak na to, że Alex ma rację ... czy istnieje dobry sposób na zignorowanie wszystkich meta danych i zwracaj uwagę tylko na treść, tak jak robi to git?
iconoclast
4

Jednym z przydatnych narzędzi, które należy wziąć pod uwagę, jest „rpm -Va”. Spowoduje to wydrukowanie listy wszystkich spakowanych plików, które różnią się od tego, kiedy zostały spakowane. Ignoruje to wszelkie nie spakowane pliki, ale jest to bardzo dobry sposób, aby uzyskać wyobrażenie o plikach, które zostały zmienione od czasu instalacji, które są częścią systemu podstawowego. Zawierają także flagę informującą, czy są uważane za pliki konfiguracyjne.

Na przykład:

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

Tak więc „.bashrc” i „yum-updatesd.conf” to pliki „konfiguracyjne”, które zmieniły się pod względem wielkości, czasu i sumy kontrolnej MD5. „rdate” zmienił tryb ...

Baza danych RPM jest bardzo przydatną rzeczą.

Sean Reifschneider
źródło