пятница, 12 сентября 2008 г.

Волшебная клавиша SysRq / Printscreen

Еще одна статейка взятая вот ОТСЮДА!!!

Достаточно редко, когда я провожу над своей системой бесчеловечные ядерные эксперименты, она зависает наглухо - ничто не совершенно в этом мире. Именно для этих целей в ядре Линукс имеется замечательная возможность: Волшебная клавиша SysRq.



Что это такое?

Если внимательно посмотреть на клавиатуру, там обнаружится кнопка PrtSc / SysRq. Подавляющее большинство виндоуз-пользователей полагают, что она специально присутствует на клавиатуре для скриншотов - забывая, что эта кнопка появилась на клавиатуре задолго до появления редмонтовской конторы.
На самом деле эта клавиша - наша единственная прямая связь с ядром, которая работает всегда. При помощи некоторых комбинаций клавиш можно заставить систему аварийно сбросить данные на диски, размонтировать все файловые системы в режим "только-чтение" и перезагрузиться даже при наглухо зависшей системе.



Magic SysRq это комбинация клавиш, напрямую перехватываемая ядром и может быть использована для аварийного выключения. Так как Magic SysRq выполнена как часть драйвера клавиатуры, она гарантировано работает почти всегда - почти, если только ядро само по себе работоспособно.


Как ей пользоваться?
Сначала нужно убедиться, что она включена: в конфиге ядра CONFIG_MAGIC_SYSRQ должно иметь значение Y (по крайней мере в дефолтном ядре Дебиана это так). Дальше применение такое: нажимаем и держим ALT, нажимаем SysRq, отпускаем всё и нажимаем одну из "командных" клавиш - ниже их краткое описание.


Командные клавиши
Ниже перечислены наиболее полезные клавиши, которые могут пригодиться для тех, кто проводит бесчеловечные эксперименты над системой или устанавливает проприетарные драйвера. Чтобы их легче было запомнить, будет написано слово, в котором эта буква есть по смыслу. Всё сказанное ниже актуально по крайней мере для ядер 2.6.20 и выше.

Одновременное нажатие клавиш Alt + SysRq +

'H'elp - выводит все доступные возможности SysRq, выделяя большой буквой клавишу действия;

loglevel'0'-'8' - позволяет менять уровень подробности вывода от 0 (только критические сообщения) до 8 (самый подробный режим);

re'B'oot - немедленная перезагрузка системы, прямо как клавиша RESET (без синхронизации и размонтирования файловых систем);

'C'rashdump - выполняет директиву kexec для перезагрузки, чтобы получить сведения об ошибках;

hol'D's - показывает все блокировки, которые держат устройства или файлы;

power'O'ff - корректно выключает систему (если настроено и поддерживается, обычно это прямая команда отключения);

'S'ync - пытается синхронизировать все примонтированные файловые системы, при этом пишет в консоли "Emergency Remount R/O" - когда этот процесс закончится, должно написать "Emergency Remount Complete";

'U'nmount - пытается перемонтировать все примонтированные файловые системы в режим "только-чтение";

show'T'asks - выдаст список текущих задач и информацию о них в текущую консоль;

'N'ice - используется для того, чтобы сделать задачи реального времени с изменяемым приоритетом;

sho'W'-blocked-tasks - выдаст список всех непрерываемых (заблокированных, ждущих окончание ввода-вывода) задач;

show'M'em - выдаст информацию о доступной и занятой оперативной памяти, а так же степени использования своп-файла;

'F'ull - вызвать oom_kill (out-of-memory kill) для прерывания приложений, забравших слишком много памяти (может занять продолжительное время);

secure acces 'K'ey - убивает все программы на текущей консоли, но не применяйте её на консоли, где запущены иксы (графический сервер будет остановлен и вы не сможете увидеть то, что печатаете и то, что ответит SysRq);

un'R'aw - забирает контроль над мышью и клавиатурой у Х-сервера, что полезно, если Х-севрвер завис: так можно перейти в консоль, убить Х-сервер или проверить логи;

t'E'rm - послать сигнал завершения работы SIGTERM всем процессам, кроме init.

K'I'LL - послать сигнал немедленного завершения работы SIGKILL всем процессам, кроме init.


То есть, например, для аварийной синхронизации данных жмём ALT+SysRq + s, далее ALT+SysRq + u и после этого можно жать на ресет или, что тоже самое ALT+SysRq+b

Ссылки
Помимо документации к ядру, можно почитать об этом тут и здесь.

Комментариев нет: