Достаточно редко, когда я провожу над своей системой бесчеловечные ядерные эксперименты, она зависает наглухо - ничто не совершенно в этом мире. Именно для этих целей в ядре Линукс имеется замечательная возможность: Волшебная клавиша SysRq или Magic SysRq Key.
Что это такое?
Если внимательно посмотреть на клавиатуру, там обнаружится кнопка PrtSc / SysRq. Подавляющее большинство пользователей Windows полагают, что она специально присутствует на клавиатуре для скриншотов. Однако кнопка Magic SysRq Key появилась на клавиатурах задолго до Microsoft.
На самом деле эта клавиша - наша единственная прямая связь с ядром, которая работает всегда. При помощи некоторых комбинаций клавиш можно заставить систему аварийно сбросить данные на диски, размонтировать все файловые системы в режим "только-чтение" и перезагрузиться даже при наглухо зависшей системе.
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.
Ссылки
Помимо документации к ядру, можно почитать об этом тут и здесь.
31 комментариев: |высказаться!| RSS-лента дискуссии.|
>>secure acces 'K'ey - убивает все программы на текущей консоли, но не применяйте её на консоли, где запущены иксы (графический сервер будет остановлен и вы не сможете увидеть то, что печатаете и то, что ответит SysRq);
Хм, иногда удобно, если просто нужно перегрузить X'ы...
>>вы не сможете увидеть то ... что ответит SysRq
dmesg и messages еще никто не отменял =).
УХ ТЫ! Нет слов. СПАСИБО за наводку на столь интересный факт.
а как быстро убедиться, что CONFIG_MAGIC_SYSRQ включена?
У меня в этче не работает
И непонятно - откуда нажимать на эти комбинации - из терминала, запущенного из иксов, или перейти чисто консольный режим?
(кстати не посоветуете русскоязычный форум по дебиан)
Определить, включена ли опция CONFIG_MAGIC_SYSRQ можно так:
# grep CONFIG_MAGIC_SYSRQ /proc/config.gz
или так:
# grep CONFIG_MAGIC_SYSRQ /usr/src/.config
Если быть точным, то
$ zgrep CONFIG_MAGIC_SYSRQ /proc/config.gz
(_z_grep!)
Кстати, при следующей чистке постов, думаю было бы полезным добавить в этот пост способ определения того, как проверить "включенность" соответствующей опции ядра
А разве на надо включать предварительно?
echo "1" > /proc/sys/kernel/sysrq
P.S. Могу заблуждатся, дело было давно...
Анонимному: главный русский форум по Debian — это его рассылка. Читать через веб-интерфейс её можно, например, здесь: http://groups.google.com/group/linux.debian.user.russian/topics
Спасибо. Отличная и полезная статья. Хочу тоже написать чего-нибудь полезного, да идей все нет. Впрочем, я все не о том. :)
Михаил, когда-то давно я у тебя интересовался, что же ты думаешь по поводу использования RSS для переправки читателям полных постов. И, насколько я помню, ты говорил, что собираешься сделать отдельный RSS-фид для тех, кто хочет читать твои посты целиком из RSS-читалок. Есть ли какие-то движение в этом направлении?
2 Ni@m пишет...
dmesg и messages еще никто не отменял =)
Иногда они бывают недоступны.
2 JaGoTerr пишет...
УХ ТЫ! Нет слов.
Ага, точно :-) Я на это набрёл, когда в ядре открыл Kernel hacking. Полезная вещь - иногда требуется.
СПАСИБО за наводку на столь интересный факт
Это возможность ядра. Кстати, от версии к версии назначение и наименование кнопок меняется.
2 Анонимный пишет...
У меня в этче не работает
Не может быть - оно включено в дистрибутивном ядре. Проверял.
И непонятно - откуда нажимать на эти комбинации
ОТКУДА УГОДНО! В том вся соль и есть - это прямая связь с ядром, где бы вы ни были.
2 JaGoTerr пишет...
Кстати, при следующей чистке постов, думаю было бы полезным добавить в этот пост способ определения того, как проверить "включенность" соответствующей опции ядра
Разумно. Поместил в список исправлений.
2 Dormestmass пишет...
А разве на надо включать предварительно?
Нет, если оно включено в ядре, то не надо. Так можно выключить это на время и включить снова. Но лушче не выключать :-)
2 vonderer@darkstar пишет...
Спасибо. Отличная и полезная статья.
Пожалуйста. Собственно, я распечатал её и повесил у себя рядом с монитором. На всякий случай :-)
Хочу тоже написать чего-нибудь полезного, да идей все нет.
Скромность тебе, Андрей, идёт. :-)
Михаил, когда-то давно я у тебя интересовался, что же ты думаешь по поводу использования RSS для переправки читателям полных постов.
Ммм... копаюсь в feedburner. Пока вразумительного ничего не нашёл. На самом деле, у многих людей трафик лимитный (например, у меня :-)) и сильно бесит грузить всю ленту с картинками на пару мегабайт.
Лент надо делать две. Кто крут в веб-дизайне и хаках блоггера - буду очень признателен.
Ну класс :)
/коммент считать трэкбэком ;)/
http://blog.rizn.org/magic-sysrq/
Поправка:
>> нажимаем и держим ALT, нажимаем SysRq, **отпускаем всё** и нажимаем одну из "командных" клавиш
Нажимать командную клавишу нужно не отпуская Alt + SysRQ.
Кстати, для корректной перезагрузки системы в случае зависания используется последовательность командных клавиш REISUB (Raising Elephants Is So Utterly Boring).
2 Анонимный комментирует...
Это только в Linux такое есть, или в Unix тоже?
Юниксов много, я за них не в ответе :-) По крайней мере под Линуксом пашет.
Спасибо, полезная инфа,
на Кубунту работает :)
http://ramalokehrota.blogspot.com/2007/07/magic-sysrq.html
А что делать, если на клавиатуре нет такой кнопки Logitech Y-SAE71?
Есть еще и демон sysrqd, занимется теми же "чудесами" но удаленно.
нажимаем и держим ALT, нажимаем SysRq, отпускаем всё и нажимаем одну из "командных" клавиш - ниже их краткое описание.
Мелкая поправочка или конкретная особенность в *ubuntu командные клавиши надо нажимать удерживая Alt.
2 Pavel A. Bragin пишет...
А что делать, если на клавиатуре нет такой кнопки Logitech Y-SAE71?
Она должна где-то быть. Может быть, её клавиатурный код принадлежит другой кнопке... Кстати, надо будет выяснить.
Pavel A. Bragin пишет...
А что делать, если на клавиатуре нет такой кнопки Logitech Y-SAE71?
Клавиша Print Screen (над * на дополнительной клавиатуре) - это она и есть, просто на ней не написано SysRq. На всякий случай скан-код: keycode 111 (keysym 0xff61, Print)
Mr.Floppy пишет...
Клавиша Print Screen (над * на дополнительной клавиатуре) - это она и есть, просто на ней не написано SysRq. На всякий случай скан-код: keycode 111 (keysym 0xff61, Print)
А вот и неправда ваша....по нажатии на Alt+этот самый Print Screen (еще что-то даже нажать не успеваю) на моей Ubuntu 7.04 выскакивает окошко сохранения экрана. В ядре вае необходимые функции включены. на счет скан-кода посмотрю на досуге что выдает.
Pavel A. Bragin пишет...
по нажатии на Alt+этот самый Print Screen (еще что-то даже нажать не успеваю) на моей Ubuntu 7.04 выскакивает окошко сохранения экрана.
Обычная гномовская привязка, на функционирование клавиш, перехватываемых ядром, никак не влияющая.
нажимаем и держим ALT, нажимаем SysRq, отпускаем всё и нажимаем одну из "командных" клавиш
Я не знаю почему, но у меня уже давным-давно перестала работаь перезагрузка (alt+sysrq+b). Ума не приложу, в чём тут дело.
Интересная фича. Попробовал потестить, не работало. Поэкспериментировал, выяснилось, что
>> нажимаем и держим ALT, нажимаем SysRq, **отпускаем всё** и нажимаем одну из "командных" клавиш
не срабатывает, правильно:
нажимаем и держим ALT, нажимаем SysRq, **отпускаем SysRq** и нажимаем одну из "командных" клавиш
По крайней мере, в Debian Lenny (testing, amd64) так...
[user@localhost ~]$ sudo grep CONFIG_MAGIC_SYSRQ /usr/src/.config
Пароль:
grep: /usr/src/.config: Нет такого файла или каталога
[user@localhost ~]$ sudo grep CONFIG_MAGIC_SYSRQ /proc/config.gz
grep: /proc/config.gz: Нет такого файла или каталога
[user@localhost ~]$ zgrep CONFIG_MAGIC_SYSRQ /proc/config.gz
gzip: /proc/config.gz: No such file or directory
[user@localhost ~]$ sudo echo "1" > /proc/sys/kernel/sysrq
bash: /proc/sys/kernel/sysrq: Отказано в доступе
Ваши проверки не работают на Fedora 8.
[user@localhost ~]$ uname -a
Linux localhost.localdomain 2.6.23.1-42.fc8 #1 SMP Tue Oct 30 13:55:12 EDT 2007 i686 athlon i386 GNU/Linux
2Fast4U, конечно не работает)) это же блог для Дебиана и его вытекающих...
а для нас с вами вот, к примеру:
# grep CONFIG_MAGIC_SYSRQ /usr/src/kernels/2.6.27.12-78.2.8.fc9.i686/.config
CONFIG_MAGIC_SYSRQ=y
влючайте мозги и гугл, товарищ))
> [user@localhost ~]$ sudo echo "1" > /proc/sys/kernel/sysrq
> bash: /proc/sys/kernel/sysrq: Отказано в доступе
Ну что вы, действие sudo на перенаправления ни разу не распространяется. echo "1" выполнится с привилегиями и вернет шеллу текст, а шелл (то есть bash) запушен под пользователем user, который прав писать в /proc/sys/... не имеет, о чем bash и рапортует.
Хорошая и весьма полезная статья. Впрочем, хватит о хорошем. :)
Очень неудобно, что на блоге нет кнопки "версия для печати".
@Анонимный комментирует...
Хорошая и весьма полезная статья.
Плохих не держим-с. :-) Ну, почти...
Очень неудобно, что на блоге нет кнопки "версия для печати".
О, это ты правильно говоришь, Анонимус. Вот если б ты ещё сказал, как это сделать - цены б тебе не было. Я гуглил-гуглил, да так и не загуглил решение. Может тебе улыбнётся золотая рыбка? Если что - таки не стесняясь отгружай в комменты. Выкрою время и сделаю.
на иксах Alt+SysRq+* не работает, нужен Ctrl+Alt+SysRq+*
Да, работает, но сначала не получалось почему-то с командой "H", всяко тыкал :D
Alt+SysRq+k сработало, иксы перезапустились, инет вырубило и музыку.
zgrep CONFIG_MAGIC_SYSRQ /proc/config.gz & other commands - not worked at Kubuntu 15.04
Отправить комментарий