ฉันจะแยกเซิร์ฟเวอร์ Redhat Linux สองตัวได้อย่างไร


15

ฉันมีเซิร์ฟเวอร์สองเครื่องที่ควรมีการตั้งค่าเดียวกันยกเว้นความแตกต่างที่ทราบ

โดยวิ่ง:

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

ฉันสามารถค้นหารายการไฟล์ทั้งหมดในเซิร์ฟเวอร์หนึ่งและเปรียบเทียบกับรายการไฟล์ในเซิร์ฟเวอร์อื่น นี่จะแสดงให้ฉันเห็นความแตกต่างในชื่อของไฟล์ที่อยู่บนเซิร์ฟเวอร์

สิ่งที่ฉันต้องการทำจริง ๆ ก็คือเรียกใช้ checksum ของไฟล์ทั้งหมดบนเซิร์ฟเวอร์ทั้งสองและเปรียบเทียบกับไฟล์เหล่านั้นเพื่อค้นหาว่าเนื้อหาต่างกันอย่างไร เช่น

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(aka -i) ตรวจสอบให้แน่ใจว่าคุณสามารถเรียกใช้สิ่งนี้ในฐานะรูททั้งสองด้าน (หรือผู้ใช้อื่นที่สามารถเข้าถึงเครื่องได้อย่างสมบูรณ์):

rsync -ani --delete / root@remotehost:/
  • -a สำหรับเก็บถาวรและทำให้ rsync สร้างสำเนาที่แน่นอน (นอกเหนือจากบางกรณีที่เกี่ยวข้องกับลิงก์)
  • -n สำหรับการวิ่งแบบแห้งและหมายความว่าไม่มีอะไรเปลี่ยนแปลงได้จริง (อันนี้สำคัญมาก! :))
  • -i มีไว้สำหรับการเปลี่ยนแปลงรายละเอียดและแสดงผลลัพธ์ในรูปแบบที่เข้าใจง่ายเมื่อคุณได้รับซึ่งแสดงไฟล์ทุกไฟล์ที่ต้องอัปเดต
  • --delete ทำให้ rsync ลบไฟล์ที่มีอยู่ในปลายทาง แต่ไม่ใช่ที่มา

--exclude /varหากคุณต้องการยกเว้นบางเส้นทางการใช้คำสั่งเช่น รูปแบบที่แยกออกนั้นสัมพันธ์กับไดเรกทอรีต้นทาง (ซึ่งในกรณีนี้คือ / ดังนั้นมันจึงเป็นสัมบูรณ์)


หากคุณยกเว้น / var คุณยังจะไม่รวมที่ crontabs จะถูกเก็บไว้ซึ่งอาจDOจำเป็นที่จะต้องมีการตรวจสอบ แต่คุณไม่ต้องการยกเว้นสิ่งที่ชอบ / var / log และ / var / แคช
ฌอน Reifschneider

7

คุณอาจต้องการตรวจสอบแฟล็ก -c ของ rsync จากman rsync:

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

ฉันจะแสดงความคิดเห็นกับคำตอบของ Alex Jurkiewicz แต่ฉันมีตัวแทนไม่เพียงพอ: '(แต่ ...


1
บางสถานการณ์มีอยู่ซึ่งธงนี้มีประโยชน์ สิ่งที่ฉันเห็นบ่อยที่สุดคือเมื่อคุณมีข้อมูลที่จัดเก็บในรูปแบบ 'แปลก' (ปกติคือไบนารี) ซึ่งมีขนาดคงที่ หากไฟล์นั้นได้รับการอัพเดตโดยกระบวนการอัตโนมัติทั้งสองด้านของการซิงค์ในเวลาเดียวกัน (พูดว่าการหมุนบันทึกหรือคล้ายกัน) rsync สามารถพลาดได้เมื่อทำการซิงค์กับขนาด / m-time เป็นไปได้แน่นอน แต่ค่อนข้างหายาก
Alex J

ฉันคาดหวังว่ามันจะเพียงแค่ตรวจสอบเนื้อหาของไฟล์เพื่อให้คุณสามารถเปรียบเทียบโดยไม่ใส่ใจกับ mod-time และอื่น ๆ แต่ปรากฏว่า Alex ถูกต้อง ... มีวิธีที่ดีที่จะไม่สนใจ meta- ทั้งหมด ข้อมูลและให้ความสนใจกับเนื้อหาวิธี git ไม่?
iconoclast

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 เป็นสิ่งที่มีประโยชน์มาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.