การลบไฟล์ แต่พื้นที่ว่างในดิสก์ยังคงเต็ม


26

การจัดการกับ CentOS 5.6 box แบบเก่าโดยไม่มีการตั้งค่า 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/*?
Art Gertner

นี่คือเซิร์ฟเวอร์ฉันไม่ได้ติดตั้ง xwindow ดังนั้นฉันไม่มีโฟลเดอร์. trash ในบัญชีรูทของฉัน
user1007727

ฉันไม่ดีฉันถือว่า /.Trash/ มีอยู่ในระบบเหมือนยูนิกซ์ทั้งหมด
Art Gertner

คุณสามารถลองใช้คำสั่งsync ( linux.die.net/man/8/sync ) บางทีการดำเนินการทั้งหมดของคุณยังคงถูกแคชไว้
weberik

คำตอบ:


38

อาจมีสองสิ่งเกิดขึ้นที่นี่

ขั้นแรกระบบไฟล์ของคุณสงวนพื้นที่บางส่วนที่rootสามารถเขียนได้เท่านั้นเพื่อให้กระบวนการของระบบที่สำคัญไม่ล้มเมื่อผู้ใช้ทั่วไปใช้พื้นที่ดิสก์หมด นั่นเป็นเหตุผลที่คุณเห็นว่ามี 124G จาก 130G ใช้ แต่ไม่มีศูนย์ บางทีไฟล์ที่คุณลบอาจทำให้การใช้งานมาถึงจุดนี้ แต่ไม่ต่ำกว่าเกณฑ์สำหรับผู้ใช้ปกติ

rootหากเป็นสถานการณ์ของคุณและคุณหมดหวังที่คุณอาจจะไม่สามารถที่จะปรับเปลี่ยนจำนวนของพื้นที่ที่สงวนไว้สำหรับ หากต้องการลดให้เหลือ 1% (ค่าเริ่มต้นคือ 5%) คำสั่งของคุณจะเป็น

# tune2fs -m 1 /dev/sda3

ประการที่สองระบบปฏิบัติการจะไม่ปล่อยพื้นที่ดิสก์สำหรับไฟล์ที่ถูกลบซึ่งยังคงเปิดอยู่ หากคุณได้ลบ (พูด) หนึ่งในไฟล์บันทึกของ Apache คุณจะต้องเริ่ม Apache ใหม่เพื่อให้มีที่ว่างเพิ่มขึ้น


1
ใช่คนที่สองควรเป็นคนแรก!
mulya

คำตอบของคำถามนี้และ (s) เพิ่มข้อมูลเพิ่มเติมsuperuser.com/questions/444269/...
luka5z

18

หากคุณลบไฟล์ที่กระบวนการใช้อยู่คุณจะไม่สามารถดูไฟล์lsได้อีก กระบวนการยังคงเขียนไปยังไฟล์นั้นจนกว่าคุณจะหยุดกระบวนการ

หากต้องการดูไฟล์ที่ถูกลบเพียงแค่เรียกใช้ lsof|grep delete


1
นี่เป็นปัญหาในกรณีของฉัน ขอบคุณข้อมูลที่มีประโยชน์มาก
Dag Sondre Hansen

คำตอบที่เกี่ยวข้อง: unix.stackexchange.com/questions/34140/…
icc97

10

วิธีอื่นอีก 2 วิธีในการรับดิสก์เต็มปัญหา:

1) ซ่อนอยู่ใต้จุดเมานท์: linux จะแสดงดิสก์เต็มรูปแบบพร้อมไฟล์ "ซ่อน" ใต้จุดเมานท์ หากคุณมีข้อมูลที่เขียนไปยังไดรฟ์และติดตั้งระบบไฟล์อื่นทับลินุกซ์จะบันทึกการใช้ดิสก์อย่างถูกต้องแม้ว่าคุณจะไม่เห็นไฟล์ที่อยู่ใต้จุดเมานท์ หากคุณมีการเมาท์ nfs ให้ลองติดตั้งพวกเขาและมองดูว่ามีอะไรที่เขียนโดยไม่ตั้งใจในไดเรกทอรีเหล่านั้นก่อนการเมานต์หรือไม่

2) ไฟล์ที่เสียหาย:ฉันเห็นสิ่งนี้เป็นครั้งคราวใน windows เพื่อโอนย้ายไฟล์ linux ผ่าน SMB ไฟล์เดียวล้มเหลวในการปิดตัวอธิบายไฟล์และคุณปิดท้ายด้วยไฟล์ขยะ 4GB

สิ่งนี้อาจน่าเบื่อกว่าในการแก้ไขเนื่องจากคุณต้องการค้นหาไดเรกทอรีย่อยที่ไฟล์นั้นอยู่ แต่มันง่ายต่อการแก้ไขเพราะตัวไฟล์นั้นสามารถถอดออกได้อย่างง่ายดาย ฉันใช้duคำสั่งและทำรายการของรูตย่อยเพื่อค้นหาว่าพื้นที่ไฟล์ถูกใช้อยู่ที่ใด

cd /
du -sh ./* 

จำนวนของไดเรกทอรีระดับบนสุดมักจะถูก จำกัด ดังนั้นฉันตั้งค่าการอ่านของมนุษย์ธง-hเพื่อดูว่าไดเรกทอรีย่อยเป็นหมูพื้นที่

จากนั้นคุณบันทึกปัญหาที่เป็นลูกและทำซ้ำกระบวนการสำหรับรายการทั้งหมดในนั้น เพื่อให้ง่ายต่อการสังเกตรายการใหญ่เราเปลี่ยน du เล็กน้อยและจับคู่กับการเรียงลำดับ

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

ซึ่งสร้างผลลัพธ์ที่เล็กที่สุดถึงมากที่สุดตามขนาดไบต์สำหรับไฟล์และไดเรกทอรีทั้งหมด

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

เมื่อคุณพบไฟล์ที่มีขนาดใหญ่คุณสามารถลบได้


สุดยอดเคล็ดลับ! ฉันติดตามโฟลเดอร์ภายใต้ / ใช้ du และพบอิมเมจระบบที่มีขนาดใหญ่มากภายใต้ android SDK ลบพวกเขาและทุกอย่างกลับสู่ปกติ :)
Pupper

4

คุณสามารถค้นหาไฟล์ที่เปิดด้วย lsof มันสามารถสร้างผลลัพธ์จำนวนมากได้ดังนั้นฉันจึง จำกัด ตัวอย่างไว้ที่บรรทัดที่ลงท้ายด้วย log:

# 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

มันจะให้รหัสกระบวนการและอธิบายไฟล์ เพื่อ null ไฟล์ที่ถูกลบโดย file descriptor

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

1

พิมพ์คำสั่ง

#lsof +L1

ซึ่งจะแสดงรายการไฟล์ที่เก็บหน่วยความจำด้วยเครื่องหมายคำพูดที่ถูกลบ

บันทึกpid (Process id) ของไฟล์

ฆ่ากระบวนการ

#kill <pid>

กระบวนการหน่วยความจำจะถูกปล่อยออกมา

ตรวจสอบตามคำสั่ง

#df -h

0

นอกจากนี้สิ่งที่ได้รับการอธิบายปัญหาอาจเป็นไปได้ว่ามีจุดเชื่อมต่ออื่นของไดเรกทอรีไฟล์ที่ถูกลบในอุปกรณ์ดิสก์ที่เชื่อมต่ออื่นบนเซิร์ฟเวอร์เดียวกัน ตรวจสอบการเมานต์ปัจจุบันและรายการ fstab


0

ปัญหาจริงที่พบในป่า:

ตรวจสอบให้แน่ใจว่าคุณลบไฟล์จริงและไม่เชื่อมโยงกับไฟล์ นี่อาจเป็นกรณีของไฟล์บันทึกโดยเฉพาะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.