फ़ाइलों को हटाना लेकिन डिस्क स्थान अभी भी भरा हुआ है


26

पुराने CentOS 5.6 बॉक्स के साथ काम करना, बिना lvm सेटअप के, मेरा रूट फाइल सिस्टम / भरा हुआ है, मैंने कई पुरानी लॉग फाइल और एप्लिकेशन फाइल को साफ कर दिया है, जिनकी मुझे जरूरत नहीं है, जो आकार में 2 -5GB अधिक थी, हालाँकि मेरा सिस्टम अभी भी रिपोर्ट है कि डिस्क भरी हुई है।

[root@tornms1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             130G  124G     0 100% /
/dev/sdb1             264G  188M  250G   1% /data
/dev/sda1              99M   24M   71M  26% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm



[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

आगे क्या करने की कोशिश करनी चाहिए इस पर कोई विचार? दुर्भाग्य से बॉक्स को रिबूट करना इस समय कोई विकल्प नहीं है।


1
बेवकूफ सवाल पूछने के लिए क्षमा करें, लेकिन क्या आपने सुनिश्चित किया है कि आपका /.Trash/खाली है? तुमने किया है sudo rm -Rf ~/.Trash/*?
आर्ट गर्टनर

यह एक सर्वर है, मेरे पास xwindow स्थापित नहीं है, इसलिए मेरे पास मेरे रूट खाते में .ashash फ़ोल्डर नहीं है।
user1007727

मेरा बुरा, मैंने मान लिया / सभी क्रैश जैसे यूनिक्स सिस्टम पर मौजूद है।
आर्ट गर्टनर

आप सिंक ( linux.die.net/man/8/sync ) कमांड भी आज़मा सकते हैं, शायद आपके सभी ऑपरेशन अभी भी कैश हैं।
वेबरिक

जवाबों:


38

यहां दो चीजें हो सकती हैं।

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

यदि यह आपकी स्थिति है और आप हताश हैं, तो आप आरक्षित स्थान की मात्रा को बदलने में सक्षम हो सकते हैं root। इसे 1% तक कम करने के लिए (डिफ़ॉल्ट 5% है), आपकी आज्ञा होगी

# tune2fs -m 1 /dev/sda3

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


1
हाँ, दूसरे को पहले होना चाहिए!
मुल्ला

यह प्रश्न और उत्तर अधिक जानकारी superuser.com/questions/444269/… जोड़ें ।
luka5z

18

यदि आप एक ऐसी फ़ाइल को हटाते हैं, जिसका उपयोग प्रक्रिया द्वारा किया जा रहा है, तो आप फ़ाइल को अब नहीं देख सकते ls। जब तक आप प्रक्रिया को रोक नहीं देते तब तक यह प्रक्रिया उस फ़ाइल पर लिख रही है।

उन हटाई गई फ़ाइलों को देखने के लिए, बस चलाएं lsof|grep delete


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

संबंधित उत्तर: unix.stackexchange.com/questions/34140/…
icc97

10

डिस्क प्राप्त करने के 2 अन्य तरीके पूर्ण मुद्दा है:

1) एक माउंट पॉइंट के नीचे छिपा हुआ: लिनक्स एक माउंट पॉइंट के तहत "छिपी" फाइलों के साथ एक पूर्ण डिस्क दिखाएगा। यदि आपके पास ड्राइव पर लिखा गया डेटा है और उस पर एक और फाइल सिस्टम माउंट है, तो लिनक्स सही ढंग से डिस्क के उपयोग को नोट करता है, भले ही आप माउंट पॉइंट के तहत फाइलों को नहीं देख सकते। यदि आपके पास nfs mounts हैं, तो उन्हें umounting करने की कोशिश करें और यह देखने के लिए देखें कि क्या माउंट से पहले उन निर्देशिकाओं में कुछ भी गलती से लिखा गया था।

2) दूषित फ़ाइलें: मैं इसे कभी-कभी विंडोज़ पर SMB के माध्यम से लिनक्स फ़ाइल स्थानांतरण में देखता हूं। एक फ़ाइल फ़ाइल डिस्क्रिप्टर को बंद करने में विफल रहती है और आप 4 जीबी फ़ाइल ट्रैश से हवा करते हैं।

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

cd /
du -sh ./* 

शीर्ष स्तर की निर्देशिकाओं की संख्या आमतौर पर सीमित होती है, इसलिए मैंने मानव पठनीय ध्वज -hको यह देखने के लिए सेट किया कि कौन सा उपनिर्देशिका अंतरिक्ष हॉग है।

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

cd /<suspiciously large dir>
du -s ./* | sort -n

जो सभी फाइलों और निर्देशिकाओं के लिए बाइट के आकार का सबसे बड़ा उत्पादन करता है

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List

एक बार जब आप ओवरसाइज्ड फ़ाइल को देख लेते हैं, तो आप आमतौर पर इसे हटा सकते हैं।


महान युक्तियाँ! मैंने डू / अंडर डू का उपयोग करके फ़ोल्डरों का पता लगाया और एंड्रॉइड एसडीके के तहत कई बेहद बड़े सिस्टम चित्र पाए। उन्हें हटा दिया और सब कुछ वापस सामान्य करने के लिए :)
Pupper

4

आप पता लगा सकते हैं कि कौन सी फाइलें lsof के साथ खुली हैं। यह बहुत अधिक उत्पादन कर सकता है, इसलिए मैं लॉग के साथ समाप्त होने वाली लाइनों के नीचे उदाहरण में सीमित हूं:

# lsof | grep log$
rsyslogd   2109     syslog    0u     unix 0xffff88022fa230c0      0t0       8894      /dev/log
rsyslogd   2109     syslog    1w      REG              252,6    62393         26 /var/log/syslog
rsyslogd   2109     syslog    2w      REG              252,6   113725        122 /var/log/auth.log
rsyslogd   2109     syslog    3u     unix 0xffff88022fa23740      0t0       8921 /var/spool/postfix/dev/log
rsyslogd   2109     syslog    5w      REG              252,6    65624        106 /var/log/mail.log
/usr/sbin  2129       root    2w      REG              252,6    93602         38 /var/log/munin/munin-node.log
/usr/sbin  2129       root    4w      REG              252,6    93602         38 /var/log/munin/munin-node.log
...

1

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

#lsof +L1

यह प्रोसेस आईडी और फाइल डिस्क्रिप्टर देगा। फ़ाइल डिस्क्रिप्टर द्वारा हटाए गए फ़ाइल को शून्य करने के लिए

#echo "" > /proc/$pid/fd/$fd 

1

कमांड टाइप करें

#lsof +L1

जो डिलीटेड कोटे के साथ मेमोरी होल्ड करने वाली फाइलों की लिस्ट दिखाएगा।

फ़ाइल की पिड (प्रोसेस आईडी) पर ध्यान दें

प्रक्रिया को मार डालो

#kill <pid>

मेमोरी प्रक्रिया द्वारा जारी की जाएगी

इसे कमांड द्वारा जांचें

#df -h

0

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


0

जंगली में देखी गई वास्तविक समस्या:

सुनिश्चित करें कि आप वास्तविक फ़ाइलों को हटा रहे हैं और फ़ाइलों के प्रति सहानुभूति नहीं रखते हैं । यह विशेष रूप से लॉग फ़ाइलों के लिए मामला हो सकता है।

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