- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF107:DrBarun2
Материал из Linuxformat.
Содержание |
Магия SysRq
- Как быстро привлечь внимание ядра, или почему Так Невообразимо Нудно Растить Слонов.
В следующий раз, когда окажетесь неподалеку от Linux-компьютера своего друга, проведите следующий эксперимент: нажмите Alt и SysRq и затем B. Потом с удивлением отойдите назад и скажите: «Странно – твой компьютер, кажется, перезагрузился». На самом деле, вы только что наблюдали чудо Волшебной Клавиши SysRq.
Название Magic SysRq всегда будило во мне фантазию, что это предмет поиска для Бильбо Бэггинса [Bilbo Baggins – хоббит, персонаж произведений Джона Р. Р. Толкиена, – прим. пер.] в какой-нибудь пещере. На самом же деле это комбинации горячих клавиш для быстрого привлечения внимания ядра.
В таблице показаны некоторые команды, доступные с помощью Magic SysRq. Помните: чтобы это работало, нужно одновременно нажать Alt и SysRq. Если хотите поэкспериментировать, предупреждаю, что реакция ядра на эти клавиши очень резкая. Если у вас есть несохраненные файлы, не выполняйте этих команд! Также, возможно, придется поэкспериментировать, чтобы подобрать правильную комбинацию. Например, у меня клавиатура Microsoft с клавишей, помеченной как F Lock. Чтобы клавиша SysRq заработала, ее нужно отключить. На ноутбуке должна быть клавиша Fn – чтобы заработала клавиша SysRq, ее, возможно, придется нажать, так что в итоге получается комбинация Fn+Alt+SysRq+B.
Да, но зачем?
Вы можете спросить, зачем все это нужно. Согласен: это, наверное, не то, что требуется каждый день. Я как-то использовал Magic SysRq для имитации ошибки в системе (для проверки сбоя отказоустойчивого кластера). Не сомневаюсь, что гуру ядра смогут выудить полезную информацию из списка задач и статистики использования памяти, которые доступны по клавишам T и M.
Если система реально подвисла, можно перезагрузить ее более элегантно, чем просто отключив питание. Рекомендованная последовательность клавиш R > E > I > S > U > B (переключение клавиатуры из raw-режима, отправка сигнала SIGTERM всем процессам в надежде, что они завершатся сами, отправка сигнала SIGKILL тем, кто этого не сделал, сброс всех смонтированных файловых систем на диск, перемонтирование их в режиме «только для чтения» и перезагрузка). Чтобы запомнить эту последовательность, пригодится акроним “raising elephants is so utterly boring” (Растить слонов ну просто невообразимо нудно); можно запомнить это как ‘busier’ наоборот. Для лучшего результата делайте паузу в несколько секунд между нажатиями клавиш.
Если вам не удается заставить Magic SysRq работать, нужно кое-что проверить. Во-первых, эта возможность должна быть включена в ядре. Для этого просмотрите копию файла конфигурации ядра, которая (будем надеяться) лежит в каталоге /boot. Файл, скорее всего, называется как-то вроде config-2.6.18-Нечто, и строка, которую мы ищем, определяет параметр CONFIG_MAGIC_SYSRQ. Если он установлен в ‘y’, все хорошо, если нет – потребуется изменить конфигурацию ядра и перекомпилировать его.
Параметры ядра
Во-вторых, параметр времени выполнения ядра /proc/sys/kernel/sysrq нужно установить в 1. Эта установка времени выполнения, а не времени сборки, и ее можно установить динамически с помощью команды:
echo 1 > /proc/sys/kernel/sysrq
или
sysctl -w kernel.sysrq=1
Если вы хотите, чтобы изменение стало постоянным (т.е. сохранилось после перезагрузки), добавьте строку
kernel.sysrq=1
в файл /etc/sysctl.conf.
Я только что проверил все системы, которые у меня под рукой: в Ubuntu 7.04, 7.10 и 8.04 функция Magic SysRq включена по умолчанию. В Fedora 7 она настроена в ядре, но отключена в /proc/sys (лично мне кажется, что это более безопасный вариант).
Держим Alt + SysRq + клавишу…
Клавиша | Действие |
---|---|
0–9 | Установить уровень журналирования, что влияет, например, на вывод, генерируемый командами M и P. |
R | Переключить клавиатуру в режим XLATE. |
E | Отправить сигнал SIGTERM всем процессам, кроме init. Ожидается, что приложения ответят на этот сигнал, приведут все в порядок и корректно завершатся. |
I | Отправить сигнал SIGKILL всем процессам, кроме init. Это принудительно завершает все процессы. |
S | Синхронизировать все файловые системы (т.е. записать буферизованныеданные на жесткий диск). |
U | Перемонтировать все файловые системы в режиме «только для чтения». |
B | Незамедлительно перезагрузиться. |
O | Вывести список задач в консоль. |
M | Вывести статистику использования памяти в консоль. |
T | Вывести список задач в консоль. |
H | Показать краткую информацию по использованию всех клавиш SysRq. |