SysRq: аварийная перезагрузка сервера Linux

Проблемы всегда приходят внезапно. Например, перестал работать сервер на CentOS 6: Apache, Postfix, BIND, хотя пинги проходят. Осталась одна удалённая консоль, запущенная несколько дней назад.
Первое, что приходит на ум:
[root@capricornus ~]# tail /var/log/messages
и ужасающий вывод:
Bus error (core dumped)
дальше — больше и страшнее:
[root@capricornus ~]# dmesg
bash: /bin/dmesg: Input/output error
[root@capricornus ~]# ps
bash: /bin/ps: Input/output error
[root@capricornus ~]# shutdown -r now
bash: /sbin/shutdown: Input/output error
Похоже какие-то проблемы с диском и/или файловыми системами, но ядро еще работает. Тут нам на помощь приходят виртуальная файловая система ядра /proc и функция триггера SysRq. Сначала проверяем включен ли триггер:
cat /proc/sys/kernel/sysrq
0 Нулевое значение — триггер выключен. Включим его.
echo 1 > /proc/sys/kernel/sysrq
И далее пошлем ему команду перезагрузки:
echo b > /proc/sysrq-trigger
Можно команду отключения:
echo o > /proc/sysrq-trigger
Можно ехать или идти в серверную, разбираться.

Хотелось бы дополнить информацию про SysRq. Эта функция, как кстати и клавиша, — прямая связь с ядром Вашей системы. По умолчанию она включена в большинстве дистрибутивов. Это можно проверить в конфигурационном файле ядра.
uname -r
2.6.32-431.3.1.el6.x86_64
cat /boot/config-2.6.32-431.3.1.el6.x86_64 |grep -i sysrq
Или одной командой:
cat /boot/config-`uname -r` |grep -i sysrq
CONFIG_MAGIC_SYSRQ=y — Функция включена.
Если нет, то необходимо перекомпилировать ядро, включив этот параметр в конфиге. Но, как уже говорилось, она работает по умолчанию в большинстве дистрибутивов.
Если есть физический доступ к серверу, то можно использовать клавишу SysRq + командную клавишу. Поскольку клавиша SysRq чаще всего совмещена с PrtScr, нажимать следует Ctrl + Alt + SysRq + командная клавиша, чтобы в графических режимах не сработала клавиша скриншота. Результаты нажатия комбинации клавиш будут аналогичными результатам после ввода команды в удаленной консоли. Например Ctrl + Alt + SysRq + О и echo o > /proc/sysrq-trigger одинаково отключают сервер.
Настоятельно НЕ рекомендую в удаленной консоли использовать эту команду с параметрами E и I, так как они завершат все процессы, включая консоль! Также при проблемах с дисками и/или файловыми системами, как в примере выше, опция синхронизации S ни к чему хорошему не приведет. Будьте внимательны!

Ниже привожу табличку с функциями командных клавиш. Подглядел тут.
HHelp — выводит все доступные возможности SysRq, выделяя большой буквой клавишу действия;
0-9 — loglevel09 — позволяет менять уровень подробности вывода от 0 (только критические сообщения) до 8 (самый подробный режим);
B — reBoot — выполняет немедленную перезагрузку системы аналогично кнопке RESET (без синхронизации и размонтирования файловых систем);
CCrashdump — выполняет директиву kexec для перезагрузки, чтобы получить сведения об ошибках;
D — holDs — показывает все блокировки, которые держат устройства или файлы;
O — powerOff — корректно выключает систему (если настроено и поддерживается, обычно это прямая команда отключения);
SSync — пытается синхронизировать все примонтированные файловые системы, при этом пишет в консоли «Emergency Sync». При успешном завершении выводится «Emergency Sync Complete»;
UUnmount — пытается перемонтировать все примонтированные файловые системы в режим «только чтение»;
T — showTasks — выдаст список текущих задач и информацию о них в текущую консоль;

NNice — используется для того, чтобы сбросить приоритет задачи реального времени или просто с измененным приоритетом;
W — shoW-blocked-tasks — выдаст список всех непрерываемых (заблокированных, ждущих окончание ввода-вывода) задач;
M — showMem — выдаст информацию о доступной и занятой оперативной памяти, а также степени использования свопа;
FFull — позволяет вызвать обработчик oom_kill (out-of-memory kill) для прерывания приложений, забравших слишком много памяти (может занять продолжительное время). Используйте его, если свободная память совсем истощилась, так что система не реагирует ни на какой иной ввод (курсор мыши не движется, индикаторы NumLock/CapsLock не включаются, но индикатор работы накопителя всё время включен);
K — secure access Key — убивает все процессы на текущей консоли. Её следует применять для снятия зависшего X-сервера. При этом графический сервер будет остановлен и невозможно будет увидеть ввод-вывод либо пока X-сервер не перезапустится, либо пока видеорежим не будет исправлен вручную;
R — unRaw — перехватывает управление мышью и клавиатурой у Х-сервера, что полезно, если Х-сервер завис: так можно перейти в консоль, убить Х-сервер или проверить логи;
E — tErm — послать сигнал завершения работы SIGTERM всем процессам, кроме init;
I — KILL — послать сигнал немедленного завершения работы SIGKILL всем процессам, кроме init.

SysRq: аварийная перезагрузка сервера Linux

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *