Linux Magic System Request Key Hacks (sysrq)
В ядре Linux существует поддержка "магического" сочетания клавиш. С их помощью можно отправить команду напрямую в ядро Linux и оно тут же её исполнит. Самый простой пример, где это может пригодиться - аварийная перезагрузка сервера. Если у вас проблемы с системным диском, то стандартный reboot может не сработать, так как по сути это обычный бинарник, который нужно прочитать с диска, а потом еще корректно размонтировать все подключенные хранилища. Это может подвесить сам процесс перезагрузки. Но отправив команду напрямую в ядро, вы сможете моментально инициировать перезагрузку.
Проверить поддержку ядром sysrq можно следующим образом:
# cat /proc/sys/kernel/sysrq
▪ 0 - sysrq отключен
▪ 1 - sysrq полностью включен
Так же возможны другие варианты значений. Не буду приводить все их здесь, можно прочитать в ядерной документации - www.kernel.org/doc/htm…srq.html
Включить весь функционал sysrq можно так:
echo "1" >/proc/sys/kernel/sysrq
Если вы подключены напрямую к консоли сервера, то отправлять команды в ядро можно следующей комбинацией клавиш: ALT-SysRq-<command key>. Клавиша SysRq часто совмещена с PrtSc. Когда я первый раз тестировал эти функции, то пытался их ввести при SSH соединении. Работать не будет. При удалённом подключении команды можно отправлять так:
# echo <command key> > /proc/sysrq-trigger
Полное описание команд можно посмотреть в документации, на которую дал ссылку выше. Перечислю те, которые чаще всего могут пригодиться:
◽ b - моментальная перезагрузка;
◽ o - моментальное завершение работы;
◽ d - показывает блокировки, которые держат устройства или файлы;
◽ e - посылает SIGTERM всем процессам, кроме init;
◽ l - посылает SIGKILL всем процессам, кроме init;
◽ f - принудительно запускает oom killer;
◽ u - попытка перемонтировать все файловые системы в read-only;
◽ s - синхронизация подмонтированных файловых систем;
На основе перечисленных команд, можно прикинуть комбинацию, которую стоит попробовать сделать, если у вас подвис сервер и штатный reboot не проходит: e + l + s + u + b. То есть завершаем все процессы, синхронизируем файловые системы, отключаем запись на них и перезагружаемся. Не факт, что всё отработает без ошибок, но мы хотя бы попытались.
Больше примеров проблем, которые можно решить с помощью SysRq, смотрите по ссылке в самом конце статьи. Там отдельный раздел с примерами.
#terminal #linux