среда, 2 сентября 2009 г.

Как залогировать kernel panic когда она пришла к тебе

Купил себе новый бук.Поставил туда gentoo (gentoo-sources-2.6.30-r6) и буквально на второй день система стала намертво зависать при запуске компиляции больших пакетов как gcc .И выбрасывать собственно kernel panic в консоль.Вопрос стал в том как эту панику выловить , так как клава и мышка отваливаются, в messages ничего не пишется.Только Капс и Нам лок мигают.Словом, как буд-то резко вырубили електричество.
А без этого нужного кернел паник лога ошибку фиг найдешь.
Оказывается , способ есть :) Что я сделал:
Требования: требуется еще одна машина в той же сети . А также на машине , где происходит kernel panic обязательно должен быть обычный сетевой(тот что не wifi) интерфейс
1.На хосте где происходит паника убеждаемся что в ядре установлен модуль netconsole .Установлен в виде модуля

cat /boot/config|grep NETCONSOLE
CONFIG_NETCONSOLE=m

2.Разрешаем посылку UDP сообщений по сети между вашими двумя машинами.У меня сеть из 2 компов, поэтому они включены изначально.
3.Подгружаем модуль командой

modprobe netconsole netconsole=6969@192.168.1.36/eth0,6969@192.168.1.33/00:18:de:e1:79:2b

где
192.168.1.36/eth0 - ай пи адрес и имя сетевого интерфейса на машине, где происходит kernel panic.У меня заработало только при условии, что eth0 - это обычная, сетевая плата, не wifi
192.168.1.33/00:18:de:e1:79:2b - ай пи адрес и мак адрес машины, которая будет принимать логи
Запустите dmesg для проверки - в /var/log/messages должно появится сообщение, что модуль netconsole загружен и логирование активировано
4.Теперь идем на машину которая будет принимать логи и в консоли запускаем команду

nc -u -l -p 6969

Если такой команды нету, устанавливаем netcat

Cобственно все, в эту консоль у вас будут валиватся сообщения с удаленной машины. И , в частности, так "нужный"
kernel panic

При желании к этой фиче можно добавить
1. Писать логи в syslog на удаленной машине вместо консоли
2. динамически изменять конфигурацию netconsole - куда и откуда слать логи.
Но тут уж google вам в помошь и /usr/src/linux/Documentation/networking/netconsole.txt

Отчего паника возникает у меня пока не разобрался , вот засабмитил баг в gentoo.Там и полный trace.Буду очень признателен если кто-то с таким сталкивался и сможет помочь

4 комментария :

  1. неоднократно наблюдал паники возникающие от самого netconsole.
    Самый эффективный способ остаётся serial порт (rs232). если машин много - Digi Neo 8, если под рукой только ноутбук - serial to usb converter.

    ОтветитьУдалить
  2. Неплохо... Иногда полезная штуковина.

    ОтветитьУдалить
  3. ага, потому что не знаешь откуда ноги растут у ошибки :)А тут еще на выбор несколько способов ее залогировать.Если мой не прокатит, так предложенный выше всегда можно попробывать.
    выяснил таки из-за чего ошибка.
    Добавлял в бук 4 гига памяти - и она оказалась битой.
    Со старыми двуми планками все работает отлично.

    ОтветитьУдалить
  4. Столкнулся с такой же проблемой, но на CentOS да еще и на удаленных серверах.

    Попробовал сделать по инструкции, dmesg сказал что модуль загрузился, но логи не пошли.

    Подозреваю что дело в UDP (сервера находяться в разных подсетях), но нет никаких идей как сделать чтобы работало.

    ОтветитьУдалить