Проблема
В системе на основе Linux корневая файловая система заполняется каким-то неизвестным процессом.
Это продолжается независимо от того, какие файлы перемещены или удалены из файловой системы.
# df -hP / /dev/mapper/VGExaDb-LVDbSys1 ext3 30G 29G 0 100% /
Во всей файловой системе нет больших файлов:
# find / -xdev -type f -size +100M -exec ls -lh {} \;
Во всей файловой системе нет больших каталогов:
# du -h --max-depth=1 / 42M /sbin 13M /etc 2.4G /usr 45M /tmp 451M /var 192M /lib (and so on) ...
Решение
В какой-то момент два или более процессов использовали файл; например, /tmp/top.log.
Один процесс остановил свой доступ к /tmp/top.log, удалив его (на самом деле это запись каталога), а другой процесс продолжил запись в ссылку на inode, что позволило файлу продолжать расти.
Это можно увидеть в выводе: «lsof + L 1»
# lsof +L 1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME top 34261 root 1W REG 252,0 21460567592 0 1785896 /tmp/top.log (deleted)
Другие файлы были перечислены, но были намного меньше.
Это показывает, что user = root выполнял команду top, которая спулировала /tmp/top.log, и что в настоящее время нет ссылок на этот файл.
Этот буферный файл имел размер 21 Гб, но в выводе «du –h –max-depth=1 /» он не отображался, где / tmp указывалось только размером 45M.
Следуйте инструкциям ниже, чтобы идентифицировать и уничтожить такой процесс.
1. Определите файлы в системе, которые имеют менее 1 ссылки с помощью команды:
# lsof +L 1
2. Убейте все процессы, которые пишут в любой странно большой файл в списке.
В приведенном выше примере вы должны выполнить:
# kill 34261
3. Пространство будет освобождено, когда окончательный процесс прекратит использование файла.