व्यस्त डिवाइस पर


41

मुझे अक्सर किसी निर्देशिका को umount करने के लिए एक समस्या का अनुभव होता है:

umount / mnt / dir
umount: / mnt / dir: डिवाइस व्यस्त है

डिवाइस के व्यस्त होने के कई कारण हैं। कभी-कभी ऐसी प्रक्रियाएं चल रही होती हैं, जिन पर खुले ताले होते हैं, कभी-कभी शीर्ष पर अन्य निर्देशिकाएं भी होती हैं /mnt/dir

मेरा प्रश्न:

यह जाँचने के लिए क्या कदम हैं कि एक निर्देशिका को अनमाउंट क्यों नहीं किया जा सकता है।

मुझे पता है कि कई कारण हैं, लेकिन यदि आप कोई विशिष्ट समाधान बताते हैं तो यह ठीक है।

[संपादित करें]

[X] माउंटेड वॉल्यूम पर चलने की प्रक्रिया।
[X] जिस वॉल्यूम को हम अनमाउंट करना चाहते हैं उसके ऊपर एक और वॉल्यूम लगाया जाता है
[_] NFS उस वॉल्यूम को लॉक करता है जिसे हम अनमाउंट करना चाहते हैं


जवाबों:


76

जाँच करने का तरीका है fuser -vm /mnt/dir, जिसे जड़ के रूप में चलाया जाना चाहिए। यह आपको बताएगा कि कौन सी प्रक्रियाएं आरोह बिंदु तक पहुंच रही हैं।

एक विकल्प है lsof /mnt/dir, जो माउंट पर प्रत्येक खुली फ़ाइल दिखाएगा। फिर से रूट के रूप में सर्वश्रेष्ठ रन।

आप इनमें से किसी को भी गैर-रूट के रूप में चला सकते हैं, लेकिन तब आउटपुट आपकी प्रक्रियाओं तक सीमित रहेगा - अन्य उपयोगकर्ताओं से केवल चुपचाप नहीं दिखाए जाएंगे, भले ही वे फाइल सिस्टम को अनमाउंट करने से रोकेंगे।

उदाहरण:

Watt:~# fuser -vm /mnt/Zia/src
                     USER        PID ACCESS COMMAND
/mnt/Zia/src:        root     kernel mount /mnt/Zia/src
                     anthony   24909 ..c.. bash
                     anthony   25041 F.c.. gvim

"एक्सेस" फ़ील्ड आपको बताती है कि इसकी एक्सेस कैसे की जाती है। इस मामले में, कर्नेल में इसे माउंट के रूप में उपयोग किया जाता है (डुह, लेकिन अनमाउंट केवल इसके साथ ठीक होगा)। bashवर्तमान वर्किंग डाइरेक्टरी के रूप में है ( cdअनमाउंट से पहले एक अलग डाइरेक्टरी में होगी) और जीवीएम दोनों में करंट डाइरेक्टरी होती है और एक फाइल ओपन होती है (उस गविम को बंद करने की आवश्यकता होगी)।

Watt:~# lsof /mnt/Zia/src
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    24909 anthony  cwd    DIR   0,26    12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim    25041 anthony  cwd    DIR   0,26    12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim    25041 anthony    6u   REG   0,26    16384 3526219 /mnt/Zia/src/perl/.utf8.c.swp (zia.vpn.home:/home/anthony/src)

इस आउटपुट में, आप bash और gvim (प्रकार के रूप में DIR) के लिए वर्तमान निर्देशिका देख सकते हैं । आप यह भी देख सकते हैं कि लिखने के लिए कौन सी फ़ाइल gvim खुली है।

समस्या को कैसे बल दें:

fuserएक -kविकल्प है जो SIGKILLमाउंट का उपयोग करके प्रत्येक प्रक्रिया को एक संकेत (डिफ़ॉल्ट:) भेजेगा । यह माउंट को व्यस्त होने से रोकने के लिए एक अधिक शक्तिशाली तरीका है। (और निश्चित रूप से, आप क्या सावधान रहें SIGKILL!)

umount-lएक आलसी प्रदर्शन करने का एक विकल्प है। माउंट को फ़ाइल सिस्टम नेमस्पेस से हटा दिया जाएगा (ताकि आप इसे /mnt/Zia/srcउदाहरण के तहत अब और नहीं देखेंगे ), लेकिन यह माउंट रहता है, इसलिए इसे एक्सेस करने वाले प्रोग्राम ऐसा करना जारी रख सकते हैं। जब अंतिम कार्यक्रम इसे एक्सेस करता है, तो वास्तव में अनमाउंट होगा।

