ฉันจะค้นหาสิ่งที่ใช้พื้นที่ทั้งหมดบนพาร์ทิชันของฉันได้อย่างไร


9

ฉันอยู่ในอินสแตนซ์ขนาดใหญ่บนเซิร์ฟเวอร์ EC2 ของ Amazon ฉันรันคำสั่ง df และรับ:

root@db:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.1G  284M  98% /
tmpfs                 3.8G     0  3.8G   0% /lib/init/rw
varrun                3.8G  116K  3.8G   1% /var/run
varlock               3.8G     0  3.8G   0% /var/lock
udev                  3.8G   80K  3.8G   1% /dev
tmpfs                 3.8G     0  3.8G   0% /dev/shm
/dev/sdb              414G  957M  392G   1% /mnt
/dev/sdf               50G   12G   35G  26% /byp
/dev/sdk               99G   31G   63G  33% /backups

จากนั้นฉันรันคำสั่ง du และรับ:

root@db:/# du -s -h /*
31G     /backups
5.5M    /bin
136K    /boot
12G     /byp
80K     /dev
5.8M    /etc
12K     /home
70M     /lib
11M     /lib32
0       /lib64
16K     /lost+found
759M    /mnt
4.0K    /opt
du: cannot access `/proc/6917/task/6917/fd/4': No such file or directory
du: cannot access `/proc/6917/fd/4': No such file or directory
0       /proc
31M     /root
7.7M    /sbin
4.0K    /selinux
4.0K    /srv
0       /sys
11M     /tmp
1.1G    /usr
114M    /var

หากคุณสังเกตเห็นเมื่อคุณเพิ่มขนาดทั้งหมดในเอาต์พุตคำสั่ง du ของไดเร็กทอรีที่ไม่ถูกเมาท์คุณจะไม่เข้าใกล้ 9.1G ที่ใด ๆ ตามที่เห็นในคำสั่ง df

นี่หมายความว่าฉันมีดิสก์ที่ไม่ดีหรือไม่? ถ้าเป็นเช่นนั้นฉันจะแก้ไขได้อย่างไร

คำตอบ:


20

เป็นไปได้ทั้งหมดที่คุณมีไฟล์ที่ถูกลบขนาดใหญ่มาก (หรือไฟล์เล็ก ๆ น้อย ๆ ) ที่กระบวนการยังคงมีการจัดการไฟล์ที่เปิดอยู่ วิธีการค้นหาพวกเขาคือการวิ่ง

# lsof | grep "deleted"

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

หากไม่สามารถแก้ไขได้ฉันขอแนะนำ fsck


1
! น่ากลัว นั่นมัน ฉันมีบันทึก postgresql ที่ยังคงได้รับการบันทึกไว้
sheats

หากคุณต้องการเพิ่มพื้นที่ว่างโดยไม่ต้องรีสตาร์ท daemon แทนที่จะลบไฟล์ให้ใช้ "echo> file" แทน สิ่งนี้จะตัดทอนแฟ้ม แต่เนื่องจากหมายเลขอ้างอิงยังคงเปิดอยู่มันจะกลายเป็นแฟ้มกระจัดกระจาย หมายความว่ามันจะยังคงมีขนาดเท่าเดิม แต่จะใช้พื้นที่ดิสก์น้อยกว่ามาก
David Pashley

lsof +L1บางครั้งอาจทำงานได้ดีกว่า grep ว่า ...
derobert

5

มีหลายเหตุผลที่ du ไม่เท่ากับ df ดูคำตอบของคำถามนี้

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

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


4

ใช้ตัวเลือก -x กับ du ทุกครั้งเมื่อคุณไล่ล่าปัญหาเช่นนี้ มันทำให้คุณไม่สามารถข้ามระบบไฟล์ได้


สิ่งนี้จะไม่สร้างความแตกต่างใด ๆ เนื่องจาก OP ขอให้ / * อย่างชัดเจนดังนั้นจึงขอพาร์ทิชันอื่น มันจะได้ช่วยถ้าสิ่งที่ถูกติดตั้งอยู่ภายใต้การพูด, "/ mnt / การสำรองข้อมูล"
David Pashley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.