एफएस को हटाए गए फ़ाइलों से मुक्त स्थान बताएं


73

क्या अब फ्री डिस्क स्थान को वापस देने के लिए कर्नेल को बताने का एक तरीका है? जैसे कुछ लिखने के लिए / proc /? Ext4 के साथ Ubuntu 11.10 का उपयोग करना।

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

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

मेरे द्वारा किए जाने से ठीक पहले apt-get clean900MB / var / cache / apt / अभिलेखागार में था, अब केवल 108KB है:

# du
108 /var/cache/apt/archives

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

# sync; df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda4             13915072  13304004         0 100% /

कोई सुझाव? मैंने कुछ सेवाओं / प्रक्रियाओं को बंद कर दिया है, लेकिन यह सुनिश्चित करने के लिए सुनिश्चित नहीं है कि डिस्क स्थान को सक्रिय रूप से खाने वाले कैसे हो सकते हैं।

और जानकारी

# dumpe2fs  /dev/sda4
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              884736
Block count:              3534300
Reserved block count:     176715
Free blocks:              422679
Free inodes:              520239
First block:              0
Block size:               4096
Fragment size:            4096

4
फ़ाइल सिस्टम तुरंत स्थान को मुक्त करता है। हालाँकि, एक्स-रे [234] के रूट-आरक्षित ब्लॉक की सुविधा है और कर्नेल खुली फ़ाइलों को कैसे सुरक्षित रखता है, यह खोई हुई जगह का आभास दे सकता है।
hhaamu

यदि आपके पास कई फाइल सिस्टम (पेटेंट) हैं, तो एक में स्थान खाली करना दूसरे में कोई अच्छा काम नहीं करेगा।
वॉनब्रांड

"आरक्षित" 5Go ब्लॉक को खुद को पुनः प्राप्त करने से पहले मैं विभाजन को क्यों भर पा रहा था?
Psddp

जवाबों:


116

lsofयह देखने के लिए जांचें कि क्या फ़ाइलें खुली हुई हैं। अंतरिक्ष को तब तक मुक्त नहीं किया जाएगा जब तक कि वे बंद न हों।

sudo /usr/sbin/lsof | grep deleted

आपको बताएगा कि कौन सी हटाई गई फ़ाइलें अभी भी खुली हुई हैं।


अच्छा। मुझे mysqld/ tmp में कुछ ताले दिखाए, लेकिन apport-gt/ var / lib / apt / सूचियों / आंशिक / जो कि जाहिरा तौर पर जमा होते रहे हैं में विलुप्त फ़ाइलों के कई उपयोग। इसलिए मैं killall apport-gtपहले इसकी जांच कर सकता हूं ।
मार्कोस

1
निकटतम उत्तर के रूप में चिह्नित करना, हालांकि फ़ाइल हैंडल / प्रक्रियाओं का उपयोग करने के तुरंत बाद अंतरिक्ष ने वास्तव में "वापस" नहीं दिया। अन्य कर्नेल / proc / fs- आधारित दृष्टिकोणों की तलाश में।
मार्कोस

18
आप इसका उपयोग भी कर सकते हैं lsof +L1(खुली हुई फ़ाइलों का चयन करें जिन्हें अनलिंक किया गया है)।
मार्टिन फिदो

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

37

lsofहटाए गए, लेकिन खोलने के लिए उपयोग करें , अभी भी अंतरिक्ष की खपत फ़ाइल:

lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome     3446       user  128u      REG              253,2              16400       2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)  

/proc/<pid>/fd/फ़ाइलहैंड में उस cooresponds में प्रविष्टि ढूँढें :

ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

अब, बस cat /dev/nullएफडी में:

cat /dev/null > /proc/3446/fd/128

ध्यान दें कि इनोड अभी भी खुला है, लेकिन अब यह 0 लंबाई है

chrome     3446       user  128u      REG              253,2         0    2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

5
ट्रंकट का शानदार उपयोग cat। बॉर्न शेल में, बस > /proc/3446/fd/128करेंगे।
२००_सफल

2
यदि आपका प्रोग्राम वास्तव में भविष्य में फ़ाइल के किसी भी हिस्से को फिर से पढ़ने की उम्मीद है, जो पेज कैश में उपलब्ध हो सकता है या नहीं हो सकता है तो ऐसा न करें।
माइकल आर। हाइन्स

13

dfके लिए आरक्षित स्थान नहीं दिखाएगा root(यहां तक ​​कि जब भी भागो root):

# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

"आरक्षित ब्लॉक प्रतिशत" कैसे बदलें

  1. आरक्षित स्थान को 4% तक कम करें

    # tune2fs -m4 /dev/sda4

df -h अब 45M मुक्त दिखाया गया है।

  1. मेरी फाइलों को जल्दी से सहेज लिया
  2. इसे 5% पर वापस रखें

    # tune2fs -m5 /dev/sda4


2
रूट आरक्षित स्थान के लिए आजकल लगभग हमेशा बहुत बड़ा है। आप इसे कुछ प्रतिशत तक कम कर सकते हैं। dfसामान्य उपयोगकर्ता उपयोग करने योग्य स्थान के लिए प्रदर्शित करता है। जैसा कि रूट के रूप में चलता है, आरक्षित स्थान केवल गैर-रूट उपयोगकर्ताओं (= सामान्य उपयोगकर्ता और सेवाओं का अपना उपयोगकर्ता है) के कारण होने वाले भराव से बचाने के लिए उपयोगी है।
जोफेल

