Совершенно случайно узнал об этой замечательнейшей вещи, не могу не поделиться своим открытием.
Дело в том, что в большинстве дистрибутивов по умолчанию ядро собрано с поддержкой 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. Сохранит несколько сотен нервных клеток, обещаю. Подробнее – тоже немного позже.
Связанные посты:
