Самый простой и надежный способ, выводит отсортированный по занимаемому месту список файлов в текущем каталоге :

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

Обсуждение закрыто.