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

9

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

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

sheats
источник

Ответы:

20

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

# lsof | grep "deleted"

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

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

Дэвид Пашли
источник
1
Потрясающие! Вот и все. У меня был журнал postgresql, в который все еще входили.
sheats
Если вы хотите освободить место без перезапуска демона вместо удаления файла, используйте вместо этого «echo> file». Это урезает файл, но поскольку дескриптор все еще открыт, он станет разреженным файлом. Это означает, что он все равно будет того же размера, но будет занимать гораздо меньше места на диске.
Дэвид Пашли
lsof +L1иногда может работать лучше, чем этот grep ...
Дероберт
5

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

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

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

Кайл Брандт
источник
4

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

Zimmy-DUB-Zongy-Цзун-Dubby
источник
Это не имело бы никакого значения, так как OP явно запрашивал / *, поэтому запрашивал другие разделы. Было бы полезно, если бы что-то было установлено, скажем, в «/ mnt / backups»
Дэвид Пашли