Как мне узнать, что занимает все место на моем / разделе?

Я нахожусь на большом экземпляре на серверах Amazon EC2. Я запускаю команду 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.

Значит ли это, что у меня плохой диск? Если так, как я могу это исправить?

3 ответа

Решение

Вполне возможно, что у вас есть очень большой удаленный файл (или множество маленьких), в котором процесс все еще имеет дескриптор открытого файла. Чтобы найти их, нужно бежать

# lsof | grep "deleted"

Если вы видите много строк, оканчивающихся на "(удалено)", то вы можете найти идентификатор процесса, у которого они открыты, и перезапустить его. Как только это произойдет, ваше дисковое пространство должно вернуться.

Если это не помогает, то я бы порекомендовал fsck.

Есть множество причин, по которым du не равен df. Смотрите ответы на этот вопрос.

Некоторые из них - оверлейные монтирования, множество небольших файлов и блоков большего размера, а также удаленные файлы, которые все еще используются. Оверлейное монтирование - это когда вы монтировали файловую систему в точке монтирования, в которой были файлы, поэтому du их не видит.

Основное различие между ними состоит в том, что df просто проверяет суперблок и доверяет ему, когда du сканирует все файлы, которые он может видеть, и добавляет их. Смотрите эту ссылку IBM для информации о суперблоке.

Всегда используйте параметр -x с du, когда вы преследуете подобные проблемы. Это удерживает du от пересечения файловых систем.

Другие вопросы по тегам