![Как определить, какой процесс занимает все доступное место на диске?](https://rvso.com/image/111997/%D0%9A%D0%B0%D0%BA%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D1%8C%2C%20%D0%BA%D0%B0%D0%BA%D0%BE%D0%B9%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%20%D0%B7%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D0%B5%D1%82%20%D0%B2%D1%81%D0%B5%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D0%BE%D0%B5%20%D0%BC%D0%B5%D1%81%D1%82%D0%BE%20%D0%BD%D0%B0%20%D0%B4%D0%B8%D1%81%D0%BA%D0%B5%3F.png)
Внезапно все доступное место на диске /
исчезло.
Если я освобожу место на диске (например, удалив ~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]