मैं सहमत हूँ; एक mkfsइन दिनों जैसे आरक्षित चाहिए। 5% या 300MB, जो भी कम हो । बस मेरे कुछ सर्वरों को 2% पर फिर से जोड़ा और जीबी को वापस मुक्त कर दिया!
मार्कोस

3
@ जोफेल, नहीं, यह नहीं है। जब भी आप 90% से अधिक उपयोग करते हैं, तो आपको बहुत सारे विखंडन होने लगते हैं। आपको कुछ और स्थान खाली करने की आवश्यकता है, न कि 100% उपयोग के करीब।
Psusi

@psusi आप सच्चे हैं, आपकी टिप्पणी के लिए धन्यवाद। लेकिन सामान्य उपयोगकर्ता के रूप में लगभग सभी उपलब्ध स्थान (अस्थायी) का उपयोग करने का अवसर वास्तव में व्यावहारिक हो सकता है और ext4 के साथ, चीजें अब खराब नहीं हैं, unix.stackexchange.com/a/7965/15241
jofel

7

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

आपकी कचरा खाली करने के बाद भी आपकी फाइलें ~/.local/share/Trash/expungedरिबूट के बाद तक रहेंगी और शायद इससे भी अधिक समय तक।

मुझे इसके लिए एक अच्छा कारण नहीं मिला है, लेकिन अगर मैं अंतरिक्ष से बाहर चला जाता हूं, तो मैं हमेशा मैन्युअल rmकूड़ेदान फ़ाइलों को हटा देता हूं ।


1
अच्छी बात। हालांकि मैं उन लोगों में से एक हूं जो कमांड लाइन से जीते और मरते हैं, और शायद ही कभी ग्राफिकल फ़ाइल मैनेजर का उपयोग करते हैं। अभी तक उस लुप्त हो चुके फ़ोल्डर को छिपने की जगह के रूप में नहीं देखा गया है - एक खाली कचरा क्लिक हमेशा अंतिम होता था और जरूरत पड़ने पर मेरे डिस्क स्थान को वापस कर देता था।
मार्कोस

6
sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do sudo bash -c ": > /proc/$file"; done

स्पष्टीकरण:
Grep lsofआउटपुट केवल हटाई गई फ़ाइलों को निकालने के लिए। सैड प्रत्येक लाइन से प्रोसेस आईडी और फाइलस्क्रिप्ट आईडी को निकालता है, और प्रारूप में एक स्ट्रिंग बनाता है {pid}/fd/{fid}। लूप और आउटपुट प्रत्येक फ़ाइल के लिए कुछ भी नहीं है, उन्हें खाली करने के लिए सेटिंग।


3
मुझे अप्रत्याशित टोकन के पास एक त्रुटि "सिंटैक्स त्रुटि" ('"
माजिद गोल्शादि

5

मुझे आश्चर्य है कि अगर syncयहां कोई मदद की जाती है - लेकिन यह नहीं होना चाहिए, क्योंकि अधिकांश ("कई") IIRC सिस्टम के रूप में, फाइल सिस्टम को प्रत्येक 30 s सिंक किया जाता है।

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

दो कारण (इनमें से एक सवाल जो आप लिंक करते हैं) जिसमें डिलीट की गई फाइल्स के कारण कोई स्पेस नहीं है

  • ऐसी फाइलें जो वास्तव में डिलीट नहीं हुई थीं: आपने एक फाइल को डिलीट कर दिया था, जो कहीं और हार्डलिंक है (अधिक सटीक रूप से, आप unlink()एक फाइल को एक से अधिक लिंक से एड करते हैं)
  • फ़ाइलें है कि अभी भी खुले हैं: खुले फ़ाइलों का उपयोग कर, ठीक है, फ़ाइलों bookkept हैं, inodes खुद को, न निर्देशिका प्रविष्टियों, यदि आप प्रविष्टि को हटाने, inode वहाँ जब तक कि यह अभी भी खुला है के रूप में रहेगा।

लेकिन मुझे एक विशेष कारण की जानकारी नहीं है कि इतनी सारी फाइलों के साथ ऐसा क्यों हो सकता है ...


syncकभी मदद नहीं की। लॉग के लिए, यह एक उबंटू प्रणाली है, इसलिए यह बहुत छोटी गाड़ी है, इसलिए हाँ वे आमतौर पर शोर करते हैं। apportअक्सर तैनात किया गया है क्योंकि हर रात apt- अद्यतन अद्यतन दुर्घटनाओं, हालांकि / var / दुर्घटना केवल 77MB है। यह भी देखा गया है atdकि बाढ़ / var / log / syslog को दोहराने की रेखाओं के साथ जैसे atd[8892]: File a0015c0152ab76 is in wrong format - abortingशायद कुछ फाइलें / var / spool / cron / atspool सभी 0 आकार की थीं, जिससे समस्या का परिपत्र हो गया
मार्कोस

1

CentOS 6.3 भी वास्तव में खाली-खाली-कचरा-नहीं-जब-आप-खाली-कचरा-कर सकता है-करता है। जब तक मैं बस नहीं चला, मुझे उस स्थान को पुनः प्राप्त करने का कोई तरीका नहीं मिला rm -rf ~/.local/share/Trash/expunged/। सिर में बहुत ज्यादा खरोंच आ गई।

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