(अपेक्षाकृत) बड़ी फ़ाइलों के लिए 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टाइमआउट से संबंधित है , क्योंकि यह बड़ी (r) फ़ाइलों के साथ होता है। इसके अलावा, मैं WinSCP का उपयोग करके टाइमआउट प्राप्त करता रहता हूं। यह केवल मेरे लिए हो रहा है; जिन लोगों के साथ मैं काम करता हूं उनमें से कई इस सर्वर का उपयोग नहीं करते हैं।

rsyncसेंटोस 6.3 सर्वर के खिलाफ विंडोज 7 में एक सिगविन टर्मिनल का उपयोग करना ।

मुझे यकीन नहीं है कि अन्य जानकारी क्या उपयोगी हो सकती है या इसे कैसे प्राप्त किया जा सकता है। मैं किसी भी सुझाव के अनुसार प्रश्न को अपडेट करूंगा या टिप्पणियां जोड़ूंगा।

मुझे इसे कैसे हल करना चाहिए?

बहुत बहुत धन्यवाद!

जवाबों:


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बाद में एक निर्देशिका है कि रहता आंशिक फ़ाइलें पूरी तरह से स्थानांतरित फ़ाइलें से अलग है कि अगर प्राप्त (सर्वर) की ओर आपके लिए महत्वपूर्ण है बनाता है।

Rsync मैनपेज अन्य विवरणों में इस व्याख्या करेगा, हालांकि मैं भी एक महत्वपूर्ण आपको बताएंगे सुरक्षा टिप्पणी मैनपेज से:

महत्वपूर्ण: --पारंपरिक dir अन्य उपयोगकर्ताओं द्वारा लिखने योग्य नहीं होना चाहिए या यह एक सुरक्षा जोखिम है। जैसे AVOID "/ tmp"।


मैंने दोनों विकल्पों की कोशिश की, और न ही समस्या को ठीक किया। संकेत के लिए धन्यवाद, यद्यपि।
जुआन कार्लोस कोटो

1

भ्रष्टाचार आपकी मशीन में एक खराब एनआईसी या एनआईसी चालक का सुझाव देता है; मेरी पत्नी के विंडोज बॉक्स पर एक बार ऐसा था: rsync स्थापित करने के लिए बार-बार प्रयास करना पड़ा। एक बार जो सफल हो गया, मैं बार-बार rsync को आवश्यक अन्य सॉफ़्टवेयर को स्थानांतरित करने और ठीक करने के लिए आमंत्रित कर सकता था, जिसमें सबसे विशेष रूप से अपडेट किए गए एनआईसी ड्राइवर और एक चेकसम टूल शामिल थे।


0

यदि ulimit मान 0 या थोड़ी संख्या है, तो यह त्रुटि देनी चाहिए। Ulimit value बढ़ाने (such as 9999999999)का प्रयास करें और पुनः प्रयास करें। आप थोड़ी सी शेल स्क्रिप्ट लिख सकते हैं (a.sh)और कुछ इस तरह से उपयोग कर सकते हैं :

#!/bin/sh
ulimit 99999999999

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

2
यह तो दिलचस्प है। मैं थोड़ी देर के लिए इस पर काम नहीं कर रहा था; हालाँकि, अगर आप यह बताना चाहते हैं कि यह क्यों काम करता है, तो मुझे लगता है कि यह वास्तव में इस प्रश्न को पढ़ने वाले के लिए उपयोगी होगा। धन्यवाद!
जुआन कार्लोस कोटो

-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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.