umount - डिवाइस व्यस्त है


14

कभी-कभी जब मैं किसी डिवाइस को यूमाउंट करना चाहता हूं, जैसे

sudo umount /dev/loop0

मुझे संदेश मिलेगा

umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

मैं आमतौर पर कंसोल विंडो (मेरे मामले में xfce4- टर्मिनल) को बंद करके और फिर इस मुद्दे को हल करता हूं umount

इस समस्या का क्या मतलब है? क्या कोई और बेहतर उपाय है?


2
यह उदाहरण के लिए होता है यदि आप अभी भी उस निर्देशिका में एक शेल में हैं जहां डिवाइस माउंट किया गया है।
klapaucius

मुझे याद नहीं कि मैं वहां था लेकिन मैंने कोशिश की और आप सही हैं, ऐसा हुआ।
xralf

जवाबों:


14

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

हालांकि लिनक्स पर एक विकल्प है। umount -lएक "आलसी" कॉल का उपयोग करना। फ़ाइल सिस्टम अभी भी माउंट किया जाएगा, लेकिन आप इसे पहले से उपयोग करने वाली प्रक्रियाओं को छोड़कर, इसे देख या उपयोग नहीं कर पाएंगे। जब अपमानजनक कार्यक्रम से बाहर निकलता है (जो भी माध्यम से) सिस्टम फाइल सिस्टम को अनमाउंट करते हुए "खत्म" करेगा।


2
क्या यह पता लगाने का एक तरीका है कि किस प्रक्रिया में खुली फ़ाइल हैंडल है और इसे समाप्त किया जाना चाहिए?
19

4
उपयोग करना lsofशायद सबसे अच्छा तरीका है।
bahamat

1
जैसे lsof | grep loop0?
xralf

नहीं, आरोह बिंदु के लिए grep। यह नीचे किसी भी फाइल को सूचीबद्ध करना चाहिए। मुझे नहीं लगता कि यह उन चीजों को दिखाएगा जो बस माउंट पॉइंट के तहत एक कार्यशील निर्देशिका है, इसलिए यह एक आदर्श तरीका नहीं है।
bahamat

7

आप fuserघुड़सवार फ़ाइल सिस्टम का उपयोग करके सभी प्रक्रियाओं को मारने के लिए भी उपयोग कर सकते हैं ।

fuser -cuk /mnt

विकल्प:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

अपने आप के लिए स्पष्टीकरण पर जाँच करें ।


3

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

सामान्य रूप से लिनक्स, और यूनिक्स एक फाइल सिस्टम को चालू रखने के लिए बहुत बुरी तरह से चाहते हैं यदि किसी प्रक्रिया में उस फाइलसिस्टम में करंट डायरेक्टरी हो।

आप बस cdकंसोल विंडो को /mntमारने या उसके अंदर चल रहे शेल के बजाय एक निर्देशिका से बाहर या अंदर जाने के लिए कंसोल विंडो में उपयोग कर सकते हैं ।


0

मैंने एक ऐसी स्थिति की खोज की जो एक डिवाइस को अनमाउंट करने में बाधा उत्पन्न कर सकती है जिसे मैं एक उत्तर के रूप में साझा करूंगा, हालांकि यह प्रश्न बहुत पुराना है।

यदि आपके पास मशीन पर होस्ट किए जा रहे एनएफएस शेयर हैं, और उन एनएफएस शेयरों में से कोई भी उस डिवाइस द्वारा समर्थित है जिसे आप अनमाउंट करने की कोशिश कर रहे हैं, तो आपको उन्हें साझा करना बंद करना होगा (एनएफएस सेवा को रोककर सबसे अच्छा किया जाता है, जैसे sudo service nfs-kernel-server stopउबंटू के हाल के संस्करणों पर )। NFS सर्वर शायद lsof या fuser में दिखाई नहीं देता है, जिससे समस्या को पहचानना मुश्किल हो सकता है।

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