Rsync ที่จัดการการเคลื่อนไหวอย่างสมเหตุสมผล


10

ฉันใช้rsyncเพื่อซิงโครไนซ์โฮมไดเร็กตอรี่ระหว่างแล็ปท็อปและเน็ตบุ๊คของฉัน (ทั้งคู่ใช้ ext4 กับ Linux) ปัญหาเดียวของฉันคือว่าทุกครั้งที่ฉันต้องการจัดระเบียบไดเรกทอรีใหม่อย่างสมบูรณ์และrsyncมองว่านี่เป็นการลบและการสร้างไฟล์ใหม่ซึ่งทำให้ช้าและไม่มีประสิทธิภาพมาก

มีใครรู้บ้างเกี่ยวกับซอฟต์แวร์ที่ดีที่สามารถจัดการไฟล์ได้ดี?

ฉันพบว่าพร้อมเพรียงควรมีความสามารถในเรื่องนี้ แต่ดูเหมือนจะไม่ทำงานในทางปฏิบัติ ผมทดสอบพร้อมเพรียงกันโดยการอัพเดทสองไดเรกทอรีท้องถิ่นแต่ละที่มีไฟล์ขนาดใหญ่ในนั้นและก็ยังคงตรวจพบการเคลื่อนไหวของฉันเป็นการสร้างการลบ + และอยู่ในผลได้ช้ากว่าrsync

ยิ่งไปกว่านั้นถ้าฉันจำได้อย่างถูกต้องจากการดูซอร์สโค้ดของunisonสองสามเดือนที่ผ่านมามันพยายามทำบางสิ่งเช่นทำ sha sums - และฉันไม่ต้องการทางออกที่ดีที่สุดของฉันที่จะทำ sha sums - มันช้าเกินไป ไฟล์ไดเรกทอรี / ฉันต้องการบางสิ่งที่สังเกตเห็นสิ่งต่าง ๆ เช่น:

"แหล่งที่มาคู่สุดท้ายของไฟล์นี้ดูเหมือนว่าถูกลบไปแล้วและมีไฟล์ใหม่ที่อื่นในแผนผังไดเรกทอรีต้นทางที่มี mdate ขนาดและหมายเลข inode เหมือนกันดังนั้นฉันแค่คิดว่านี่เป็นการย้ายและ ย้ายเป้าหมายตามลำดับแทนที่จะทำการลบ + คัดลอก "

เป็นสิ่งสำคัญสำหรับฉันที่ฉันจะสามารถซิงค์เครื่องเหล่านี้ได้อย่างรวดเร็ว

ข้อเสนอแนะใด ๆ

คำตอบ:


6

คุณควรจะดูที่rdiff สำรองมันไม่rsyncอยู่ภายใต้ แต่มีปัญญาเพิ่มเติมที่คุณต้องการ (และมันทำให้สำรองที่เพิ่มขึ้นความสามารถในการกลิ้งกลับ แต่คุณสามารถกำหนดค่าปิดที่)

รุ่นล่าสุดเป็นรุ่นเก่า (2009) แต่นั่นเป็นสัญญาณของความมั่นคง


2
ใครลองดูบ้าง
หมอก

3

พร้อมเพรียงทำสิ่งที่คุณต้องการ แต่สำหรับการซิงโครไนซ์ระยะไกลเท่านั้น ลองใช้ssh://localhost/path/to/dirเป็นหนึ่งในราก

พร้อมเพรียงทำการตัดสินใจบนเนื้อหาของไฟล์โดยไม่ติดตามหมายเลขไอโหนด


1

คุณสามารถจัดการไฟล์ที่ถูกย้ายและเปลี่ยนชื่อด้วย rsync หากระบบไฟล์ในไดเรกทอรีต้นทางและปลายทางมีการรองรับฮาร์ดลิงก์ ความคิดคือการให้ rsync สร้างฮาร์ดลิงก์ขึ้นใหม่ก่อนที่จะถ่ายโอนจริง คุณสามารถหาคำอธิบายที่ดีได้ที่นี่

เราลงเอยด้วยวิธีแก้ปัญหาง่ายๆที่สร้างแผนผังที่ซ่อนอยู่ของฮาร์ดลิงก์ภายในไดเรกทอรีต้นทาง / ปลายทางสคริปต์พื้นฐานอาจเป็นดังนี้:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

ฉันมีสคริปต์ตัวอย่างบนGitHub แต่ฉันแนะนำให้คุณทำการทดสอบจำนวนมากก่อนที่จะใช้วิธีนี้ในการผลิต


0

หากคุณต้องการซิงโครไนซ์ไฟล์ระหว่างหลาย ๆ เครื่องคุณอาจต้องการใช้ระบบควบคุมแบบรวมศูนย์เช่น Subversion (หรือ FSVS ซึ่งใช้ SVN เป็นแบ็คเอนด์) ส่วนที่ดีคือทุกอย่างใน / home ของคุณ (ที่คุณเพิ่มในการควบคุมเวอร์ชัน) นั้นเป็นเวอร์ชันและสามารถซิงค์กับเครื่องอื่น ๆ หรือย้อนกลับได้อย่างง่ายดาย


0

lsyncd ยังจัดการไฟล์ที่ย้ายด้วยลักษณะการทำงาน rsync + ssh แม้ว่าจะค่อนข้างบั๊ก (ฉันได้รับการย้ายประมาณ 15% ที่จัดการเป็นการลบ / คัดลอก แต่ยังหาสาเหตุ) ส่วนใหญ่เวลาทำงาน

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