ซิงค์สองทิศทางด้วย rsync


11

ฉันพยายามตั้งค่าสองทิศทางหรือซิงค์สองทางด้วย rsync ในกรณีของฉันฉันจะต้องลบไฟล์เมื่อทำการซิงค์จาก B ถึง A เท่านั้นดังนั้นฉันจึงคิดที่จะใช้ rsync สองครั้งดังนี้:

rsync -rtuv ./A/ ./B/
rsync -rtuv --delete ./B/ ./A/

ปัญหานี้ด้วยวิธีแก้ไขปัญหานี้คือเมื่อฉันรัน rsync (B-> A) ซึ่งจะเกิดขึ้นทันทีหลังจากเรียกใช้ rsync (AB) ไฟล์ใหม่ใด ๆ ที่สร้างขึ้นระหว่างการซิงค์จะถูกลบด้วย

มีวิธีที่ฉันสามารถระบุการประทับเวลาเป็นเงื่อนไขว่าจะลบไฟล์เฉพาะถ้ามันสร้างขึ้นก่อนวันที่ / เวลานี้

Updated:

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


มีคำถามที่คล้ายกันมากกับคำตอบบางอย่างมากขึ้นคือที่นี่: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
โทมัส

คำตอบ:


4

คุณสามารถลอง osync ซึ่งออกแบบมาสำหรับงานนี้อย่างแน่นอน ฉันเคยตั้งค่าลำดับที่ซับซ้อนของคำสั่ง rsync เพื่อทำงาน แต่ตอนนี้ฉันใช้ osync

https://github.com/deajan/osync

มันใช้ rsync ภายในดังนั้นมันควรจะเหมาะสำหรับสถานการณ์ใด ๆ ที่คุณสามารถใช้ rsync


1
ขอบคุณมาร์ค ฉันเพิ่งจะตอบคำถามของฉันเอง ฉันพบสคริปต์ที่คล้ายกันมากที่เรียกว่า bsync ( github.com/dooblem/bsync ) โดยทั่วไปจะใช้ diff เพื่อหาว่าต้องซิงค์อะไร เนื่องจากฉันไม่ได้คาดหวังความขัดแย้งใด ๆ ในการซิงค์ฉันจึงปรับเปลี่ยนสคริปต์นี้เพียงเล็กน้อยเพื่อให้ทำงานได้เงียบ ๆ เมื่อทำงานกับ cron
Raza

7

rsyncเป็นเครื่องมือที่ไม่ถูกต้องสำหรับงานนี้เนื่องจากเหตุผลที่คุณพบ ให้พิจารณาใช้unison:

unison A/ B/

ครั้งแรกที่คุณทำงานนี้มันจะระบุไฟล์ที่ไม่ซ้ำกันในและผู้ที่ไม่ซ้ำกันในA Bนอกจากนี้ยังจะตั้งค่าสถานะผู้ที่อยู่ในทั้งสองแห่งและขอให้คุณระบุว่าจะเขียนทับใด

ครั้งต่อไปที่คุณเรียกใช้งานจะเป็นการคัดลอกการเปลี่ยนแปลงจากAไปBยังและBไปยังการAตั้งค่าสถานะไฟล์ใด ๆ ที่มีการเปลี่ยนแปลงทั้งสองแห่งสำหรับการแก้ปัญหาด้วยตนเอง

mkdir A B
date > A/date
who > B/who
unison A/ B/
# Lots of output from unison, showing synchronisation

ls A
date    who
ls B
date    who

date > A/date
unison A/ B/
# Lots of output from unison, showing synchronisation

มีการตั้งค่าสถานะที่มีประโยชน์จำนวนมากunisonซึ่งช่วยให้กระบวนการดำเนินการโดยอัตโนมัติด้วยการกำหนดสมมติฐานและลดจำนวนคำถามที่คุณถามระหว่างการซิงโครไนซ์


3
ฉันเห็นวิธีการแก้ปัญหาพร้อมเพรียง แต่ปัญหาที่ฉันต้องติดตั้งที่ปลายทั้งสอง ฉันกำลังซิงค์กับรีโมตและไม่สามารถติดตั้งพร้อมเพรียงบนรีโมตปลายทาง
Raza

1
มันไม่ได้ช่วย OP แต่ผมกำลังมองหาพร้อมเพรียง ฉันเห็นว่ามีแพ็คเกจ Debianและรองรับการขนส่ง SSH
Ted

1
มีความเป็นไปได้ที่จะใช้พร้อมเพรียงโดยไม่ต้องติดตั้งลงบนเซิร์ฟเวอร์ดูความคิดเห็นในคำตอบนี้stackoverflow.com/a/2936711ซึ่งชี้ไปที่i3vi3v.wordpress.com/2013/01/09/9
Thomas

-1

สิ่งที่คุณต้องการจริงๆคือRclone Rclone เป็น rsync สำหรับที่เก็บข้อมูลบนคลาวด์ (กล่อง, ดรอปบ็อกซ์, ถัดไป, ftp ฯลฯ ) และที่เก็บข้อมูลในตัวเครื่อง


2
พวกเขาจะติดตั้งและใช้ rclone เพื่อแก้ปัญหาอย่างไร
Jeff Schaller

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