sshfs डिवाइस व्यस्त है


30

मैंने sshfs (संस्करण 2.8.4) का उपयोग करते हुए एक दूरस्थ फाइल सिस्टम लगाया

sshfs -o allow_root joeuser@example.com: ./example

लेकिन यह असफल है

> fusermount -u example
umount: /home/joeuser/example: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

इस त्रुटि के कारण क्या हो सकता है और इसे कैसे ठीक किया जा सकता है?

जवाबों:


14

कुछ प्रोग्राम उस फ़ाइल सिस्टम में फ़ाइल का उपयोग कर रहा है जिसे आप अनमाउंट करने का प्रयास कर रहे हैं। यह पढ़ने या लिखने, एक मौजूदा निर्देशिका या कुछ और अस्पष्ट मामलों के लिए खोली गई फ़ाइल हो सकती है। यह यहां तक ​​कि फाइल सिस्टम पर एक निर्देशिका के कारण एक आरोह बिंदु हो सकता है।

जांच करने के लिए, भागो lsof +f -- example। यह बताएगा कि फाइलसिस्टम का उपयोग करने की प्रक्रिया (तों) क्या है। अपने खुद के निर्णय के रूप में कि क्या उन्हें बंद फ़ाइलों को बनाने के लिए, उन्हें मारने के लिए, या अनमाउंट ऑपरेशन को स्थगित करें।


अजीब तरह से lsof ने एक gvfsd- संग्रह प्रक्रिया नहीं दिखाई, जो फ़ाइल प्रबंधक GUI से एक संग्रह फ़ाइल खोली (और बंद) होने से बची हुई थी। तो, यह भी देखें ps aux | grep gvfsd-archive
अलेक्सी

चेतावनी दी है कि lstat निष्पादित नहीं कर सकता है और यह जानकारी अधूरी हो सकती है, और अपराधी को सूचीबद्ध नहीं किया है। मेरे मामले में, मेरे पास माउंटेड एक के अंदर काम करने वाली निर्देशिका के साथ एक टर्मिनल खुला था।
जानिस एल्मरिस

36

मुझे लगता है कि आप एक आलसी चाहते हैं:

sudo umount -l example

1
मुझे लगता है कि आपका सुझाव गलत है। मैनुअल पेज के अनुसार आलसी ऑमाउंट Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore। तो यह मूल मुद्दे को हल नहीं करेगा। @ गिल्स से सहमत, lsofयहां मदद करनी चाहिए।

2
दरअसल, यह मेरे लिए काम कर गया। lsof को कोई खुली फाइल नहीं मिली लेकिन umount -lकाम किया।
Gerrit

1
इस समाधान ने भी मेरे लिए काम किया!
दान

1
Sshfs के साथ एक ही मुद्दे का अनुभव किया, यह मेरे लिए भी काम किया।
ओरुन

4

मुझे बस यह समस्या थी और kill -9माउंटेड फाइल सिस्टम से पढ़ने की प्रक्रिया नहीं हो सकी । या (जो काम किया) के kill -9बाद भी काम नहीं किया। केवल एक चीज जो काम करती थी ।fusermount -zu /mount/pointumount -l /mount/pointpkill -9 sshfs


1
fusermount -zu /mount/pointमेरे लिए काम किया। धन्यवाद!
ओस्ट्रोकैच

3

उबंटू चल रहा है, man fusermountएक -zविकल्प के बारे में बताता है , जिसे "आलसी अनमाउंट" के रूप में प्रलेखित किया गया है। यह संबंधित प्रतीत होता है, लेकिन एक पुष्टि की जरूरत है, जो इस अन्य मैन पेज द्वारा दिया गया है: fusermount (man.he.net) , जो कहता है कि "आलसी अनमाउंट (भले ही संसाधन अभी भी व्यस्त हो) काम करता है"। एक यह उपयोग करना चाहिए साथ-u , -zअकेले विकल्प, कोई त्रुटि उत्पन्न करेगा। मैंने -zविकल्प की कोशिश की , और यह पुष्टि कर सकता है कि यह चाल है, लेकिन यह बहुत अधिक चाल की तरह दिखता है: यह वास्तव में क्या करता है? जैसे ही निर्देशिका ‑ अधिक व्यस्त न हो, इसे स्वचालित रूप से अनमाउंट कर दें? मुझे नहीं पता, दस्तावेज नहीं, इतना असुरक्षित।

इसलिए यहां एक और विकल्प है, अधिक क्रिया, लेकिन सुरक्षित: जब तक यह सफल नहीं होता है, तब तक अनमाउंट करने की कोशिश करता है, जितनी बार जरूरत है, एक लूप में।

echo -n "Unmounting...";
fusermount -u -q "$MOUNT_POINT";
OK="$?";

while [ "$OK" != "0" ]
do
   sleep 1;
   echo -n ".";
   fusermount -u -q "$MOUNT_POINT";
   OK="$?";
done

echo;

एक न्यूनतम प्रगति प्रतिक्रिया है, ताकि किसी को पता चले कि क्या चल रहा है और विश्वास नहीं करता कि यह लटका हुआ है।

यह विकल्प शेल स्क्रिप्ट से स्वीकार्य है; कमांड लाइन इंटरैक्शन के लिए, -zविकल्प का उपयोग अधिक आसान है, लेकिन किसी को शायद पता होना चाहिए कि मैन पेज इसे दस्तावेज़ नहीं करता है और इसके बारे में संदेह हो सकता है कि यह वास्तव में क्या करता है।


2

मैं अक्सर sshfs के साथ "डिवाइस व्यस्त" देखता हूं, जब मेरे पास sshfs शेयर पर निर्देशिका के लिए एक टर्मिनल विंडो खुली होती है। टर्मिनल से बाहर निकलना या निर्देशिकाओं को किसी स्थानीय हिस्से में बदलना, फ़ुसरमाउंट चलाना, मेरी समस्याओं को हल करता है।



1

यदि आपने पहले ही सुनिश्चित कर लिया है कि "रेगुलर" ऑमाउंटिंग की कोशिश करने से पहले फाइल सिस्टम का उपयोग नहीं किया जा रहा है:

  • fuser -vm /mount/point और / या
  • lsof /mount/point उन्हें खोजने के लिए,
  • छोड़ें / मारें / न करें /mount/point

प्रयत्न:

  • pkill -KILL sshfs और फिर
  • fusermount -u /mount/point

जब मैंने नेटवर्क कनेक्शन खो दिया और गैर-जिम्मेदार sshfs माउंट बिंदु को umount नहीं कर सका, तो इससे मुझे मदद मिली।

इसके अलावा, यदि आप नेटवर्क कनेक्शन खो जाने पर स्वचालित रूप से umount के लिए sshfs चाहते हैं, तो I / O त्रुटि के sshfs का उपयोग करके अनुप्रयोगों को सूचित करना (ताकि वे असीम रूप से अटक न जाएं), के साथ माउंट करें:

  • sshfs -o ServerAliveInterval=15 remote-srv:/remote/dir /local/mountpoint

जब कोई डेटा एक्सचेंज नहीं किया जाता है, तो आपका sshक्लाइंट हर 15 सेकंड में जांच करेगा कि क्या उसे सर्वर से प्रतिक्रिया मिल सकती है। यदि 3 चेक विफल हो जाते हैं, तो यह डिस्कनेक्ट और umount होगा।

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