अनमाउंट फेल होने का एक अंतिम निश्चित कारण है, और वह है एनएफएस सर्वर डाउन होना। यहां आप उपयोग कर सकते हैं umount -f, लेकिन यदि आप ऐसा करते हैं तो आप डेटा हानि का जोखिम उठाते हैं। (क्लाइंट ने लिखा हो सकता है कि सर्वर द्वारा अभी तक पुष्टि नहीं की गई है, और उन लिखों को खारिज कर दिया जाएगा। हालांकि, एप्लिकेशन को पहले ही बता दिया गया है कि लेखन सफल है।)


4
ध्यान दें कि fuser -kहै अत्यंत जोखिम भरा, के रूप में आप इसे रूट के रूप में करने जा रहे हैं और यदि आप नहीं कर रहे हैं बहुत यकीन है कि जो की प्रक्रियाओं को मार डाला हो जाएगा बंद आप एक लापरवाह कमांड के साथ सही मायने में शानदार क्षति कर सकते हैं ...
Shadur

1
@ शार्दुर, उम्मीद है कि आप इसे पहले ही -kविकल्प के बिना चला चुके हैं , इसलिए आपको पता चल जाएगा कि आप किन प्रक्रियाओं को मारने जा रहे हैं। लेकिन मैं एक चेतावनी में जोड़ दूँगा।
derobert

1
fuser -vmदिखाया "कर्नेल माउंट"। systemctl stop opt.mountमैनुअल के बजाय करना था umount
लक्रव

2
किसी कारण से umount -f मेरे लिए काम नहीं करता है, लेकिन umount -l पूरी तरह से काम करता है।
फिरोज

नोट के बारे में umount -fऔर NFS के लिए धन्यवाद । मेरा मुद्दा एनएफएस से संबंधित था जहां मेरी देव मशीनों ने आईपी बदल दिए और मुझे हटाए गए शेयर नहीं मिल सके।
एरिक

19

आपको उपयोग करना चाहिए:

sudo umount -l <path>

7
Idea, मुझे नहीं पता कि मूर्खतापूर्ण व्यक्ति इसे क्या कर सकता है। -lवास्तव में उपयोग करने के लिए जब भी विकल्प है -fकाम नहीं करता।
हाय-एंजेल

@ हाय-एंजेल क्योंकि यह वह नहीं है जो ओपी पूछ रहा है?
xhienne

@xheinne स्टैक एक्सचेंज केवल एक बेवकूफ बॉट जैसे प्रश्न का उत्तर देने के बारे में नहीं है, यह उत्तर सहायक है। बहुत से लोग Google खोज से भी आते हैं। मुझे व्यक्तिगत रूप से यह मददगार लगा। Op shoudl उस उत्तर को स्वीकार करता है जिसे वह प्रासंगिक है, जो स्वीकार करता है कि बटन क्यों है।
user1735921

6

एक और वॉल्यूम एक वॉल्यूम के ऊपर रखा गया है जिसे हम अनमाउंट करना चाहते हैं:

mountआदेश आप जानते हैं कि सभी घुड़सवार संस्करणों अगर (सिवाय तर्क है और न ही विकल्प के बिना invoqued की सुविधा देता है -v)। आपके पास थोड़ा सा पर्ल जोड़कर सक्रिय माउंटपॉइंट की एक सूची हो सकती है:

mount | perl -pe 's/.*on (\S+) type.*/\1/'

फिर, बस उस मॉनपॉइंट पर ग्रेप करें, जिसमें से आप अनमाउंट करना चाहते हैं और आपको पता चल जाएगा कि क्या किसी एक के ऊपर फाइल सिस्टम हैं।

mount | perl -pe 's/.*on (\S+) type.*/\1/' | grep '/mnt/dir/'

फिर आपके पास दो उपाय हैं । फ़ाइल सिस्टम को या तो अनमाउंट करें, या उन्हें mount --move olddir newdirकर्नेल के साथ स्थानांतरित करें (2.5.1)


1
हाँ धन्यवाद। / etc / mtab और / proc / mounts भी संभव हैं।

