umount: डिवाइस व्यस्त है। क्यों?


171

जब umount /pathमैं दौड़ रहा हूँ:

umount: /path: device is busy.

फाइलसिस्टम विशाल है, इसलिए lsof +D /pathयथार्थवादी विकल्प नहीं है।

lsof /path, lsof +f -- /pathऔर fuser /pathसभी कुछ भी नहीं लौटाते हैं। fuser -v /pathदेता है:

                  USER        PID ACCESS COMMAND
/path:            root     kernel mount /path

जो सभी अप्रयुक्त माउंटेड फ़ाइल सिस्टम के लिए सामान्य है।

umount -lऔर umount -fमेरी स्थिति के लिए पर्याप्त नहीं है।

मुझे कैसे पता चलेगा कि कर्नेल को क्यों लगता है कि यह फाइल सिस्टम व्यस्त है?


11
क्या माउंटपॉइंट पथ पर आपके शेल की वर्तमान निर्देशिका है?
लॉरेंस

नहीं। फ़्यूज़र ऐसा कहेंगे।
ओले तांगे

12
आप वास्तव में चाहते हैं fuser -vm /path...
derobert

5
Umount लिए --forceअनमाउंट करने के लिए कड़ी मेहनत करनी होगी -vया -vvvऔर भी अधिक माउंट के साथ समस्या यह है कि क्या reaveal होगा। तो कोशिश करें:umount -vvv --force /babdmount
gaoithe

जवाबों:


139

ऐसा लगता है कि मेरे मुद्दे का कारण nfs-kernel-serverनिर्देशिका निर्यात करना था। nfs-kernel-serverशायद सामान्य खुली फ़ाइलों के पीछे चला जाता है और इस तरह से सूचीबद्ध नहीं है lsofऔर fuser

जब मैं बंद कर दिया nfs-kernel-serverमैं कर सकता umountनिर्देशिका।

मैंने अब तक के सभी समाधानों के उदाहरणों के साथ एक पृष्ठ बनाया है: http://oletange.blogspot.com/2012/04/umount-device-is-busy-why.html


54
अपने समाधान को लागू करने पर छोड़ने के बजाय अपने स्वयं के प्रश्न का उत्तर देने के लिए धन्यवाद। आपके जवाब से मुझे एक समान निर्यात किए गए NFS शेयर को छाँटने में मदद मिली।
जेफ वेलिंग

7
यदि आप फाइलसिस्टम पर लूपबैक डिवाइस सेट करते हैं तो यह भी समस्या हो सकती है - उदाहरण के लिए यदि / dev / loop0 / path में फाइल द्वारा समर्थित है।
बीकानेर

1
मुझे पहले करना पड़ा sudo service samba stop, आपके जवाब से वास्तव में मदद मिली!
मलत

1
इस पोस्ट ने मुझे याद दिलाया कि यह पता लगाने की कई घंटों की कोशिश के बाद मैं nfs सेवा चला रहा था। RHEL6 / CentOS6 में, का उपयोग करें sudo service nfs stopऔर आप (नहीं) को भी sudo exportfs -uunexport करने की आवश्यकता हो सकती है । तब तक sudo exportfs -rऔर sudo service nfs startफिर से निर्यात करने और सेवा को पुनरारंभ करने के लिए याद रखें ।
code_dredd

1
मेरे मामले में यह जरूरी नहीं था कि nfs सर्वर को बंद कर दिया जाए, सिर्फ exportfs -uसवाल में निर्देशिका।
कानून

42

ऊपर ब्रूसक्रान की टिप्पणी में जोड़ने के लिए , इस समस्या के मेरे प्रकट होने का कारण अभी एक बासी लूपबैक माउंट था। मैं पहले से ही fuser -vm <mountpoint>/ का आउटपुट चेक कर चुका हूँ lsof +D <mountpoint>, mountऔर जाँच कर चुका हूँ cat /proc/mountsकि कुछ पुराने nfs-कर्नेल-सर्वर चल रहे थे, कोटा बंद कर दिया, प्रयास किया (लेकिन असफल रहा) umount -f <mountpoint>और सब छोड़ दिया लेकिन आखिरकार आउटपुट की जाँच करने से पहले 924 दिनों के अपटाइम को छोड़ने के लिए खुद को इस्तीफा दे दिया। की losetupऔर दो बासी कॉन्फ़िगर किया गया बल्कि नहीं घुड़सवार लूपबैक खोजने:

