У вас есть несколько неконтролируемых журналов. Вместо того, чтобы удалять, как сумасшедшие повседневные дела, найдите быстро растущий файл или файлы и загляните внутрь, чтобы выяснить, что может быть причиной этого. Возможно, какая-то программа вращается в цикле, регистрируя некоторые условия. Либо отключите эту программу, отключите ее регистрацию или попробуйте исправить условие, на которое она жалуется.
Если файл растет на ваших глазах, и вы не знаете, какая программа пишет в него, вы можете легко это выяснить. Вот пример. У кого /var/log/syslogоткрыт? Мы используем fuserкоманду:
# fuser /var/log/syslog
/var/log/syslog: 602
Только один процесс /var/log/syslogоткрыт. Это процесс 602. Что это? Давайте не будем беспокоиться о psи grep, но посмотрим на /procфайловую систему напрямую:
# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd
Ага, это так rsyslogd. Мы не удивлены , что rsyslogdесть /var/log/syslog/открытая.
Этот метод не гарантированно работает. Причина в том, что программы не должны держать файлы открытыми для записи в них. Предположим, у вас есть процесс, который открывает файл, добавляет к нему, а затем закрывает его. У вас будет несколько более сложное расследование. Вы можете бежать fuserмного раз, пока случайно не поймаете процесс «с поличным». Этот процесс сам по себе может быстро начаться и закончиться. Другая проблема заключается в том, что файл может быть открыт несколькими процессами, но только один увеличивает его. В этом случае вы можете отслеживать их системные вызовы.
# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file: 1234 23459
К сожалению! Два процесса открыли его: 1234 и 23459. Посмотрим, что они делают:
# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}
Он ничего не делает, просто блокирует selectвызов. Ctrl-C, чтобы сломать след:
select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>
Проверьте следующее:
# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C
Ой, этот постоянно пишет. Это должно быть плохо. Мы даже можем проверить, что файловый дескриптор 5, в который записывается процесс, на самом деле является большим файлом:
# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr 3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file
Я не подозреваю, что у вас поврежденная файловая система, но для полной проверки вам не нужно загружать DVD.
Во-первых, просмотрите настройку максимального количества монтирований вашей файловой системы. Определите ваш раздел с помощью команды df. Пример в системе Ubuntu у меня есть здесь:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 18062108 5499320 11645284 33% /
udev 392152 4 392148 1% /dev
tmpfs 159768 768 159000 1% /run
none 5120 0 5120 0% /run/lock
none 399416 200 399216 1% /run/shm
/dev/sr0 43668 43668 0 100% /media/VBOXADDITIONS_4.1.4_74291
Вы можете видеть, что /файловая система смонтирована /dev/sda1. Как /dev/sda1и устройство хранения корневого раздела (и единственный раздел в этой конкретной системе).
Давайте посмотрим на некоторые атрибуты этой файловой системы. Это безопасно сделать, даже если он установлен. Команда извергает много продукции. Вот выдержка:
$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name: <none>
Last mounted on: /
[ ... SNIP ... ]
Last mount time: Fri Mar 29 17:45:18 2013
Last write time: Tue Mar 5 09:08:03 2013
Mount count: 22
Maximum mount count: 22
[ ... SNIP ... ]
Эй, смотри, количество монтирований равно максимальному числу монтирований. В следующий раз, когда я перезагружусь, будет проверка файловой системы. Важно то, что счетчик монтирования является положительным значением. Если у вас ноль, измените его на некоторое положительное значение, например, используя 22 tune2fs -c 22 /dev/whatever. Ноль означает, что проверка никогда не выполняется принудительно, независимо от того, сколько раз смонтирован раздел. Редко перезагруженные системы должны иметь низкие значения здесь. Сервер, который выходит из строя раз в год, может использовать fsck каждый раз при перезагрузке. Вы также можете установить интервалы проверки на основе даты.
Теперь, чтобы выполнить проверку, вы можете переопределить фактическое число, которое будет больше или равно максимуму, а затем перезагрузиться. Это делается с капиталом C: tune2fs -C 1234 /dev/whatever. Теперь раздел выглядит так, как будто он был смонтирован 1234 раза без проверки, что превышает одно- или двузначный максимум.
sudo du -sh /var/* ~/.xsession-errorsпожалуйста? (эти два места я бы ожидал взорвать, если что-то глупо). В противном случае я с Элией - это указывает на проблемы с диском. Относись к этому серьезно.