Как я могу различить два сервера Redhat Linux?

15

У меня есть два сервера, которые должны иметь одинаковую настройку, за исключением известных различий.

Запустив:

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

Я могу найти список всех файлов на одном сервере и сравнить его со списком файлов на другом сервере. Это покажет мне различия в именах файлов, которые находятся на серверах.

То, что я действительно хочу сделать, это запустить контрольную сумму для всех файлов на обоих серверах и сравнить их, чтобы также найти, где содержимое отличается. например

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

Это разумный способ сделать это? Я думал, что rysnc уже обладает большей частью этой функциональности, но можно ли ее использовать для предоставления списка отличий?

Стюарт Вудворд
источник
2
В следующий раз вы должны использовать -print0вместо -printи xargs -0вместо xargs. Вы избежите проблем, вызванных «нечетными» именами файлов.
Кристиан Чиупиту

Ответы:

22

Вы правы, rsync идеально подходит для этого. Используйте --itemize-changes(иначе -i). Убедитесь, что вы можете запускать это как root с обеих сторон (или другого пользователя с полным доступом к машине):

rsync -ani --delete / root@remotehost:/
  • -a предназначен для архива и в основном делает rsync точной копией (за исключением некоторых случаев, связанных со ссылками)
  • -n предназначен для пробного запуска и означает, что на самом деле ничего не изменится (это ВАЖНО! :))
  • -i предназначен для itemize-change и выводит простой для понимания формат, когда вам нужно получить его, показывая каждый файл, который необходимо обновить (синтаксис полностью объяснен на странице man в подробной справке по этому триггеру).
  • --delete заставляет rsync удалять файлы, которые существуют в месте назначения, но не в источнике.

Если вы хотите исключить определенные пути, используйте такие команды, как --exclude /var. Шаблоны исключения относятся к исходному каталогу (в данном случае это /, поэтому они фактически являются абсолютными).

Алекс Дж
источник
Если вы исключите / var, вы также исключите, где хранятся crontabs, которые, вероятно, ДОЛЖНЫ быть проверены. Однако вы хотите исключить такие вещи, как / var / log и / var / cache
Шон Рейфшнайдер,
7

Вы можете захотеть изучить флаг -c rsync. От man rsync:

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

Я бы оставил комментарий к ответу Алекса Юркевича, но мне не хватает представителя: '(пока ...

Майк Мазур
источник
1
Существуют некоторые сценарии, в которых этот флаг полезен. Чаще всего я видел, когда у вас есть данные, хранящиеся в каком-то «странном» (обычно двоичном) формате, который имеет постоянный размер. Если файл обновляется автоматическим процессом по обеим сторонам синхронизации в одно и то же время (скажем, ротация журнала или подобное), rsync может пропустить его при синхронизации только по размеру / м-времени. Определенно возможно, но довольно редко.
Алекс Дж
Я ожидал бы, что это будет просто контрольная сумма содержимого файлов, чтобы вы могли сравнивать, не обращая внимания на время мод и т. Д., Но кажется, что Алекс прав ... есть хороший способ игнорировать все метаданные данные и обращать внимание только на контент, как это делает git?
иконоборчество
4

Один полезный инструмент, который вы должны рассмотреть, это "rpm -Va". Это распечатает список всех упакованных файлов, которые отличаются от того, когда они были упакованы. Это игнорирует любые неупакованные файлы, но это очень хороший способ понять, какие файлы были изменены с момента установки и являются частью базовой системы. Они также включают флаг, который говорит вам, считаются ли они файлами конфигурации.

Например:

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" и "yum-updatesd.conf" являются файлами "конфигурации", которые изменились по размеру, времени и контрольной сумме MD5. "rdate" изменил режим ...

База данных RPM - очень полезная вещь.

Шон Рейфшнайдер
источник