Як я можу відрізняти два сервери 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. Ви уникнете будь-яких проблем, викликаних "непарними" іменами файлів.
Cristian Ciupitu

Відповіді:


22

Ви маєте рацію, rsync ідеально підходить для цього. Використовувати --itemize-changes(ака -і). Переконайтеся, що ви можете запустити це як корінь з обох сторін (або якийсь інший користувач із повним доступом до машини):

rsync -ani --delete / root@remotehost:/
  • -a призначений для архіву, і в основному змушує rsync робити точний дублікат (крім деяких випадків, що стосуються посилань)
  • -n призначений для роботи в режимі "біг", і означає, що насправді нічого не буде змінено (ця важлива! :)
  • -i призначений для зміни розмірів, і виводить простий для розуміння один раз ви отримуєте його формат, який показує кожен файл, який потрібно оновити (синтаксис повністю пояснюється на сторінці людини під детальною довідкою для цього тригера).
  • --delete змушує rsync видаляти файли, які існують у пункті призначення, але не у джерелі.

Якщо ви хочете виключити певні шляхи, використовуйте такі команди, як --exclude /var. Шаблони виключення відносяться до вихідного каталогу (який у даному випадку є /, тому вони фактично абсолютні).


Якщо виключити / вар, ви також виключіть де crontabs зберігаються, що , ймовірно , DO повинні бути перевірені. Однак ви хочете виключити такі речі, як / var / log та / var / cache
Sean Reifschneider

7

Ви можете розглянути прапор rsync -c. Від man rsync:

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

Я залишив би коментар до відповіді Алекса Юркевича, але мені не вистачає відповіді: '(поки що ...


1
Існують деякі сценарії, де цей прапор корисний. Найчастіше я бачив, коли у вас є дані, які зберігаються у якомусь "дивному" (зазвичай двійковому) форматі, який має постійний розмір. Якщо файл оновлюється автоматизованим процесом з обох сторін синхронізації точно в один і той же час (скажімо, обертання журналу або подібне), rsync може пропустити його під час синхронізації просто за розміром / м-час. Однозначно можливо, але досить рідко.
Alex J

Я б очікував, що він просто перевірить вміст файлів, щоб можна було порівнювати, не звертаючи уваги на мод-час тощо, але, схоже, Алекс правий ... чи є хороший спосіб ігнорувати всі мета- дані та зверніть увагу лише на вміст, як це робить 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. "оновити" було зміни режиму ...

База даних RPM - дуже корисна річ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.