parsley:/mnt# cat /proc/mounts 
rootfs / rootfs rw 0 0
none /sys sysfs rw,nosuid,nodev,noexec 0 0
none /proc proc rw,nosuid,nodev,noexec 0 0
udev /dev tmpfs rw,size=10240k,mode=755 0 0
/dev/mapper/stuff-root / ext3 rw,errors=remount-ro,data=ordered 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=755 0 0
usbfs /proc/bus/usb usbfs rw,nosuid,nodev,noexec 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,nosuid,noexec,gid=5,mode=620 0 0
fusectl /sys/fs/fuse/connections fusectl rw 0 0
/dev/dm-2 /mnt/big ext3 rw,errors=remount-ro,data=ordered,jqfmt=vfsv0,usrjquota=aquota.user 0 0

फिर

parsley:/mnt# fuser -vm /mnt/big/
parsley:/mnt# lsof +D big
parsley:/mnt# umount -f /mnt/big/
umount2: Device or resource busy
umount: /mnt/big: device is busy
umount2: Device or resource busy
umount: /mnt/big: device is busy

parsley:/mnt# losetup -a    
/dev/loop0: [fd02]:59 (/mnt/big/dot-dropbox.ext2)
/dev/loop1: [fd02]:59 (/mnt/big/dot-dropbox.ext2)

parsley:/mnt# losetup -d /dev/loop0
parsley:/mnt# losetup -d /dev/loop1
parsley:/mnt# losetup -a
parsley:/mnt# umount big/
parsley:/mnt#

एक जेंटू फोरम पोस्ट भी संभावित अपराधी के रूप में स्वैपफाइल्स को सूचीबद्ध करता है; हालाँकि इन दिनों फ़ाइलों की अदला-बदली शायद बहुत कम होती है, लेकिन इसका आउटपुट जाँचने के लिए चोट नहीं पहुँचा सकती है cat /proc/swaps। मुझे यकीन नहीं है कि क्या कोटा कभी भी किसी अनहोनी को रोक सकता है - मैं तिनके पर जकड़ रहा था।


12
सभी 924 दिनों के अपटाइम का मतलब है कि आपको अपने कर्नेल पैच को अपडेट करने की आवश्यकता है :-)
w00t

+1 स्वैप फ़ाइलों का उल्लेख करने के लिए, वे अनमाउंटिंग को ब्लॉक करते हैं, और यदि आप उन्हें सीधे चेक नहीं कर रहे हैं तो वे बहुत ही अवांछनीय हैं।
पी। सेपर

22

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

lsof | grep '/path'

1
lsof / पथ केवल पथ के माध्यम से दिखता है।
ओले तांगे

7
मैंने कहा नहीं lsof /path, मैंने कहा lsof | grep '/path'। अंतर यह है कि बिना किसी तर्क के lsof किसी प्रकार की कैश टेबल का उपयोग करके सभी खुली फाइलों को दिखाता है, और इसे खोजने के लिए grep बहुत तेज है। Lsof के साथ जिन चीजों की आपने कोशिश की है, वे इसे फाइल सिस्टम के माध्यम से स्कैन करते हैं, जिसमें एक लंबा समय लगता है।
कालेब

1
जैसा मैंने कहा: lsof /pathकेवल मार्ग को देखता है। यह हर एक फाइल को नहीं देखता है। यह अक्सर lsof | grep /path(मेरे अवैज्ञानिक परीक्षण की तुलना में 20 गुना अधिक तेजी से YMMV था) की तुलना में यह बहुत तेज है क्योंकि यह सभी खुली फाइलों को नहीं देखता है, बल्कि उस पथ के लिए केवल फाइलों को देखता है।
ओले तांगे

