लिनक्स: CIFS / सांबा माउंट कई मिनट तक लटका रहता है


26

मेरे पास एक छोटा स्थानीय नेटवर्क है जिसमें एक Gentoo बॉक्स और एक Windows बॉक्स है। मैं Gentoo बॉक्स पर एक कमांड के साथ विंडोज बॉक्स पर उत्पन्न होने वाला हिस्सा माउंट करता हूं:

mount -t cifs -o username=WindowsUsername,password=thepassword,uid=pistos //192.168.0.103/Users /mnt/windowsbox

ज्यादातर समय, सब कुछ बस काम करता है, और मैं समस्याओं के बिना पढ़ और लिख सकता हूं। हालाँकि, हर कुछ हफ़्ते में, कनेक्शन या आरोह बिंदु मृत या लटका हुआ प्रतीत होता है, जैसे कि कोई भी प्रक्रिया जो आरोह बिंदु तक पहुँचने की कोशिश करती है, डी अवस्था (डिस्क, या I / O प्रतीक्षा) में फंस जाती है। ये प्रक्रिया TERM और KILL सिग्नल के लिए अभेद्य हो जाती है। नेटवर्क से विंडोज बॉक्स को डिस्कनेक्ट करना और फिर से कनेक्ट करना मदद नहीं करता है। जमे हुए राज्य 5+ मिनट तक रहता है। यह वास्तव में निराशाजनक है और सामान्य काम के रास्ते में हो जाता है, क्योंकि यह Save As के डायलॉग्स, lsकमांड आदि को फ्रीज कर देता है । अगर मैं umountमाउंट पॉइंट पर इश्यू करता हूं , तो यह या तो हैंग हो जाता है, या रिपोर्ट करता है कि माउंट पॉइंट उपयोग में है। आखिरकार, मृत अवस्था स्वयं हल हो जाती है, और आरोह बिंदु असमतल हो जाता है, या बिना umountकिसी देरी के संभव हो जाता है ।

मेरा अनुमान है कि ऐसा तब होता है जब कनेक्शन / माउंट बेकार हो गया है, या जब विंडोज मशीन निष्क्रिय हो गई है। में सच में आश्वस्त नहीं हूँ।

ऐसा क्यों हो रहा है, और मैं इसे रोकने के लिए क्या कर सकता हूं? या मैं इन डी-राज्य प्रक्रियाओं को सफलतापूर्वक कैसे मार सकता हूं?

संभवतया संबंधित: CIFS आरोहण पर लटका हुआ है


1
क्या दो मशीनों के बीच किसी भी प्रकार के फायरवॉल उपयोग में हैं?
Schrute

@Srute: मुझे लगता है कि लिनक्स (iptables?); और विंडोज पर जो भी डिफॉल्ट हैं, वे चल रहे हैं। आपको लगता है कि फायरवॉल कनेक्शन का समय निकाल रहे हैं? मैंने ऐसी बात कभी नहीं सुनी थी।
पिस्तोस

मुझे लगता है कि यह लिनक्स बॉक्स का एक मुद्दा हो सकता है। मैंने एक समान मुद्दा देखा - सीआईएफ और विंडोज के साथ नहीं - लेकिन एक माउंटेड एनएफएस शेयर के साथ। सहेजना संभव नहीं था - मुझे लगता है कि गैर-मौजूदा nfs सर्वर तक पहुँचने पर कुछ प्रक्रिया के लटकने के कारण। सर्वर के क्रैश होने पर यह आमतौर पर खुश हो जाता है।
कॉर्नेलिनक्स

1
मेरी सलाह लाइनक्स मशीन पर रिंग-बफर नेटवर्क कैप्चर सेटअप करने की है (यानी tcpdump -i eth0 -C 5 -W 10 -s 10 -s 0 -v -t /tmp/cifs.pcap होस्ट 192.168.0.103 पर। मैं भी चलाऊंगा स्क्रीन के नीचे यह प्रक्रिया समाप्त होने से रोकने के लिए जब आप डिस्कनेक्ट करते हैं)। जब समस्या होती है, तो कुछ सेकंड के बाद ट्रेस को रोकें और आपको कम से कम यह निर्धारित करने में सक्षम होना चाहिए कि पैकेट ट्रेस की समीक्षा करते समय समस्या किस तरफ हो रही है (यानी सर्वर जवाब देना बंद कर देता है, सत्र समाप्त हो जाता है आदि)।
GeekyDeaks 7

