วิธีแก้ไขข้อผิดพลาดแพ็คเก็ตที่เสียหายสำหรับกับ rsync สำหรับ (ค่อนข้าง) ไฟล์ขนาดใหญ่?


10

กำลังพยายามอัพเดตไฟล์บนเซิร์ฟเวอร์ด้วยrsyncคำสั่ง:

rsync -ravq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

corrupt packet ข้อผิดพลาดยังคงมีอยู่โดยเฉพาะ:

rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]: Broken pipe (32)
rsync: connection unexpectedly closed (11337 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /home/lapo/package/rsync-3.0.9-1/src/rsync-3.0.9/io.c(605) [sender=3.0.9]

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

การใช้rsyncจากเทอร์มินัล Cygwin ใน Windows 7 กับเซิร์ฟเวอร์ Centos 6.3

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

ฉันจะแก้ปัญหานี้อย่างไร

ขอบคุณมาก ๆ!

คำตอบ:


12

ฉันไม่แน่ใจว่าสิ่งที่อาจทำให้เกิดcorrupt packetปัญหาที่ทำให้การเชื่อมต่อของคุณลดลง แต่คุณอาจพบว่า rsync --partialหรือ--partial-dirตัวเลือกมีประโยชน์เมื่อทำการถ่ายโอนไฟล์ขนาดใหญ่ดังนั้นเมื่อคุณเริ่มการถ่ายโอนอีกครั้งมันจะดำเนินต่อไป ไฟล์ทั้งหมดอีกครั้ง:

--partial-dir = .rsync บางส่วน

ดังนั้นคุณสามารถแก้ไขคำสั่งดั้งเดิมของคุณเช่นนี้:

rsync -rav --progress --partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

หรือ

rsync -rav --progress --partial-dir=.rsync-partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

โปรดทราบว่าสำหรับตัวอย่างนี้ฉันลบตัวเลือก-q( --quiet) และเพิ่ม--progressตัวเลือกในตัวอย่างแรกและ--partial-dir=.rsync-partialในตัวอย่างที่สอง

ความแตกต่างระหว่าง--partialและ--partial-dir=.rsync-partialคือในภายหลังสร้างไดเรกทอรีที่เก็บไฟล์บางส่วนแยกจากไฟล์ที่ถูกถ่ายโอนแบบเต็มหากสิ่งนั้นมีความสำคัญต่อคุณในด้านการรับ (เซิร์ฟเวอร์)

manpage rsyncจะอธิบายในรายละเอียดต่อไป แต่ฉันยังจะชี้ที่สำคัญทราบการรักษาความปลอดภัยจาก manpage นี้:

สำคัญ: - ผู้ใช้บางคนไม่สามารถเขียนทับได้ - ผู้ใช้รายอื่นหรือมีความเสี่ยงด้านความปลอดภัย เช่นหลีกเลี่ยง "/ tmp"


ฉันลองทั้งสองตัวเลือกและไม่แก้ไขปัญหา ขอบคุณสำหรับคำใบ้แม้ว่า
Juan Carlos Coto

1

ความเสียหายแนะนำไดรเวอร์ NIC หรือ NIC ที่ไม่ดีในเครื่องของคุณ มีครั้งนี้ในกล่อง Windows ของภรรยาของฉัน: ต้องพยายามติดตั้ง rsync ซ้ำ ๆ หลังจากนั้นสำเร็จฉันสามารถเรียก rsync ซ้ำ ๆ เพื่อถ่ายโอนและแก้ไขซอฟต์แวร์อื่นที่จำเป็นซึ่งรวมถึงไดรเวอร์ NIC ที่อัปเดตและเครื่องมือตรวจสอบที่สะดุดตาที่สุด


0

หากค่า ulimit เป็น 0 หรือจำนวนน้อยควรให้ข้อผิดพลาดนั้น ลองเพิ่มค่า ulimit (such as 9999999999)แล้วลองอีกครั้ง คุณสามารถเขียนเชลล์สคริปต์เล็กน้อย(a.sh)และใช้สิ่งนี้:

#!/bin/sh
ulimit 99999999999

rsync -avrz --perms --delete --chmod=u+rwx,g+rx,o+x /dir1/ /dir2/

2
นั่นดูน่าสนใจ. ฉันไม่ได้ทำสิ่งนี้มาระยะหนึ่งแล้ว อย่างไรก็ตามหากคุณต้องการอธิบายว่าทำไมการทำงานฉันคิดว่ามันจะมีประโยชน์จริง ๆ สำหรับผู้ที่อ่านคำถามนี้ ขอบคุณ!
Juan Carlos Coto

-1

วนซ้ำจนกว่ามันจะถ่ายโอนในที่สุด

while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ remoteuser@1.1.1.1:/dest/; do sleep 5;done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.