आह यह सही है, मैं हमेशा उन लोगों को भूल गया। मान लीजिए कि "माउंट" टाइप करने के लिए कम वर्णों की आवश्यकता होती है (लेकिन निष्पादन के लिए अधिक संसाधन?)
मावरोन

1
मेरे पास एक बाहरी यूएसबी स्टोरेज डिवाइस है "स्थायी रूप से" मेरे लैपटॉप पर एक निश्चित निर्देशिका पर मुहिम की जाती है, कभी-कभी केबल गलती से डिस्कनेक्ट हो जाती है। जब तक मैंने इस उत्तर को नहीं पढ़ा, तब तक निर्देशिका ("डिवाइस व्यस्त" के कारण) पर डिवाइस को रिमूव करना एक बड़ा दर्द था। अब मैं माउंट - पुराने पुराने न्यूडिर का उपयोग करना जानता हूं। धन्यवाद।
सिल्वियो लेवी

3

खुली फ़ाइलें

खुली फाइलों के साथ प्रक्रियाएं सामान्य अपराधी हैं। उन्हें प्रदर्शित करें:

lsof +f -- <mountpoint or device>

/dev/<device>इसके बजाय का उपयोग करने का एक फायदा है /mountpoint: एक के बाद एक माउंटपॉइंट गायब हो जाएगा umount -l, या यह एक ओवरलैड माउंट द्वारा छिपाया जा सकता है।

fuserभी इस्तेमाल किया जा सकता है, लेकिन मेरे दिमाग lsofमें एक अधिक उपयोगी आउटपुट है। हालांकि fuserयह तब उपयोगी होता है जब यह आपके ड्रामा को पैदा करने वाली प्रक्रियाओं को मारने की बात करता है ताकि आप अपने जीवन के साथ आगे बढ़ सकें।

सूची फ़ाइलों पर <mountpoint>(ऊपर चेतावनी देखें):

fuser -vmM <mountpoint>

लिखने के लिए खुलने वाली फाइलों के साथ इंटरएक्टिवली केवल प्रक्रियाओं को मारें:

fuser -vmMkiw <mountpoint>

केवल पढ़ने के बाद ( mount -o remount,ro <mountpoint>), शेष सभी प्रक्रियाओं को मारने के लिए सुरक्षित (r) है:

fuser -vmMk <mountpoint>

mountpoints

अपराधी ही कर्नेल हो सकता है। जिस फाइलसिस्टम पर आप प्रयास कर रहे हैं, उस पर एक और फाइलसिस्टम umountशोक पैदा करेगा। इससे जाँच करें:

mount | grep <mountpoint>/

लूपबैक माउंट के लिए, इसका आउटपुट भी जांचें:

losetup -la

अनाम इनोडेस (लिनक्स)

अनाम इनोड्स द्वारा बनाया जा सकता है:

ये सबसे मायावी प्रकार के पोकेमॉन हैं, और lsof's TYPEकॉलम में दिखाई देते हैं a_inode(जो कि lsofमैन पेज में अनडूम्ड है )।

वे इसमें दिखाई नहीं देंगे lsof +f -- /dev/<device>, इसलिए आपको इसकी आवश्यकता होगी:

lsof | grep a_inode

अनाम इनकोड धारण करने वाली प्रक्रियाओं को मारने के लिए, देखें: वर्तमान इनऑटाइज़ घड़ियों (पथनाम, पीआईडी) को सूचीबद्ध करें


1

सवाल यह है कि अगर एनएफएस एक निर्देशिका का उपयोग करने के लिए जाँच करने के लिए कैसे जो अभी भी अनुत्तरित है।

मेरे पास केवल यही है:

जांचें कि क्या nfsd चल रहा है:

pidof nfsd

क्लाइंट द्वारा माउंटेड निर्देशिकाएं दिखाएं:

showmount -a

और showmountw / o तर्क केवल क्लाइंट होस्ट दिखाता है, भले ही वे ऑफ लाइन हों। मेरा मानना ​​है कि यह एनएफएस का एक विशेष व्यवहार है।


1

मेरे लिए, मुद्दा यह था कि मैं एक से अधिक बार (ssh के माध्यम से) लॉग इन किया गया था और एक लॉगिन पर मैं कमांड प्रॉम्प्ट पर था जहां pwd माउंट-पॉइंट के अधीनस्थ फ़ोल्डर के अंदर था।

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