1
@Pistos - विंडसर आपका दोस्त है! निशान भ्रामक लग सकते हैं, लेकिन वॉशर्सक फ़्रेम को मदद करने के लिए डिकोड करेंगे। आप पहले मूल बातें खत्म करना चाहते हैं, जैसे कि सर्वर या क्लाइंट सत्र को छोड़ना (फिन पैकेट), फिर दूसरों पर प्रगति जैसे सर्वर का जवाब देना आदि। यदि आपके पास 2013 में CIFS पर एक शार्कफ़ेस्ट वीडियो था ( youtube.com/watch) ; v = XbvFXSPig-w ) लेकिन यह बहुत लंबा है :)
GeekyDeaks

जवाबों:


11

सुनिश्चित नहीं है कि समस्या क्यों हो रही है, लेकिन एक समाधान के रूप में, क्या आपने हर मिनट क्रोन के माध्यम से कुछ करने touch /mnt/windowsbox/keepalive.txtया echo "I am still alive." >/mnt/windowsbox/keepalive.txtचलाने की कोशिश की है ? इस तरह कनेक्शन सक्रिय रहना चाहिए।


अच्छा विचार। मैंने इसे लागू कर दिया है, और देखेंगे कि क्या होता है।
पिस्तोस

2
यह समस्या हल हो गई है, मुझे उल्लेख करना चाहिए।
पिस्टन

सुनकर अच्छा लगा!
जने पिकरकेन

1
@ पैट के उत्तर के अनुसार, प्रत्येक व्यक्ति को प्रत्येक मिनट में एक दिल की धड़कन से प्रत्येक 5 मिनट (300 सेकंड) तक के लिए ट्रिम किया जा सकता है, जो कि */5 * * * *
क्रैटाब

मैं अभी इसके लिए उपयोग कर रहा हूं। 3 दिनों के भीतर, मेरे पास तीन अलग-अलग उबंटू सर्वर 16 एलटीएस मशीनें (दो भौतिक, एक वीएम) रिबूट होने के कुछ घंटों के बाद अपने एसएमबी कनेक्शन को छोड़ देती हैं। स्टार्टअप पर, SMB कनेक्शन समस्या के बिना मुहिम शुरू की है, लेकिन यह अंततः अप्रतिसादी हो जाता है।
user38537


0

एक अन्य संभावित उत्तर ने क्रोन के माध्यम से एक नियमित अंतराल पर माउंट पर एक फ़ाइल को लिखने का सुझाव दिया। मैं शेयर और डिस्कनेक्ट से कनेक्ट करने के लिए smbclient प्रोग्राम का उपयोग करने के बजाय सुझाव दूंगा।

मैंने इसे पूरा करने के लिए एक बैश स्क्रिप्ट लिखी:

#!/bin/bash

su usernamehere -c "smbclient \\\\\\\\\\\\\\\\servernamehere\\\\\\\\sharenamehere passwordhere -c exit" >/dev/null 2>&1

यह कमांड शेयर के लिए एक नया कनेक्शन बनाता है और फिर एक्जिट कमांड को चलाता है, तुरंत उस कनेक्शन को बंद कर देता है जो कमांड लाइन पर स्थापित है। सर्वर नेम से पहले 8 और शेयर नाम से पहले 4 स्लैश होने चाहिए, क्योंकि बैकस्लैश से बचने की जरूरत होती है, और डबल कोटेड स्ट्रिंग के अंदर बच निकलने की जरूरत होती है। शायद ऐसा करने का एक स्मार्ट तरीका है, लेकिन यह काम करने लगता है।

शायद यह एक बार में कई मिनट के लिए कनेक्शन खुला रखने से इसे और अधिक विश्वसनीय बनाने का एक तरीका है, लेकिन यह मेरी लीग से थोड़ा बाहर है।


दिलचस्प प्रस्ताव। अगर मैं पहले से ही अन्य समाधान के साथ सफलता नहीं मिली है, तो मैंने इसे एक बार दिया।
पिस्तोस

मैं नहीं देखता कि यह कैसे सहायक होगा? Janne का समाधान cifs क्लाइंट द्वारा बनाए गए कनेक्शन को जीवित रखेगा, जबकि यह smbclient के साथ एक नया, असंबंधित कनेक्शन बना रहा होगा - तो यह कैसे मदद करेगा?
फ्लुंगो

1
FYI करें, यदि आप बैकस्लैश के बजाय उनका उपयोग करना चाहते हैं, तो smbclient आगे की स्लैश का समर्थन करता है, इसलिए //servername/sharnameउन स्थानों पर आसान है जहाँ आपको बहुत से भागने की आवश्यकता होती है।
स्टीव फ्राइडल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.