मुझे विश्वास नहीं है कि तकनीकी अंतर क्या है, लेकिन एक बासी एनएफएस माउंट की जांच करते समय, lsof /pathकुछ भी नहीं मिला , जबकि lsof | grep /pathमुझे वह प्रक्रिया दिखाई गई जो खुली फाइलों को पकड़ रही थी और मुझे वॉल्यूम को अनमाउंट करने से रोक रही थी।
dpw

20

मेरे लिए, अपमानजनक प्रक्रिया एक डीओएम था जो एक चुरोट में चल रहा था। क्योंकि यह एक चौराहे पर था, lsofऔर fuserइसे नहीं मिलेगा।

यदि आपको संदेह है कि आपके पास एक चुरोट में कुछ बचा हुआ है, sudo ls -l /proc/*/root | grep chrootतो अपराधी (चेरोट के मार्ग के साथ "चिरोट" को बदल देगा)।


1
अच्छा है, और FreeBSD में मैंने यह किया है: sudo ls -l /proc/*/status | grep HOSTजहां HOST जेल का होस्टनाम है
JGurtz

1
मेरे सिस्टम पर (मिंट क़ायना) lsof /mountpointऔर fuser /mountpointदोनों को एक प्रक्रिया मिल जाती है, भले ही उसे काट दिया जाए।
ओले तांगे

9

खुली फ़ाइलें

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

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

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


5

फ़्यूज़र के लिए पीआईडी ​​पर रिपोर्ट करने के लिए एक माउंट खुला रखना जिसका आपको उपयोग करना है

fuser -m /path

2
सच है, लेकिन अप्रासंगिक: lsof /pathपीआईडी ​​की समान सूची प्रदान करता है fuser -m /path
जिल्स

fuser -M /path/pathमाउंटपॉइंट है या नहीं, इसकी जांच करेंगे ।
user3804598

5

हमारे पास एक स्वामित्व प्रणाली है जहां रूट फाइल सिस्टम सामान्य रूप से केवल-पढ़ने के लिए है। कभी-कभी, जब फ़ाइलों को कॉपी करना होता है, तो यह लिखा-पढ़ी जाती है:

mount -oremount,rw /

और फिर वापस लौटा दिया गया:

mount -oremount,ro /

इस बार हालांकि, mountदे रखा mount: / is busyत्रुटि। यह एक फाइल के लिए एक ओपन डिस्क्रिप्टर रखने वाली प्रक्रिया के कारण था , जिसे कुछ कमांड द्वारा प्रतिस्थापित किया गया था, जिसे फाइल सिस्टम पढ़ने-लिखने पर निष्पादित किया गया था। lsof -- /आउटपुट से महत्वपूर्ण रेखा होती है (नाम बदल दिए गए हैं):

replicate  1719 admin DEL REG 8,5  204394 /opt/gns/lib/replicate/modules/md_es.so

DELआउटपुट में सूचना । बस हटाए गए फ़ाइल पर होल्डिंग प्रक्रिया को पुनरारंभ करने से समस्या हल हो गई।


3
तो सारांश यह है: एक फ़ाइल को खोलने वाली प्रक्रिया को हटा दिया गया था। अच्छा इनपुट।
ओले तांगे

4

lsofऔर fuserमुझे कुछ भी नहीं दिया।

मेरे द्वारा हर बार परिवर्तन करने के बाद .old और सिस्टम को रिबूट करने की एक संभावित प्रक्रिया के बाद मैंने एक विशेष निर्देशिका (पोस्टफिक्स से संबंधित) जो जिम्मेदार थी, पाया।

यह पता चला कि मैं एक बार से एक सिमलिंक कर दिया था /var/spool/postfixकरने के लिए /disk2/pers/mail/postfix/varspoolआदेश डिस्क एक SDCARD आधारित जड़ फाइल सिस्टम (Sheeva प्लग) पर लिखता कम करने के लिए।

