rsync डिस्कनेक्ट करता रहता है: टूटा हुआ पाइप


14

मैं rsyncअपने घर निर्देशिका का बैकअप ले रहा हूं । यह लंबे समय से ठीक काम कर रहा है। यहाँ कमांड का उपयोग कर रहा हूँ:

rsync \
    -pavz \
    --delete \
    --exclude 'mnt/' \
    --exclude '.cache/' \
    --exclude 'Videos/' \
    --exclude 'Music/' \
    --exclude 'Documents/virtualbox' \
    /home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"

हालाँकि, मैंने उस सर्वर को स्विच कर दिया था जिसका मैं बैकअप ले रहा हूं और अब rsyncशुरू होता है और कुछ सेकंड (कुछ मिनट तक) चलता है, लेकिन फिर त्रुटि संदेश के साथ बंद हो जाता है

packet_write_wait: Connection to x.x.x.x: Broken pipe
rsync: [sender] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [sender=3.1.1]

चूंकि यह अन्य सर्वरों पर काम कर रहा है, मुझे संदेह है कि समस्या या तो कनेक्शन या स्वयं सर्वर है। कनेक्शन स्थिर प्रतीत होता है। मैं केबल के माध्यम से जुड़ा हुआ हूं और मुझे कोई रुकावट नहीं दिख रही है। मैंने बैकअप करते समय सर्वर को पिंग करने की भी कोशिश की। बैकअप के टूटने पर भी पिंग की प्रतिक्रिया दर 100% होती है।

मैं kerberosदूरस्थ सर्वर पर प्रमाणित करने के लिए उपयोग करता हूं ।

मैंने कई संयोजनों की कोशिश की ServerAliveInterval, ServerAliveCountMaxया ClientAliveIntervalमेरे साथ ~/.ssh/config, लेकिन कोई फायदा नहीं हुआ।

यह हो सकता है कि सर्वर पर कुछ चल रहा है जो rsyncकिसी कारण से कमांड को मारता है , लेकिन मुझे नहीं पता कि इसमें कैसे जांच करनी है। कोई विचार?


शायद मुझे यह जोड़ना चाहिए कि मैं kerberosरिमोट सर्वर पर प्रमाणित करने के लिए उपयोग करता हूं ।
pfnuesel

यह संभवतः बहुत महत्वपूर्ण है। कृपया इस जानकारी को शामिल करने के लिए अपने प्रश्न को संपादित करें
roaima

इस सर्वर पर, क्या rsync को कॉल हर बार विफल होता है, या केवल कभी-कभी? इसके अलावा, यदि बार-बार असफल होने में लगने वाले समय को मापते हैं, तो क्या कोई पैटर्न दिखाई देता है? मैं Kerberos प्रमाणीकरण टाइमिंग, या कुछ इसी तरह के बारे में सोच रहा हूं।
ढांग

एक io त्रुटि देखकर मुझे आश्चर्य होता है कि क्या रिमोट साइड की फाइलसिस्टम भर गई है?
जेफ स्कालर

1
@rubynorails दिलचस्प है। यह समस्याओं के बिना काम करने लगता है।
pfnuesel

जवाबों:


6

आपकी समस्या (स्मृति की कमी) हो सकती है। जब 1GB सर्वर के लिए बड़ा था, तो rsync मुझ पर बड़े डेटासेट के लिए विफल होगा। शायद एल्गोरिथ्म ने मेमोरी कैपेसिटी में सुधार किया है, लेकिन मैंने 8 साल या उस साल यह समस्या नहीं देखी है। तो वास्तव में, यह एक बाहरी शॉट है, लेकिन एक खोज के लायक है। पहले छोटे डेटासेट आज़माएं। आप यह भी कोशिश कर सकते हैं - विवेक जांच पर एक रूप के रूप में - एक टार-टार कर रहा है:

tar cf - $HOME | ssh ${server} tar xf -

अगर वह भी कुछ मिनटों के बाद विफल हो जाता है, तो यह स्मृति नहीं है।


4

मैंने rsyncअतीत में भी इसका सामना किया है। मेरे लिए इसे ठीक करने वाला समाधान screenसत्र के भीतर से चल रहा था , जो दूरस्थ सर्वर से कनेक्शन बनाए रखने में मदद करने में सक्षम था।

screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session

