Linux Magic System Request Key Hacks
Совершенно случайно узнал об этой замечательнейшей вещи, не могу не поделиться своим открытием.
Дело в том, что в большинстве дистрибутивов по умолчанию ядро собрано с поддержкой SysRq-команд. В большинстве случаев она так же оказывается включена на все 100%. Но по порядку.
Написано “по мотивам” Linux Kernel Documentation: Linux Magic System Request Key Hacks
Во-первых, команда SysRq посылает запрос напрямую ядру Linux, который оно обработает, если вообще способно что-либо обработать. Это оказывается чертовски полезно в некоторых случаях, примеры которых приведены в конце статьи.
Во-вторых, как их включить или отключить. Помимо CONFIG_MAGIC_SYSRQ=yes/no в конфиге ядра, существует файл /proc/sys/kernel/sysrq, в который можно записать следующие значения (в Hardy по умолчанию стоит 1, другие дистрибутивы пока не проверял):
- “0” - отключить команды SysRq
- “1” - включить все команды SysRq
- >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. Сохранит несколько сотен нервных клеток, обещаю. Подробнее - тоже немного позже.