"डिवाइस या संसाधन व्यस्त" कैसे प्राप्त करें?


229

मैंने rm -rfएक फ़ोल्डर की कोशिश की , और "डिवाइस या संसाधन व्यस्त" मिला।

विंडोज में, मैंने इसे हल करने के लिए LockHunter का उपयोग किया होगा। लिनक्स के बराबर क्या है? (कृपया उत्तर के रूप में एक सरल "यह अनलॉक करें" विधि दें, और इस तरह के लेख को पूरा न करें । हालांकि वे उपयोगी हैं, मैं वर्तमान में सिर्फ ASimpleMethodThatWorks ™ में दिलचस्पी रखता हूं)


5
धन्यवाद यह आसान था - मैं लिनक्स से विंडोज पर आ रहा था, lsof - LockHunter के बराबर की तलाश कर रहा था।
सोनिया हैमिल्टन

3
क्या बकवास है? यूनिक्स आपको विंडोज जैसी खुली फाइलों को हटाने से नहीं रोकता है। यही कारण है कि आप अपने पूरे सिस्टम को चलाकर हटा सकते हैं rm -rf /... यह खुशी से हर एक फ़ाइल को हटा देगा, जिसमें / बिन / आरएम भी शामिल है।
Psusi

1
@psusi, यह गलत है। आपके पास या तो जानकारी का एक बुरा स्रोत है या बस सामान बना रहे हैं। विंडोज की तरह लिनक्स में भी फाइल और डिवाइस लॉकिंग है। यह एक तरह से टूटा हुआ है, हालांकि। 0pointer.de/blog/projects/locking.html
foobarbecue

1
@foobarbecue, आम तौर पर वे केवल सलाहकार ताले होते हैं और मैन पेज कम से कम इंगित करने के लिए लगता है कि वे केवल पढ़ने / लिखने के लिए हैं, अनलिंक नहीं।
Psusi

जवाबों:


232

वह टूल lsofजो आप चाहते हैं , जो सूची ओपन फाइल्स के लिए है

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

lsof +D /path

के तहत फाइल सिस्टम के माध्यम से फिर से उठना होगा /path, इसलिए बड़े निर्देशिका के पेड़ों पर इसे करने से सावधान रहें।

एक बार जब आपको पता चल जाता है कि किन प्रक्रियाओं में फाइलें खुली हैं, तो आप उन ऐप्स से बाहर निकल सकते हैं, या उन्हें kill(1)कमांड से मार सकते हैं ।


46
यदि कोई परिणाम नहीं थे तो क्या होगा?
मरीन

22
@marines: जाँच करें कि क्या एक और फाइल सिस्टम नीचे मुहिम की जाती है /path। यह छिपी हुई "खुली फ़ाइलों" का एक कारण है।
camh

2
lsof सीधे पथ पर काम नहीं करता है। तो मूल रूप से पथ स्थान पर जाने की जरूरत है और फिर lsof busy_file चलाएं फिर सभी प्रक्रिया को
मारें

4
lsofमेरे लिए कुछ नहीं करने के लिए लगता है: lsof storage/logs/laravel.logकुछ भी नहीं लौटा, और ऐसा ही किया lsof +D storage/logs/umountके साथ जवाब दिया not mounted
रियान

1
बस @camh जवाब पर विस्तृत करने के लिए: का उपयोग करें mount | grep <path>। पता चलता है कि किसी भी /dev/<abc>पर मुहिम शुरू की जा सकती है <path>। उपयोग करें sudo umount -lf /dev/<abc>और फिर निकालने का प्रयास करें <path>। मेरे लिये कार्य करता है। धन्यवाद @camh
विकास गोएल

107

कभी-कभी यह बढ़ते मुद्दों का परिणाम होता है, इसलिए मैं उस फ़ाइल सिस्टम या निर्देशिका को अनमाउंट कर दूंगा जिसे आप हटाने का प्रयास कर रहे हैं:

umount / पथ


5
चार बजने में पंद्रह मिनट हैं। धन्यवाद आदमी, तुमने मेरी रात बचाई। प्रफुल्लित। एक पंक्ति पर - इतना व्यर्थ समय -.- '
Aiyion.Prime

1
मेरी समस्या एक लॉग डायरेक्टरी थी जिसे / dev / mapper / vg00-root के रूप में रखा गया था
Spikolynn

1
मुझे विंडर्स पर एक समान जाम से बाहर निकलने में मदद की।
जॉन

1
मेरे मामले में, जेनकिन्स ने टास्क
एबॉर्ट के

1
मेरे मामले में, ubuntu डेस्कटॉप के साथ काम नहीं किया !! धन्यवाद
JRichardsz

14

मैं fuserइस तरह की चीज के लिए इस्तेमाल करता हूं । यह सूचीबद्ध करेगा कि कौन सी प्रक्रिया किसी माउंट के भीतर फ़ाइल या फ़ाइलों का उपयोग कर रही है।


fuserकेवल उस विशिष्ट मामले में मदद करता है जब आप किसी फ़ाइल सिस्टम को अनमाउंट करना चाहते हैं। यहां समस्या यह है कि किसी विशिष्ट फ़ाइल का उपयोग करना क्या है।
गाइल्स

@ गिल्स: फाइलों के लिए भी काम करता है।
बिलथोर

क्षमा करें, गलत आपत्ति: fuserयहाँ मदद नहीं करता है क्योंकि समस्या एक निर्देशिका ट्री में सभी खुली फ़ाइलों को खोजने के लिए है। आप lsofसभी फ़ाइलों को दिखाने और फ़िल्टर करने या इसे फिर से बनाने के लिए कह सकते हैं ; fuserइस तरह की कोई विधा नहीं है और इसे हर फाइल पर लागू करने की जरूरत है।
गिल्स

@ गिल्स: fuserकार्य सूचियों करेंगे। कोशिश करें fuser /var/log/*, अगर कोई लॉग खुला है तो यह बताएगा कि कौन सा और किसके पास खुला है। यदि एक साधारण वाइल्डकार्ड काम नहीं करेगा, तो उसके findसाथ या उसके बिना काम नहीं xargsचलेगा।
बिलथोर

1
lsofमेरे रास्ते में नहीं fuserथा, जबकि मुझे मारने के लिए अपमानजनक प्रक्रिया आईडी खोजने की अनुमति थी, इसलिए + 1 + धन्यवाद।
स्टेव्सलिवा

12

यहाँ समाधान है:

  1. डायरेक्टरी में जाकर टाइप करें ls -a
  2. आपको एक .xyzफ़ाइल मिलेगी
  3. vi .xyz और फ़ाइल की सामग्री क्या है, इस पर ध्यान दें
  4. ps -ef | grep username
  5. आप 8 वें कॉलम (अंतिम पंक्ति) में .xyz सामग्री देखेंगे
  6. kill -9 job_ids - जहां job_ids 8 वीं कॉलम में संगत त्रुटि के कारण 2 कॉलम का मान है
  7. अब फ़ोल्डर या फ़ाइल को हटाने का प्रयास करें।

4
यह जानना दिलचस्प होगा कि वे रहस्यमय फाइलें कहां से आ रही हैं।
जॉन डब्ल्यूएच स्मिथ

9

मेरे पास यही मुद्दा था, @camh सिफारिश के साथ शुरू किए गए एक-लाइनर का निर्माण:

lsof +D ./ | awk '{print $2}' | tail -n +2 | xargs kill -9

awkआदेश पीआईडी की पकड़ लेता है। tail"पीआईडी": आदेश परेशान पहली प्रविष्टि से छुटकारा मिलता है। मैंने -9मार डाला, दूसरों के पास सुरक्षित विकल्प हो सकते हैं।


1
इसे और अधिक सार्वभौमिक बनाने के लिए आप लॉग / के बजाय वर्तमान निर्देशिका के लिए उपयोग कर सकते हैं। /
user2589273

अच्छी बात, @ user2589273 अपडेट किया गया।
चॉयलटन बी। हिगिनबॉटम

5

मुझे यह समस्या तब हुई जब एक स्वचालित परीक्षण ने एक रैमडिस्क बनाया। अन्य उत्तरों में सुझाए गए आदेश, lsofऔर fuser, बिना किसी मदद के थे। परीक्षणों के बाद मैंने इसे अनमाउंट करने की कोशिश की और फिर फ़ोल्डर को हटा दिया। मैं उम्र के लिए वास्तव में उलझन में था क्योंकि मैं इससे छुटकारा नहीं पा सकता था - मैं "डिवाइस या संसाधन व्यस्त" प्राप्त करता रहा !

दुर्घटना से मुझे पता चला कि कैसे एक रैमडिस्क से छुटकारा पाने के लिए। मुझे इसे उसी समय को अनमाउंट करना था जो मैंने mountकमांड चलाया था , अर्थात sudo umount path

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

उम्मीद है कि यह किसी और की मदद कर सकता है जो इस समस्या को पार करता है!


5

मैं उन सर्वरों पर अक्सर अनुभव करता हूं जिनमें एनएफएस नेटवर्क फाइल सिस्टम हैं। मैं यह मान रहा हूं कि फाइलसिस्टम के साथ इसका कुछ लेना-देना है, क्योंकि फाइलें आम तौर पर पसंद की जाती हैं .nfs000000123089abcxyz

मेरा विशिष्ट समाधान फ़ाइल की मूल निर्देशिका का नाम बदलना या स्थानांतरित करना है, फिर एक या दो दिन बाद वापस आना होगा और फ़ाइल को स्वचालित रूप से हटा दिया जाएगा, जिस बिंदु पर मैं निर्देशिका को हटाने के लिए स्वतंत्र हूं।

यह आमतौर पर निर्देशिकाओं में होता है जहां मैं सॉफ्टवेयर लाइब्रेरी स्थापित या संकलित कर रहा हूं।


4

ऊपर प्रभात के सवाल को टालते हुए, मैंने मैकोस हाई सिएरा में इस मुद्दे को रखा था जब मैंने एक एनएफ़सीएस प्रक्रिया को फंसे रखा था, तो रिबूटिंग ने इसे हल कर दिया, लेकिन यह

ps -ef | grep name-of-busy-dir

मुझे प्रक्रिया और पीआईडी ​​(कॉलम दो) दिखाया।

sudo kill -15 pid-here

ठीक कर दिया।


इसने मेरे लिए भी काम किया। क्या -15?
ओर्का

3

यदि आपके पास सर्वर सुलभ है, तो प्रयास करें

सर्वर से उस डायर को हटाना

या, umount करें और फिर से माउंट करें, कोशिश करें umount -l: आलसी umount अगर सामान्य umount पर किसी भी मुद्दे का सामना कर रहा है।

मुझे भी यह समस्या थी

lsof +D path : कोई आउटपुट नहीं देता है

ps -ef : कोई प्रासंगिक जानकारी नहीं देता है

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