CentOS 5.x
Mq pertanyaannya mirip dengan yang ini tapi saya tidak yakin ...
Saya memiliki dua server (sepenuhnya terisolasi satu sama lain), masing-masing dengan direktori dan sub-direktori yang harus memiliki konten yang persis sama.
Misalnya tata letak direktori bisa seperti:
SERVER A -
/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt
SERVER B -
/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt
Idealnya saya ingin cara melakukan pemeriksaan rekursif dan memiliki sesuatu yang mengkonfirmasi bahwa semuanya cocok.
Saya juga ingin menghindari menggunakan alat pihak ketiga.
Ada ide?
rsync
? Jadi ... uhm, gunakanrsync
(dengan-n
opsi)?Jawaban:
Salah satu cara yang baik adalah dengan menggunakan md5sums pada setiap file di pohon:
Jalankan ini di server1:
Jalankan ini di server2
Kemudian bandingkan saja dua file (menggunakan diff) atau apa pun yang Anda suka.
Apakah itu sejalan dengan apa yang Anda cari?
Tentu saja, Anda dapat menggunakan SSH untuk hanya menjalankan perintah dari jarak jauh jika Anda mau.
sumber
ssh user@servera 'find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum'
Jika Anda tidak perlu peduli dengan apa yang berubah, hanya saja ada sesuatu yang berubah, rsync masih sangat bagus untuk itu. Coba jalankan perintah ini dan lihatlah hasilnya, dengan anggapan ini dijalankan dari 'servera'.
Daftar yang dihasilkan adalah file-file yang akan dimodifikasi jika Anda benar-benar menjalankan proses sinkronisasi. Ingatlah bahwa file akan muncul dalam daftar walaupun hanya timestamp yang diubah, tetapi isinya tetap sama. Karena kami menambahkan
-n
benderanya, maka tidak ada tindakan yang akan dilakukan, hanya dilaporkan.sumber
rsync
. Agar sepenuhnya benar, Anda harus menjalankanrsync
kedua arah. Artinya, Anda perlu menambahkan ini:rsync -avcn serverb:/opt/foo/ /opt/foo
Meskipun Anda dapat meretas bersama skrip cepat yang akan menghitung hash MD5 individual untuk file individual dalam direktori, cara yang lebih baik untuk melakukannya adalah dengan menggunakan alat yang disebut
md5deep
yang akan secara rekursif menghitung hash dari semua file dalam direktori, dan kemudian menghasilkan mereka ke file. Kemudian dapat digunakan pada direktori lain, mengambil file hash pertama sebagai input, dan memberi Anda daftar file yang berbeda antara dua direktori.Jadi, dengan mengambil contoh Anda, Anda akan mengikuti proses ini:
Hitung hash dari direktori yang diperlukan pada Server A:
md5deep -r /opt/foo/ > file_hashes.txt
Salin file
file_hashes.txt
file ke Server B untuk perbandingan.Hitung hash dari direktori yang diperlukan pada Server B, tetapi mengambil hash file dari Server A sebagai file input dengan menggunakan
-x
flag untuk hanya menampilkan file yang berbeda:md5deep -x file_hashes.txt -r /opt/foo/
Set alat md5deep merupakan bagian dari sistem manajemen paket di sebagian besar distro, dan yang hebat adalah ia mendukung sejumlah algoritma hashing yang berbeda, bukan hanya MD5. Jadi, jika Anda paranoid tentang tabrakan, Anda memiliki sejumlah alternatif yang tersedia. Alat-alat berikut merupakan bagian dari md5deep, masing-masing menyediakan algoritma hashing alternatif:
sumber
Saya menggunakan teknik yang mirip dengan @ scott-pack. Ini akan memberi Anda perbedaan dua arah. Segala sesuatu yang dimulai dengan "menghapus" adalah file yang ada di server jarak jauh tetapi bukan server lokal. Setiap direktori yang terdaftar tanpa konten file apa pun adalah salah satu yang tidak memiliki perubahan. Setiap file yang terdaftar adalah file yang tidak ada di server jauh, atau versi lokal "lebih baru".
sumber