Как определить, какой процесс занимает все доступное место на диске?

Как определить, какой процесс занимает все доступное место на диске?

Внезапно все доступное место на диске /исчезло.

Если я освобожу место на диске (например, удалив ~50 ГБ данных), то через несколько минут я снова увижу 0 свободного места на диске (согласно df).

Очевидно, какой-то процесс быстро съедает место на диске, но я не могу понять, какой именно.

Однако одно можно сказать наверняка: что бы это ни было, оно должно создавать множество мелких файлов, поскольку на диске нет файлов размером более 10 ГБ, а все файлы размером более 1 ГБ намного старше, чем сегодня.

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


Кстати, dfвидит только проблему, а не du.

Например, ниже я показываю несколько «снимков», сделанных с duинтервалом dfв 60 с. (Я сделал это после того, как освободил немного места на диске.) Обратите внимание, как duвывод остается стабильным (на уровне 495G), но dfпоказывает неуклонно уменьшающееся количество доступного пространства. (Я следовал данной рекомендацииздесь. IOW, /mnt/rootуказывает на /.)

# while true; do du -sh /mnt/root && df -h /mnt/root; sleep 60; done
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  824G   12G  99% /mnt/root
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  825G   11G  99% /mnt/root
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  827G  8.9G  99% /mnt/root
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  827G  8.1G 100% /mnt/root
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  828G  7.5G 100% /mnt/root

решение1

Вы имеете дело с удаленными файлами, поэтому duне регистрирует использованное пространство, а df...

Удаленные файлы исчезают только после остановки процесса-владельца; до тех пор, пока этого не произойдет, они продолжают использоваться.

Итак, чтобы найти виновный процесс, я рекомендую вам сделать следующее:

sudo lsof -nP | grep '(deleted)'

Затем для остановки процесса.

sudo kill -9 $(lsof | grep deleted | cut -d " " -f4)

решение2

Вы могли бы использоватьiotopчтобы увидеть, какие процессы выполняют больше всего операций записи на диск.

Пример:

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]

Связанный контент