आप चलकर स्थिति की जांच कर सकते हैं screen -x rsync(या यदि आप सत्र का नाम तय करते हैं, यदि आप इसे एक नाम देते हैं, जिसकी आवश्यकता नहीं है)। यह आपके वर्तमान शेल को उस सत्र में पुनः संलग्न करेगा। अपने स्टेटस को चेक करने के बाद उसे फिर से अलग करना याद रखें ताकि वह बैकग्राउंड में चलता रहे।

आप screenएक असफल झपट्टा में पृष्ठभूमि के माध्यम से चलाने के लिए कमांड को निष्पादित कर सकते हैं [कोई गलत होने पर कृपया मुझे सही करें] screen -dm 'command'। आप man screenपिछले एक कोशिश करने से पहले चाहते हो सकता है ।

संपादित करें:

मैं अपना उत्तर संपादित कर रहा हूं क्योंकि आपने पुष्टि की है कि screenइस परिदृश्य में कोई सहायता नहीं scpमिलती है, लेकिन आपने मेरी टिप्पणी का उत्तर देने का प्रयास करने और यह देखने के लिए सुझाव दिया कि आपको किस प्रकार के परिणाम मिलते हैं, जिसके लिए आपने उस अजीब तरह से पर्याप्त उत्तर दिया, यह ठीक काम किया।

तो मेरा नया उत्तर यह है: उपयोग scp- या ssh(साथ tar) - के बजायrsync

दी, scpके रूप में सुविधाओं के विशाल संख्या का समर्थन नहीं करता rsyncहै, लेकिन आप वास्तव में सिर्फ कितने सुविधाओं के बारे में है कि यह हैरानी होगी करता है समर्थन है कि लगभग कर रहे हैं समान की है कि rsync

इसके लिए scpऔर अन्य विकल्पों के लिए वास्तविक विश्व परिदृश्य rsync:

इसके बाद, मुझे एक शेल स्क्रिप्ट बनाने का काम सौंपा गया, जो हमारे उत्पादन सर्वरों से लॉग खींचती है और उन्हें स्थानीय रूप से एक वेब सर्वर पर संग्रहीत करती है ताकि डेवलपर्स उन्हें समस्या निवारण उद्देश्यों के लिए उपयोग कर सकें। rsyncहमारे सर्वर पर स्थापित करने के लिए यूनिक्स टीम को प्राप्त करने का असफल प्रयास करने के बाद , मैं एक वर्कअराउंड का उपयोग करके आया scpजो कि बस काम कर रहा था ।

यह कहा जा रहा है, मैंने हाल ही में स्क्रिप्ट को संशोधित किया है ताकि इसका उपयोग हो sshऔर tar- GNU tar/ gtar, सटीक हो। जीएनयू tarविकल्पों में से कई कि आप वास्तव में में मिलेगा का समर्थन करता है rsync, जैसे --include, --exclude, अनुमति / विशेषता संरक्षण, संपीड़न, आदि

जिस तरह से अब मैं इसे पूरा करता हूं sshवह रिमोट सर्वर (पबकी ऑउटफिट के माध्यम से) और उपयोग करने के लिए है gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]- यह सभी जानकारी को लिखता है stdout, जिसे बाद में [स्थानीय रूप से] पाइप किया जाता है tar -xzfताकि दूरस्थ उत्पादन सर्वर पर कोई बदलाव न हो। , और स्थानीय सर्वर के रूप में खींची गई सभी फाइलें। यह rsyncइस मामले में एक बढ़िया विकल्प है । केवल एक ही महत्वपूर्ण बात न तो समर्थन tarऔर न ही scpवृद्धिशील बैकअप और ब्लॉक-स्तरीय त्रुटि की जाँच के स्तर हैं rsync

पूर्ण कमांड जिसका उपयोग करते समय मैं उल्लेख कर रहा हूं sshऔर tarयह कुछ इस तरह होगा (रिमोट सोलारिस 10 है; स्थानीय डेबियन है, इसके लायक क्या है):

cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz

आपके परिदृश्य में यह विपरीत होगा - tar -cf -स्थानीय रूप से, और रिमोट सर्वर से पाइप के माध्यम से ssh user@remotehost "tar -xf -"- एक और उत्तर है जो इस प्रकार के व्यवहार को संदर्भित करता है लेकिन उतना विस्तार में नहीं जाता है।

