Вывод лога ядра по сети с помощью netconsole — различия между версиями
Euspectre (обсуждение | вклад) |
Euspectre (обсуждение | вклад) (Added more info about the kernel parameters and the options to pass to netconsole) |
||
Строка 24: | Строка 24: | ||
dmesg -n 7 | dmesg -n 7 | ||
</pre> | </pre> | ||
− | * | + | |
+ | Или можно при загрузке системы задать параметр ядра ''ignore_loglevel''. | ||
+ | |||
+ | Также бывает полезно с помощью соотв. параметров загрузки включить отладочные режимы для тех подсистем ядра, которые хочется проанализировать, например: | ||
+ | :*''drm.debug=0x06'', если отлаживаем графические драйверы; | ||
+ | :*''no_console_suspend'', если отлаживаем suspend/resume. | ||
+ | |||
+ | * Загрузить модуль ''netconsole'' с нужными параметрами: | ||
<pre> | <pre> | ||
− | modprobe netconsole netconsole=@/<устройство>,<порт>@<ip_машины_Б>/[mac_адрес_сетевой_карты_на_машине_Б] | + | modprobe netconsole netconsole=@[ip_машины_А]/[<устройство>],<порт>@<ip_машины_Б>/[mac_адрес_сетевой_карты_на_машине_Б] |
</pre> | </pre> | ||
т.е., например: | т.е., например: | ||
Строка 33: | Строка 40: | ||
</pre> | </pre> | ||
− | + | Или: | |
+ | |||
+ | <pre> | ||
+ | modprobe netconsole netconsole=@192.168.56.236/,12345@192.168.56.185/ | ||
+ | </pre> | ||
+ | |||
+ | В последнем случае важно '''не забыть завершающий слэш''', иначе модуль netconsole не поймёт, что ему передали, и не загрузится. | ||
+ | |||
+ | После того, как модуль netconsole загружен, всё, что выводится в лог ядра, будет отправлено на машину "Б", даже, если на "А" "упадёт" ядро (если, конечно, не будет сбоев в самой сетевой подсистеме ядра). |
Версия 16:12, 6 февраля 2015
Бывает, что ядро Linux падает с kernel oops или panic. К сожалению, при этом компоненты, отвечающие за сохранение лога ядра на диске, нередко "умирают" первыми. Информация о том, что именно произошло и где (oops info, backtrace, ...) теряется, за исключением той части, которая выводится при этом на экран.
Можно настроить вывод лога ядра на другую машину по serial-соединению (например, через COM-порт). Удобно для виртуальных машин, но для реальных - не всегда.
Вместо этого можно использовать модуль ядра "netconsole" для вывода лога ядра по сети по протоколу UDP. Для ROSA Desktop Fresh он поставляется вместе с ядром как загружаемый модуль. Подробное описание этого компонента - в файле netconsole.txt в документации по ядру. Ниже - типовой сценарий использования.
Допустим, есть 2 машины, "А" и "Б" и логи ядра с первой нужно передать на вторую, допустим, на порт 12345.
Последовательность действий такая.
На машине "Б" (т.е. на принимающей стороне):
- если используется firewall - открыть выбранный порт (12345) для доступа с машины "А";
- запустить netcat или что-то аналогичное, что будет сохранять полученные данные в файл, например:
nc -l -u -p 12345 > netconsole.log
Если на машине "Б" - MS Windows, можно использовать этот вариант netcat
На машине "А" (т.е. на той, откуда передаётся лог):
- нужно подключние к сети по проводному соединению: с беспроводными netconsole не умеет работать;
- полезно включить вывод в лог ядра всех выводимых ядром сообщений, даже отладочных:
dmesg -n 7
Или можно при загрузке системы задать параметр ядра ignore_loglevel.
Также бывает полезно с помощью соотв. параметров загрузки включить отладочные режимы для тех подсистем ядра, которые хочется проанализировать, например:
- drm.debug=0x06, если отлаживаем графические драйверы;
- no_console_suspend, если отлаживаем suspend/resume.
- Загрузить модуль netconsole с нужными параметрами:
modprobe netconsole netconsole=@[ip_машины_А]/[<устройство>],<порт>@<ip_машины_Б>/[mac_адрес_сетевой_карты_на_машине_Б]
т.е., например:
modprobe netconsole netconsole=@/eth0,12345@192.168.56.185/c6:2e:79:26:35:6b
Или:
modprobe netconsole netconsole=@192.168.56.236/,12345@192.168.56.185/
В последнем случае важно не забыть завершающий слэш, иначе модуль netconsole не поймёт, что ему передали, и не загрузится.
После того, как модуль netconsole загружен, всё, что выводится в лог ядра, будет отправлено на машину "Б", даже, если на "А" "упадёт" ядро (если, конечно, не будет сбоев в самой сетевой подсистеме ядра).