मेरा डिस्क स्थान क्या खा रहा है?


13

मैं लिनक्स मिंट 14 नादिया चला रहा हूं। लिनक्स विभाजन में 10G है। जब सिस्टम शुरू होता है, तो du80% उपयोग की रिपोर्ट करता है। तब उपयोग धीरे-धीरे बढ़ता है जब तक कि यह 100% तक नहीं पहुंच जाता है और सिस्टम अनुपयोगी हो जाता है। (यह दिनों या हफ्तों के क्रम पर हो सकता है)। रिबूट के बाद उपयोग 80% तक रीसेट करता है।

सब से अजीब बात यह है कि duकोई बदलाव नहीं दिखाता है।

यहां उन आदेशों का उत्पादन किया गया है (विंडोज और बाहरी ड्राइव विभाजन elided हैं):

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(नोट: मैं हाइबरनेशन का उपयोग करता हूं। हाइबरनेशन के बाद, उपयोग समान रहता है, और रिबूट के बाद, यह 80% तक रहता है।)

मैं कैसे ट्रैक करूं कि अंतरिक्ष क्या खाता है?

मैंने इस प्रश्न को पढ़ा है । मैं अभी भी अंधेरे में हूं। मुझे कैसे पता चलेगा कि इस व्यवहार के लिए कौन सा कार्यक्रम जिम्मेदार है?

संपादित करने के बाद : यह पाया गया। अंतरिक्ष को कर्नेल लॉग द्वारा दावा किया जाता है, जिसे देखा जाता है dmesg। यह भरता है क्योंकि मेरी मशीन दर 5 सेकंड में त्रुटियां उत्पन्न करती है। (यह इस बग से संबंधित है ।) भविष्य के पाठकों को इसी तरह की समस्या के साथ - धीरे-धीरे डिस्क स्थान को अनदेखा करते हुए du- dmesgकारण की खोज करने की कोशिश करना न भूलें ।


1
मैं बड़ी फ़ाइलों को खोजने के लिए ncduसादे से अधिक पसंद करता हूं du। इससे पहले कि आप कुछ भी करें, यह पूरी डायरेक्टरी ट्री को स्कैन करता है; आप इसे एक विशिष्ट पथ (जैसे ncdu /varया यहां तक ​​कि ncdu ~) पास करना चाह सकते हैं
ब्लैकलाइट चमकना


जवाबों:


15

का बार-बार निष्पादन

sudo du -x   -d1 -h /

(डायरेक्टरी ट्री के नीचे) आपको यह बताना चाहिए कि अंतरिक्ष कहां खपाया जाता है। कि शायद आगे की जांच के बिना बताते हैं कि कौन सा एप्लिकेशन इसका कारण बन रहा है।

अदृश्य फाइलें

यदि duये फ़ाइलें नहीं दिखाते हैं, तो संभावनाओं में से एक हटाई गई फ़ाइलें हैं। एक फ़ाइल (या बल्कि: इसका नाम यानी एक निर्देशिका में इसकी प्रविष्टि) को हटाया जा सकता है जबकि फ़ाइल अभी भी उपयोग में है। जब तक इस फाइल पर एक मान्य फ़ाइल डिस्क्रिप्टर इंगित होता है, तो यह वॉल्यूम पर स्थान को कवर करता है (यदि यह खाली फ़ाइल नहीं है ...)।

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

आप इन फ़ाइलों को पा सकते हैं find:

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

यह एक एकल विशाल फ़ाइल या छोटी फ़ाइलों का एक समूह हो सकता है जो आपकी समस्या का कारण बनता है। मेरे सिस्टम पर अब लगभग 30 ऐसी फाइलें हैं (केवल पांच प्रक्रियाओं से संबंधित)। ls -lइन फ़ाइलों का आकार दिखाता है, लेकिन ऐसा लगता है कि यह मान प्राप्त करना संभव नहीं है find

प्रक्रिया को मारने के बाद अंतरिक्ष dfफिर से फाइल सिस्टम ( ) के लिए उपलब्ध हो जाता है ।