कुछ अन्य विकल्प हैं जिन्हें मैंने चीजों को गति देने के लिए शामिल किया है। मैंने निष्पादन समय को यथासंभव कम करने के लिए अथक प्रयास किया। आपको लगता होगा कि कम्प्रेशन का उपयोग tarकरना व्यर्थ होगा, लेकिन यह वास्तव में चीजों को थोड़ा गति प्रदान करता है, जैसा कि -Cध्वज का उपयोग कम्प्रेशन sshको सक्षम करने के sshसाथ होता है। मैं इस पोस्ट को बाद की तारीख में अपडेट कर सकता हूं जिसमें मेरे द्वारा उपयोग की जाने वाली सटीक कमांड को शामिल करना है (जो कि मैंने पोस्ट की है, उसके समान है), लेकिन मुझे इस समय वीपीएन पर मिलने का मन नहीं है क्योंकि मैं इस सप्ताह छुट्टी पर हूं।

सोलारिस 10 पर, मैं भी उपयोग करता हूं -c blowfish, क्योंकि यह प्रमाणित करने के लिए सबसे तेज सिफर है और चीजों को गति देने में भी मदद करता है, लेकिन हमारे सोलारिस 11 या तो इसका समर्थन नहीं करते हैं या इस सिफर सूट को अक्षम कर दिया है।

इसके अतिरिक्त, यदि आप ssh/ tarविकल्प के साथ जाना चुनते हैं , तो वास्तव में उपयोग करने के मेरे मूल समाधान को लागू करने के लिए एक अच्छा विचार होगा screenयदि आप एक बैकअप कर रहे हैं जो थोड़ी देर लगेगा। यदि नहीं, तो सुनिश्चित करें कि आपके रखने की समय-सीमा / टाइमआउट सेटिंग्स आपके ssh_configअधिकार में हैं, या यह विधि टूटी हुई पाइप के कारण भी होगी।

यहां तक ​​कि अगर आप साथ चलते हैं scp, तो मैं हमेशा इस तरह के ऑपरेशन का उपयोग करने screenया केवल मामले में करने के लिए सबसे अच्छा अभ्यास करता हूं । कई बार मैं अपनी सलाह का पालन नहीं करता और ऐसा करने में विफल रहता हूं, लेकिन यह सुनिश्चित करने के लिए कि इन सक्रिय शेल सत्रों को किसी भी तरह से डिस्कनेक्ट करने के कारण दूरस्थ नौकरी खराब न हो जाए, इन उपकरणों में से एक का उपयोग करना वास्तव में एक अच्छा अभ्यास है।tmux

मुझे पता है कि आप अपने rsyncमुद्दे के मूल कारण का पता लगाना चाहते हैं । हालांकि, अगर यह वास्तव में महत्वपूर्ण है, तो ये दो बेहतरीन वर्कअराउंड हैं जिन्हें आप इस बीच प्रयोग कर सकते हैं।


1
मैंने इसके साथ कोशिश की screen, नतीजा वही है।
pfnuesel

@pfnuesel - कम से कम यह जानना अच्छा है कि आप इसे नियंत्रित कर सकते हैं।
rubynorails

3

मैं OSX एल Capitan पर एक ही समस्या थी और इसे rsync v3.11 में अपग्रेड करके ठीक किया। मुद्दा मेरे लिए v2.6.9 पर हो रहा था।


मैं दौड़ रहा हूं rsync 3.1.1
pfnuesel

आप अपने राउटर को पैकेट बाढ़ सुरक्षा (या किसी भी समान सुरक्षा) को सक्षम नहीं करना चाहते हैं। क्या आप किसी भी तरह के वीपीएन से जुड़ रहे हैं?
ब्रूनो

यह एक समस्या हो सकती है। दुर्भाग्य से, मेरे पास नेटवर्क उपकरणों तक पहुंच नहीं है। हालांकि, यह अन्य सर्वरों पर ठीक काम करता है, इसलिए मैं अनुमान लगा रहा हूं कि इस विशेष सर्वर में किसी प्रकार का पैकेट बाढ़ सुरक्षा है।
pfnuesel

2

केर्बरोस केवल प्रमाणीकरण के लिए है, जिससे आपको एक सफल कनेक्शन बनाने के बाद कोई समस्या नहीं होनी चाहिए।

क्या आपने rsync डेमॉन का उपयोग करने की कोशिश की है?

क्या आपके सर्वर एक ही नेटवर्क पर हैं या आपके बीच फ़ायरवॉल / राउटर है?

आप सर्वर के बीच एक नेटसीट सत्र को सेटअप करने की कोशिश कर सकते हैं, यह कोशिश करने का एक सरल तरीका है कि क्या आपके सर्वर के बीच कोई कनेक्शन समस्या है।

पहले सर्वर पर:

nc -lk <port-number>

और मुवक्किल पर

nc <server> <port-number>

