Борьба с kernel panic в Linux-ядре 2.6.35 и выше |
[исправить] |
Начиная с версии 2.6.35 в Linux-ядре появилась полезная функция "ramoops",
позволяющая в случае краха сохранять информационный дамп состояния ядра в
памяти для последующего анализа. Данные сохраняются только при мягкой
перезагрузке, без очистки прошлого состояния памяти. Вкомпилировать данную
функцию в ядро или загружать модулем "ramoops" - без разницы.
Единственная хитрость - сначала нужно зарезервировать память в ядре.
Сделать это можно указав ядру параметр memmap=256K@0xfc0000
(резервируем 256К перед ядром).
Если ramoops в ядре, то добавляем параметры
ramoops.mem_address=0xfc0000 и
ramoops.mem_size=0x40000
параметр ramoops.dump_oops=1 является умолчанием, так что его можно не указывать.
Для модуля "ramoops" эти параметры нужно указать при загрузке.
Теперь чтобы ядро не осталось в мертвом виде, не забываем сделать
echo 10 >/proc/sys/kernel/panic
и (если нужно, а иногда полезно)
echo 1 >/proc/sys/kernel/panic_on_oops
Теперь проверяем при помощи crash-а через Alt-SysRq-C.
После перезагрузки, текст crash-дампа будет лежать в памяти, начиная с адреса 0xfc0000.
Достать его оттуда можно при помощи
dd if=/dev/mem bs=256k skip=63 count=1 >>crash.txt
либо при помощи простенькой программы, которая открывает /dev/mem и с
указанного смещения читает данные.
Для сохранения дампа на диск следует использовать похожую функцию mtdoops.
Дополнение: Для работы в ядре необходимо выключить опцию CONFIG_STRICT_DEVMEM
|
|
|
|
Раздел: Корень / Администратору / Система / Просмотр состояния и мониторинг системы |