यह मेरे प्रश्न को संबोधित नहीं करता है। duभस्म स्थान में कोई परिवर्तन नहीं होने की रिपोर्ट: शुरुआत में 7.3G और समय बीतने के बाद 7.3G। dfसमय शुरू होते ही 7.3G पर रिपोर्ट और 10G तक मुफ्त। मैं इस समस्या का पता नहीं लगा सकता du
Arry

@ ऐरी वास्तव में, मैं बहुत तेजी से पढ़ता हूं।
हौक लैजिंग

8

जैसे कुछ का उपयोग करें

lsof -s | grep deleted | sort -k 8

यह देखने के लिए कि कौन सी प्रक्रियाएं हटाए गए फ़ाइलों को खोल रही हैं। महत्वपूर्ण क्षेत्र दूसरे (पीआईडी), और आठवें (पिछले से तीसरे; फ़ाइल आकार) हैं।

(डुप्लिकेट लाइनों पर ध्यान दें, उन्हें दो बार मत गिनें। पीआईडी ​​और फ़ाइल पथ (अंतिम फ़ील्ड) या इनकोड संख्या (अंतिम से अंतिम फ़ील्ड) की जाँच करें।)

उसके बाद, यदि आप एक ऐसी प्रक्रिया पाते हैं जो अपराधी होने की संभावना है, तो हम देख सकते हैं कि इसे कैसे ठीक किया जाए।


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

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

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

ध्यान दें कि इसके लिए रूट विशेषाधिकारों की आवश्यकता होती है। इसके अलावा, मैं sudo lsof -s | grep deleted | sort -hk7एक संख्यात्मक प्रकार प्राप्त करता था। बिना -h, सॉर्ट संख्याओं के साथ अजीब लेक्सिकल चीजें करता है।
डेरेक

यह अद्भुत सामान है। अप-वोटेड
Techie

4
find / -size +10000k -print0 | xargs -0 ls -l -h

रिकर्सिवली क्या से की तुलना में 10 एमबी + अधिक भरने है खोजने के लिए इस का उपयोग करें /(रूट), और साथ बहुत सारे विवरण के साथ प्रदर्शित ls -lमें xargs। यदि आप 1000000 (2 अतिरिक्त शून्य) लिखते हैं, तो आप उदाहरण के लिए 1GB + प्राप्त कर सकते हैं।

du / -h --max-depth=1 | sort -h

आप डु का उपयोग भी कर सकते हैं, और बस इसे मैन्युअल रूप से खोद सकते हैं।


1

जब भी ऐसा होता है तो मैं हमेशा अपना ध्यान कुछ उप-निर्देशिकाओं में शुरू करता हूं। FHS संरचना जो अधिकांश लिनक्स डिस्ट्रो का पालन करती है, उसे ध्यान में रखकर तैयार की गई है।

पहले देखो /var, उसके बाद /home

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

आप उन स्थानों में से किसी के भीतर भी अपना ध्यान उप-निर्देशिका में सीमित कर सकते हैं। एक बार जब आप वहाँ देखना समाप्त कर लेते हैं, तो मैं आमतौर पर स्थानांतरित हो जाता हूं /root, और अंत में शेष उप-निर्देशिकाओं पर पहुंच जाता हूं /

अगर यह Red Hat आधारित डिस्ट्रो कैश है जो yumअपडेट करने के लिए उपयोग करता है तो बड़ी मात्रा में जगह की खपत हो सकती है। इसे साफ़ करने के लिए आप इस कमांड का उपयोग कर सकते हैं:

$ yum clean packages

अन्य distros कि उपयोग apt, कुछ इसी तरह कर सकते हैं apt-get clean

मैं आपकी /निर्देशिका के शीर्ष पर भी यह कमांड चलाऊंगा, यह स्थान कभी-कभी आवारा लॉग फ़ाइलों का स्रोत बन सकता है।

$ ls -la /

डॉट फाइलों पर विशेष ध्यान दें! .blahउदाहरण के लिए, नाम की चीजें ।



0

मुझे लगभग वही स्थिति मिली है।

मेरे मामले में, कारण VMware था। एक ही मशीन पर अन्य VMwares में से एक, यह डिस्क रिक्त स्थान का उपभोग करता है। इसलिए मेरा डिस्क स्थान उपयोग 100% था।

पड़ोसी की VMware से बड़ी फ़ाइलों को हटाने के बाद, यह सही ढंग से काम कर रहा है।

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