एक योनि फाइल को हटाकर मैं देख रहा हूं ।nfs0000000000b869e300000001


15

मैंने एक फ़ाइल निकाली और अब मैं देख रहा हूँ:

$ ls
total 64
-rw-rw-r-- 1 502 17229 Sep 17 16:42 page_object_methods.rb
drwxrwxr-x 7 502   238 Sep 18 18:41 ../
-rw-rw-r-- 1 502 18437 Sep 18 18:41 new_page_object_methods.rb
-rw-r--r-- 1 502 16384 Sep 18 18:42 .nfs0000000000b869e300000001
drwxrwxr-x 5 502   170 Sep 21 13:48 ./
13:48:11 *vagrant* ubuntu-14 selenium_rspec_conversion

और अगर मैं इसे हटाने की कोशिश करता हूं:

$ rm .nfs0000000000b869e300000001
rm: cannot remove ‘.nfs0000000000b869e300000001’: Device or resource busy

यह क्या दर्शाता है? मुझे क्या करना चाहिए


यह समस्या, इस सूचक-ध्वनि-सेवा बग के साथ संयुक्त है जहां 100s प्रक्रियाएं फाइलों को खुला रखती हैं, इन जैसे isues के साथ संयुक्त जहां ~ /। Cache / upstart लॉग बहुत बड़े हो जाते हैं और फिर संकुचित होते हैं, मेरे लिए बहुत जगह ले रहे थे। कॉर्पोरेट एनएफएस ड्राइव जिसमें मेरा घर निर्देशिका शामिल है। जोड़कर उसके चारों ओर काम किया करने के लिए । ps -Af | grep 'indicator-services-start' | awk '{ print $2 }' | xargs killcrontab -e
एंड्रेस रिओप्रियो

जवाबों:


14

किसी फ़ाइल को एक प्रक्रिया द्वारा खोले जाने पर हटाया जा सकता है। जब ऐसा होता है, निर्देशिका प्रविष्टि हटा दी जाती है, लेकिन फ़ाइल स्वयं (इनोड और सामग्री) पीछे रहती है; फ़ाइल केवल तभी डिलीट की जाती है, जब उसमें और लिंक न हों और यह किसी भी प्रक्रिया से नहीं खुली हो।

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

दोनों को एक साथ रखें: क्या होता है जब कोई फ़ाइल क्लाइंट द्वारा खोली जाती है, और हटाई जाती है? फ़ाइल को नाम रखने की आवश्यकता है, ताकि जिस क्लाइंट के पास यह खुला है वह अभी भी इसे एक्सेस कर सके। लेकिन जब कोई फ़ाइल हटा दी जाती है, तो यह उम्मीद की जाती है कि उस नाम से कोई और फ़ाइल बाद में मौजूद न हो। इसलिए एनएफएस सर्वर एक खुली फ़ाइल को हटाने का नाम बदल देते हैं: फ़ाइल का नाम बदल दिया जाता है.nfs… ( .nfsइसके बाद अक्षरों और अंकों का एक स्ट्रिंग)।

आप इन फ़ाइलों को हटा नहीं सकते हैं (यदि आप कोशिश करते हैं, तो यह सब होता है कि एक नया .nfs…एक अलग प्रत्यय के साथ प्रकट होता है)। वे अंततः चले जाएंगे जब फ़ाइल को खोलने वाला क्लाइंट इसे बंद कर देता है। (यदि क्लाइंट फ़ाइल को बंद करने से पहले गायब हो जाता है, तो सर्वर नोटिस तक कुछ समय लग सकता है।)


2

एक अन्य प्रश्न पर उपयोगकर्ता @mtak सुझाव देता है:

You could try runningfuser /path/to/.nfsto check which process is using the .nfs file. – mtak May 2 '14 at 9:13

^ ^ ^ ^ ^ ^ ^ काम करता है।

जैसे

