Bagaimana saya membedakan dua server Redhat Linux?

15

Saya memiliki dua server yang harus memiliki setup yang sama kecuali perbedaan yang diketahui.

Dengan menjalankan:

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

Saya dapat menemukan daftar semua file di satu server dan membandingkannya dengan daftar file di server lain. Ini akan menunjukkan kepada saya perbedaan dalam nama-nama file yang berada di server.

Yang benar-benar ingin saya lakukan adalah menjalankan checksum pada semua file di kedua server dan membandingkannya juga untuk menemukan di mana isinya berbeda. misalnya

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

Apakah ini cara yang masuk akal untuk melakukan ini? Saya berpikir bahwa rysnc sudah memiliki sebagian besar fungsi ini tetapi dapatkah itu digunakan untuk memberikan daftar perbedaan?

Stuart Woodward
sumber
2
Lain kali Anda harus menggunakan -print0sebagai ganti -printdan xargs -0bukan xargs. Anda akan menghindari masalah yang disebabkan oleh nama file "aneh".
Cristian Ciupitu

Jawaban:

22

Anda benar, rsync sangat cocok untuk ini. Gunakan --itemize-changes(alias -i). Pastikan Anda dapat menjalankan ini sebagai root di kedua sisi (atau pengguna lain dengan akses penuh ke mesin):

rsync -ani --delete / root@remotehost:/
  • -a adalah untuk arsip, dan pada dasarnya membuat rsync membuat duplikat yang tepat (terlepas dari beberapa kasus yang melibatkan tautan)
  • -n untuk dry-run, dan berarti tidak ada yang benar-benar akan berubah (Yang ini PENTING! :))
  • -i adalah untuk itemize-changes, dan menampilkan format sederhana-untuk-dipahami-sekali-Anda-dapatkan-memperlihatkan setiap file yang perlu diperbarui (sintaksinya dijelaskan sepenuhnya di halaman manual di bawah bantuan rinci untuk pemicu itu).
  • --delete membuat rsync menghapus file yang ada di tujuan tetapi bukan sumbernya.

Jika Anda ingin mengecualikan jalur tertentu, gunakan perintah like --exclude /var. Pola kecualikan relatif terhadap direktori sumber (yang dalam hal ini adalah /, sehingga benar-benar absolut).

Alex J
sumber
Jika Anda mengecualikan / var, Anda juga akan mengecualikan di mana crontab disimpan, yang mungkin DO perlu diperiksa. Namun, Anda ingin mengecualikan hal-hal seperti / var / log dan / var / cache
Sean Reifschneider
7

Anda mungkin ingin menyelidiki flag -s rsync. Dari man rsync:

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

Saya akan meninggalkan komentar untuk jawaban Alex Jurkiewicz, tapi saya tidak punya cukup perwakilan: '(belum ...

Mike Mazur
sumber
1
Ada beberapa skenario di mana bendera ini berguna. Yang paling umum yang saya lihat adalah ketika Anda memiliki data yang disimpan dalam semacam format 'aneh' (biasanya biner) yang merupakan ukuran konstan. Jika file diperbarui oleh proses otomatis di kedua sisi sinkronisasi pada waktu yang sama (katakanlah rotasi log atau sejenisnya) rsync dapat melewatkannya saat menyinkronkan hanya pada ukuran / m-waktu. Pasti mungkin, tapi agak jarang.
Alex J
Saya akan berharap untuk hanya memeriksa konten file, sehingga Anda dapat membandingkan tanpa memperhatikan mod-waktu dan sebagainya, tetapi tampaknya Alex benar ... apakah ada cara yang baik untuk mengabaikan semua meta data dan hanya memperhatikan konten, cara git lakukan?
iconoclast
4

Salah satu alat yang berguna yang harus Anda pertimbangkan adalah "rpm -Va". Ini akan mencetak daftar semua file paket yang berbeda dari saat mereka dikemas. Ini mengabaikan semua file yang tidak dikemas, tetapi ini adalah cara yang sangat baik untuk mendapatkan gambaran tentang file yang telah diubah sejak instalasi, yang merupakan bagian dari sistem dasar. Mereka juga menyertakan flag yang memberi tahu Anda jika mereka dianggap file konfigurasi.

Sebagai contoh:

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

Jadi ".bashrc" dan "yum-updatesd.conf" adalah "konfigurasi" file yang telah berubah dalam ukuran, waktu, dan MD5 checksum. "rdate" telah memiliki perubahan mode ...

Basis data RPM adalah hal yang sangat berguna.

Sean Reifschneider
sumber