Как включить все функции SysRq в Linux
Задача
Узнайте, как включить функции SysRq и как их использовать, вызывая их с помощью клавиш управления.Требования
- Root-разрешения
- Ядро Linux, скомпилированное с включенной опцией «CONFIG_MAGIC_SYSRQ»
Условные обозначения
- # - требует, чтобы данные команды linux выполнялись с правами root либо напрямую как пользователь root, либо с помощью
sudo
команды - $ - требует, чтобы данные команды linux выполнялись как обычный непривилегированный пользователь
Введение
Комбинация клавиш SysRq может использоваться для отправки команд непосредственно в ядро Linux в некоторых особых случаях: ядро будет реагировать на команды, отправленныеcommand keys
немедленно, если оно не заблокировано полностью. Различные command keys
достигают определенных задач, и их можно объединить, чтобы восстановить систему в безопасное состояние или получить чистую перезагрузку, когда больше ничего не работает: это то, что мы можем получить с помощью
reisub
последовательности.В этом уроке мы увидим, как включить все функции SysRq, используя стандартную установку
Ubuntu 18.04 - Bionic
Beaver
в качестве базы.Волшебный ключ SysRq
SysRq
Сочетание клавиш состоит из трех клавиш , чтобы быть прижаты друг к другу: ALT + SysRq + command key
. Вам может быть интересно, какая SysRq
клавиша на клавиатуре. Предполагая, что вы используете QWERTY-клавиатуру, SysRq
клавиша соответствует print
клавише.Наконец, командная клавиша - это клавиша на клавиатуре, которая при нажатии в этом специальном режиме немедленно отправит команду ядру. Мы вскоре увидим некоторые из этих ключей и связанные с ними функции, но прежде чем продолжить, мы должны быть уверены, что используемое ядро скомпилировано с включенной необходимой опцией.
Опция ядра CONFIG_MAGIC_SYSRQ
Как сказано выше, чтобыSysRq
комбинация клавиш работала, ядро должно быть собрано с CONFIG_MAGIC_SYSRQ
включенной опцией. Обычно это происходит во всех основных дистрибутивах, тем не менее полезно знать, как проверить его состояние. Вот как мы можем это сделать. Первое, что мы хотим знать, это версия и название ядра, которое мы используем. Получить эту информацию очень просто, мы просто запустим:$ uname -r 4.13.0-25-genericКак вы, вероятно, знаете,
uname
команда используется для получения некоторой системной информации. В этом случае мы использовали его с -r
флагом, как мы хотели знать только о kernel release
. Результатом команды было 4.13.0-25-generic
: это имя ядра, используемого нашей системой. Теперь мы можем заглянуть внутрь /boot
каталога для соответствующего файла конфигурации: этот файл содержит все параметры, с которыми ядро было скомпилировано. Мы можем найти значение, используемое
CONFIG_MAGIC_SYSRQ
в нем:$ ls /boot abi-4.13.0-25-generic initrd.img-4.13.0-25-generic memtest86+_multiboot.bin config-4.13.0-25-generic memtest86+.bin System.map-4.13.0-25-generic grub memtest86+.elf vmlinuz-4.13.0-25-genericКак и ожидалось, файл присутствует:
config-4.13.0.25-generic
это то, что мы ищем. Теперь у нас есть все, что нужно, давайте проверим:$ grep -i CONFIG_MAGIC_SYSRQ /boot/config-4.13.0-25-generic CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6 CONFIG_MAGIC_SYSRQ_SERIAL=yКак видно из первой строки, параметр
CONFIG_MAGIC_SYSRQ
имеет y
значение, означающее, что он был установлен как встроенный при настройке ядра. Что означают другие строки?
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE
Вариант не указать функции по умолчанию включено: значение выражается в hexadecimal
форме, в данном случае , 0x01b6
который действительно соответствует в 438
десятичной форме.Как мы увидим позже в этом руководстве, это значение означает, что большинство функций включено по умолчанию. Однако в целях безопасности большинство дистрибутивов отключают их вызов с помощью комбинации клавиш. Третий вариант для нас сейчас не очень важен: речь идет о включении
SysRq key
over-serial.Проверка текущего значения SysRq
Большинство дистрибутивов отключают доступ к некоторымSysRq
функциям с помощью комбинаций клавиш по соображениям безопасности (однако все функции всегда доступны, если они вызваны /proc/sysrq-trigger
с правами суперпользователя). Чтобы проверить, какие функции доступны в нашей системе, мы можем просто запустить:$ cat /proc/sys/kernel/sysrq 176Команда вернула значение
176
. Как получается это значение и что оно обозначает? Каждое значение соответствует определенной функции, как вы можете видеть в списке ниже:0 - disable sysrq completely 1 - enable all functions of sysrq 2 - enable control of console logging level 4 - enable control of keyboard (SAK, unraw) 8 - enable debugging dumps of processes etc. 16 - enable sync command 32 - enable remount read-only 64 - enable signaling of processes (term, kill, oom-kill) 128 - allow reboot/poweroff 256 - allow nicing of all RT tasksХотя значение
0
отключает все SysRq
функции, а значение 1
включает все их, предоставляя значения больше 1, мы можем включить определенные. Как проверено выше, у нас есть SysRq
значение 176
. Это получается из суммы 128
(которая позволяет перезагрузку и выключение) + 32
(возможность перемонтировать файловые системы в режиме только для чтения) + 16
, которая включает команду синхронизации. Таким же образом значение 438
получается из суммы 2 + 4 + 16 + 32 + 128 + 256, поэтому все соответствующие функции включены.Как изменить значение SysRq
Теперь мы знаем, что такоеSysRq
ценность, но как мы можем ее изменить? Чтобы немедленно изменить это значение, нам просто нужно записать нужный /proc/sys/kernel/sysrq
файл в
файл, выполнив:# echo "1" > /proc/sys/kernel/sysrqТаким образом, изменение вступит в силу немедленно, но оно не переживет перезагрузку. Как сделать это постоянным? Это очень просто. Общее решение, которое работает во всех дистрибутивах Linux, заключается в том, чтобы поместить значение
kernel.sysrq
в /etc/sysctl.d/99-sysctl.conf
файл:# echo "kernel.sysrq = 1" >> /etc/sysctl.d/99-sysctl.confОбратите внимание, как мы использовали
>>
оператор перенаправления: это добавит текст в файл и не будет переопределять другие параметры, которые он уже может содержать.Последовательность reisub
Из всех последовательностей командных клавиш,reisub
пожалуй, самая известная. Чтобы лучше запомнить эту последовательность, она часто используется в качестве аббревиатуры для «воспитания слонов, это настолько скучно». Что делает эта последовательность? Удерживая alt+sysrq key
, мы продолжаем последовательно нажимать клавиши команд, и вот что происходит: впервую очередь
r
переключает клавиатуру raw
в
XLATE
режим, затем e
посылает SIGTERM
сигнал всем процессам, чтобы они могли быть закрыты грациозно, если это возможно. После этого мы посылаем SIGKILL
сигнал нажатием кнопки
i
, чтобы завершить оставшийся процесс, который не ответил на предыдущий сигнал. При этом s
мы пытаемся синхронизировать все смонтированные файловые системы и немедленно сбрасывать все изменения из кэша на диск. Используяu
мы перемонтируем все файловые системы в read only
режиме, и, наконец, нажав b
, мы выполняем перезагрузку системы. Последовательность может быть использована в определенных ситуациях , когда система становится очень отвечать на запросы, а также другие решения не достаточно , чтобы исправить положение. Командные ключи, составляющие эту последовательность, являются, однако, только подмножеством доступных: полный список вы можете посмотреть в
документации ядра.reisub
SysRq