Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
​​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