इस सिम्लिंक के साथ, सेवाओं postfixऔर dovecotसेवाओं (दोनों के ps auxसाथ-साथ netstat -tuanpसंबंधित कुछ भी नहीं दिखा) को रोकने के बाद भी मैं सक्षम नहीं था unmount /disk2/pers

जब मैंने सिम्लिंक को हटा दिया postfixऔर dovecotनई dirs पर सीधे इंगित करने के लिए फ़ाइलों को कॉन्फ़िगर और कॉन्फ़िगर किया, तो /disk2/pers/मैं सफलतापूर्वक सेवाओं और unmountनिर्देशिका को रोकने में सक्षम था ।

अगली बार मैं इसके आउटपुट पर अधिक बारीकी से देखूंगा:

ls -lR /var | grep ^l | grep disk2

उपरोक्त कमांड एक निर्देशिका ट्री (यहां शुरू /var) में सभी प्रतीकात्मक लिंक को पुन: सूचीबद्ध करेगा और उन नामों को फ़िल्टर करेगा जो एक विशिष्ट लक्ष्य माउंट बिंदु (यहां डिस्क 2) को इंगित करते हैं।


3

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

बस मैंने सोचा कि मैं अपना संकल्प साझा करूँगा।


1

आज समस्या एक खुले सॉकेट (विशेष रूप से tmux) की थी:

mount /mnt/disk
export TMPDIR=/mnt/disk
tmux
<<detatch>>
umount /mnt/disk
umount: /mnt/disk: device is busy.
lsof | grep /mnt/disk
tmux      20885             root    6u     unix 0xffff880022346300        0t0    3215201 /mnt/disk/tmux-0/default

1

मेरे पास मेरे माउंट के नीचे कुछ जोड़े bindऔर overlayमाउंट हैं जो मुझे रोक रहे थे, उस माउंट-पॉइंट के लिए टैब पूरा होने की जाँच करें जिसे आप अनमाउंट करना चाहते हैं। मुझे संदेह है कि यह विशेष रूप से ओवरले माउंट था, लेकिन बाइंड भी हो सकता था


1

यह उत्तर की तुलना में अधिक उपयोगी है, लेकिन मैं इसे किसी ऐसे व्यक्ति की मदद करने के मामले में पोस्ट कर रहा हूं।

मेरे मामले में मैं LVM को संशोधित करने की कोशिश कर रहा था क्योंकि मैं / var विभाजन को बड़ा बनाना चाहता था, इसलिए मुझे इसे umount करने की आवश्यकता थी। मैंने इस पोस्ट में सभी टिप्पणियों और उत्तर की कोशिश की (सभी को धन्यवाद और विशेष रूप से @ ole-tange उन्हें इकट्ठा करने के लिए) और फिर भी "डिवाइस व्यस्त है" त्रुटि मिली।

मैंने 0 रनलेवल में निर्दिष्ट क्रम में अधिकांश प्रक्रियाओं को मारने की कोशिश की, बस मेरे मामले में आदेश प्रासंगिक था, लेकिन इससे भी मदद नहीं मिली। तो मैंने जो किया वह मुझे एक कस्टम रनवे (नए chkconfig --level कमांड्स में chkconfig के आउटपुट को संयोजित करना) बनाना था जो कि 1 (सिंगल यूजर मोड) के समान होगा लेकिन नेटवर्क क्षमताओं (ssh नेटवर्क और xinet के साथ) के समान होगा।

जैसा कि मैं redhat का उपयोग कर रहा था, रनवेल 4 को "अप्रयुक्त / उपयोगकर्ता परिभाषित" के रूप में चिह्नित किया गया है, इसलिए मैंने उस एक का उपयोग किया, और init 4 मेरे मामले में यह ठीक था जैसा कि मुझे किसी भी मामले में सर्वर को रिबूट करने की आवश्यकता थी, लेकिन शायद यह मामला होगा किसी को भी डिस्क tweaking।

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