Самый простой и надежный способ, выводит отсортированный по занимаемому месту список файлов в текущем каталоге :
du -ks ./* | sort +0n
Находим самый занятый каталог, заходим в него и повторяем, и так пока не найдем самый тяжелый файлик, который переполнил файловую систему. Затем определяем его тип и процесс, который его пишет.
# ls file1.log file2.log arch # file * arch: directory file1.log: ascii text file2.log: ascii text # fuser * file1.log: 6035o 6037o
Кстати, команда fuser выводит номера процессов в STDOUT, а все остальное в STDERR. Таким образом, очень легко организовать обработчики таких процессов в цикле, например:
# fuser /tmp/file1.txt 2>/dev/null 6035 6124 # for i in `fuser * 2>/dev/null`; do /usr/bin/ps -o pid,user,args -p $i | tail +2 ; done 6124 root /usr/sfw/sbin/snmpd 6035 root /usr/sbin/syslogd
Очистить файл, вызваший переполненние можно так, например:
cat /dev/null > file1.log
Если просто удалить такой файл, свободное место в файловой системе не появится, так как процесс будет держать дескриптор файла открытым. Место появится, только после того, как процесс завершит всою работу или будет убит.
UPDATE: 2010.01.21