Linux Magic System Request Key Hacks

Опубликовано 16 Июня, 2008 под тегами SysRq, Cheats

Совершенно случайно узнал об этой замечательнейшей вещи, не могу не поделиться своим открытием.

Дело в том, что в большинстве дистрибутивов по умолчанию ядро собрано с поддержкой SysRq-команд. В большинстве случаев она так же оказывается включена на все 100%. Но по порядку.

Написано “по мотивам” Linux Kernel Documentation: Linux Magic System Request Key Hacks

Во-первых, команда SysRq посылает запрос напрямую ядру Linux, который оно обработает, если вообще способно что-либо обработать. Это оказывается чертовски полезно в некоторых случаях, примеры которых приведены в конце статьи.

Во-вторых, как их включить или отключить. Помимо CONFIG_MAGIC_SYSRQ=yes/no в конфиге ядра, существует файл /proc/sys/kernel/sysrq, в который можно записать следующие значения (в Hardy по умолчанию стоит 1, другие дистрибутивы пока не проверял):

  1. “0” - отключить команды SysRq
  2. “1” - включить все команды SysRq
  3. >1 - битовая маска, разрешающая или запрещающая какую-либо из функций. Подробности можно найти в LKD.

Стоит заметить, что суперпользователь всегда может записать нужную команду в /proc/sysrq-trigger , а эта настройка влияет только на прямой ввод с клавиатуры.

Цифра записывается, например, так:

$ echo 1 > /proc/sys/kernel/sysrq

В-третьих, как этим пользоваться. Пользоваться довольно просто: нажать Alt+SysRq+<Key>, где Key - одна из буквенных клавиш. Или можно записать соответствующий символ в /proc/sysrq-trigger:

$ echo k > /proc/sysrq-trigger

В-четвертых, какие команды есть.

  • ‘b’ - Немедленно перезагружает систему, не останавливая процессы, не синхронизуя и не размонтируя диски, по сути - аналог Ctrl+Alt+Delete в QDOS. Все помнят QDOS?
  • ‘c’    - Перезагружает kexec дабы снять дамп крушения.
  • ‘d’    - Показывает все поддерживаемые локи.
  • ‘e’    - Шлет SIGTERM всем процессам кроме init.
  • ‘f’    - Вызовет функцию oom_kill, которая убьет процессы, получающие ответ “Out of Memory” - для борьбы с “пожирателями памяти”
  • ‘g’    - Используется отладчиком ядра kgdb на платформах ppc и sh.
  • ‘h’     - Отображает ОЧЕНЬ краткую справку (в принципе, любая из неподдержываемых/запрещенных команд выведет справку)
  • ‘i’     - Шлет SIGKILL всем процессам кроме init.
  • ‘k’     - Ключ Безопасного Доступа (SAK) Убивает все программы в текущей виртуальной консоли. Прим.: Есть замечания, см. ниже.
  • ‘m’     - Выведет текущую информацию о памяти в консоль.
  • ‘n’    -Делает задачи реального времени “niceable”, то есть, к ним применяются последствия команды nice (см. man nice)
  • ‘o’     -Выключает систему (если поддерживается)
  • ‘p’     -Выводит текущие регистры и флаги в консоль.
  • ‘q’     - Выводит список всех работающих таймеров.
  • ‘r’     - Отключает “сырой” режим клавиатуры и включает режим XLATE.
  • ‘s’     - Попытается синхронизировать все открытые файловые системы.
  • ‘t’     - Выведет список всех текущих задач и их характеристики в консоль.
  • ‘u’     - Попытается перемонтировать все открытые файловые системы в режиме “только чтение”
  • ‘v’    - Dumps Voyager SMP processor info to your console.
  • ‘w’    - Выводит все “блокированные” (непрерываемые) задачи.
  • ‘x’    - Используется интерфейсом xmon на платформах ppc/powerpc.
  • ‘0’-‘9’ - Устанавливет уровень лога консоли (0 - только PANIC и OOPS, дальше - больше)

Подробнее о том, как этим пользоваться, я расскажу немного позже.

P.S. Кстати для серверов настоятельно рекомендую sysrqd. Сохранит несколько сотен нервных клеток, обещаю. Подробнее - тоже немного позже.