$ rm -rf ~/Downloads
rm: cannot remove ‘/nfshome/x/Downloads’: Directory not empty
$ ls -alstr ~/Downloads
total 38864
  972 -rw-r--r--   1 x users   988438 Dec 20  2016 .nfs00000000018d307a00000369
31812 -rw-r--r--   1 x users 32503812 Dec 20  2016 .nfs00000000018d307f0000036b
  636 drwx--x--x 134 x y   647168 Aug 28 10:37 ..
  240 drwxr-xr-x   2 x y   241664 Aug 28 10:43 .
$ rm -rf ~/Downloads
rm: cannot remove ‘/na-homes/x/Downloads/.nfs00000000018d307a00000369’: Device or resource busy
rm: cannot remove ‘/na-homes/x/Downloads/.nfs00000000018d307f0000036b’: Device or resource busy

$ fuser /nfshome/x/Downloads/.nfs00000000018d307400000367
/nfshome/x/Downloads/.nfs00000000018d307400000367:  8231m
$ ps -elf |grep 8231
0 S x     1493 15153  0  80   0 - 28177 pipe_w 10:55 pts/39   00:00:00 grep --color=auto 8231
0 S x     8231  7660  0  99   - - 481464 poll_s Jul19 ?       00:06:01 /usr/libexec/tracker-extract
$ kill 8231
$ kill 8231 # kill twice to check first kill worked, . . 
            # escalate to kill -9 8231 if first kill didn't work, . . 
            # use sudo or root or other user to kill if ownership prevents kill working.
-bash: kill: (8231) - No such process
$ rm -rf ~/Downloads

$ ls -alstr ~/Downloads/
ls: cannot access /nfshome/x/Downloads/: No such file or directory

वाह! सफलता।

YMMV बेशक। यह एक अलग प्रक्रिया हो सकती है जिसमें फ़ाइल खुली रहती है।

ट्रैकर-एक्सट्रैक्शन प्रक्रिया को मेरे द्वारा मारने के बाद स्वचालित रूप से पुनः आरंभ किया गया था।

यह ट्रैकर-एक्सट्रेक्ट क्या है? (मैं इसे सेंटोस / रेडहैट पर देखता हूं)

/programming/26737900/tracker-extract-and-tracker-store-processes-consuming-huge-amount-of-ram

extra/tracker 1.2.3-1 (gnome)
    All-in-one indexer, search tool and metadata database

1
स्वीकृत उत्तर की तुलना में बहुत अधिक उपयोगी है, क्योंकि यह उपयोगकर्ता को स्थिति को मापने का एक तरीका प्रदान करता है।
chb

1

चूंकि एनएफएस "स्टेटलेस" है, इसलिए फ़ाइल खोलने की UNIX विधि का अनुकरण करने का एक तरीका होना चाहिए और फिर एक खुली फ़ाइलहैंड रखते हुए इसे हटा दें।

किसी भी NFS फ़ाइल कार्रवाई श्रृंखला का कारण बनता है:

open(); seek-last-off(); doit(); close();

चलाया जाना और यही कारण है कि एनएफएस सर्वर रिबूट से बच जाता है।

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

सही ढंग से लागू किए गए फ़ाइलसर्वर प्रत्येक रात एक स्क्रिप्ट चलाएंगे जो ऐसी सभी फ़ाइलों को हटा देता है जो एक सप्ताह से अधिक पुरानी हैं। कारण यह है कि अगर ग्राहक ऐसी फाइल रखते समय रिबूट करता है, तो फाइल हमेशा के लिए बंद रहेगी।


0

कुछ अन्य प्रक्रिया अभी भी फ़ाइल का उपयोग करने की संभावना है (यानी, इसके लिए एक खुला फ़ाइलहैंड है)। या तो फ़ाइल को अनदेखा करें, या lsofउस प्रक्रिया को खोजने की कोशिश करने के लिए उपयोग की तरह या उस फ़ाइल को खोलें (या सब कुछ रिबूट करें!)।


0

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

PS मेरा उत्तर केवल मेरे द्वारा निर्दिष्ट किए गए विज्ञान के लिए मान्य है।

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