आप कनेक्शन को खुला छोड़ सकते हैं, और देख सकते हैं कि क्या कनेक्शन इसे बनाए रखता है, या यदि आप कनेक्शन को ढीला करते हैं। आप क्लाइंट पर कुछ लिखने का भी प्रयास कर सकते हैं, देखें कि यह दूसरी तरफ समाप्त होता है।


दुर्भाग्य से, मेरे पास सर्वर पर रूट एक्सेस नहीं है। इसका मतलब है कि मैं rsync डेमॉन या नेटकैट सत्र नहीं चला सकता।
pfnuesel

@pfnusel आप netcatकिसी भी पोर्ट पर चला सकते हैं > 1024 बिना रूट विशेषाधिकारों के
1024

1

आपके पास दूरस्थ सर्वर पर कुछ है जो stdout को लिखता है । यह आपके .profileया में हो सकता है .bash_profile। यह कुछ कम स्पष्ट हो सकता है जैसे sttyया mesg। यदि संदेह है, तो आप सर्वर में लॉग इन करने के अपने प्रश्न में एक प्रतिलिपि की प्रतिलिपि बनाएँ (होस्टनाम को सभी तरीकों से फिर से बनाएँ)।


मुझे समझ नहीं आ रहा है। न तो क्या गलत हो रहा है, और न ही मैं यह पता लगाने के लिए क्या कर रहा हूं कि स्टडआउट पर क्या लिखना है।
pfnuesel

@pfnuesel यदि आप लॉगिंग की प्रतिलिपि प्रतिलिपि करते हैं और इसे यहां पोस्ट करते हैं, तो कोई देख सकता है कि क्या हो रहा है। बेहतर है, अपनी .profileया .bash_profileसमीक्षा के लिए पोस्ट करें । आप जैसी चीजों के लिए देख रहे हैं mesgयाstty
roaima

मेरे किसी भी डॉटफ़ाइल्स में कोई mesgया नहीं है stty
pfnuesel

@pfnuesel कुछ और जो लॉगिन के दौरान टर्मिनल को लिखता है?
22

नहीं, लेकिन भले ही मैं कुछ ऐसा लिखूं जो stdout को लिखता है। यह कुछ भी नहीं बदलता है।
22

1

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


1

एक समान समस्या का सामना करते समय rsyncया मैन्युअल रूप से (या तो cp, scpया गनोम नॉटिलस में) एक लिनक्स डेस्कटॉप से ​​बड़ी फ़ाइलों को एक कम शक्ति वाले एआरएम आधारित लिनक्स एनएएस पर एक गीगाबिट सक्षम नेटवर्क ( kerberosमेरे सेटअप में नहीं) पर कॉपी करते हुए सामना करना पड़ा । एनएएस ड्राइव का उपयोग करके साझा किया जाता है samba, और उपयोग करने वाले क्लाइंट पर मुहिम शुरू की जाती है cifs। मेरे लिए समाधान क्लाइंट से NAS फाइल सिस्टम को बिना किसी कैशिंग के माउंट करना था (यह भी देखें। माउंट मैन्स मैन पेज):

sudo mount -t cifs //server.lan/somedir /mnt/somedir/ -o cache=none

वैकल्पिक रूप से, जब ग्राहक के प्रयोग पर NAS ड्राइव बढ़ते gvfsमें nautilusयह समस्या बनी रहती नहीं होता जब बड़े फाइलों को कॉपी (लेकिन उस के साथ संयोजन में काम नहीं करता rsyncहै)।

स्थानीय डिस्क के साथ समवर्ती रूप से नेटवर्क फाइलसिस्टम के लिए लिनक्स को लिखें, इस समस्या के होने के बारे में आगे विस्तार से बताता है।


0

अपने rsync संस्करणों को बस यह सुनिश्चित करने के लिए अपग्रेड करें कि वे भेजने और प्राप्त करने वाले दोनों पीसी पर समान हैं । मेरा उत्तर यहाँ देखें: /server/883487/unable-to-rsync-due-to-broken-pipe/988794#988794


1
क्यों होता है पतन? यह एक टिप्पणी होना चाहिए जवाब नहीं, हो सकता है? किसी को? किसी को?
गेब्रियल स्टेपल्स

1
मैं अब समस्या को पुन: उत्पन्न नहीं कर सकता, क्योंकि मेरे पास अब उस सर्वर तक पहुंच नहीं है। लेकिन यह एक उचित जवाब है और चढ़ाव के लायक नहीं है।
pfnuesel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.