Серверная (www.it-simple.ru)

SysRQ или как привести в чувство «зависший» Linux


Не всё то Windows, что висит.

Иногда такое случается. Вот пользователь, недавно пересевший с виндуза на линукс, сидит, работает, никого не трогает. И вдруг картинка на экране превращается в статическую, окна не двигаются и не помогает даже заветное сочетание Ctrl-Alt-BkSpace, которое подсказал админ как раз на такие случаи, потому что клавиатура тоже не работает. Что делать?

Спинной мозг с виндовым опытом, подсказывают, что надо давить кнопку Reset.

Не делайте этого!

Вы можете лишиться данных, накопленных годами работы за компьютером (конечно, надо делать резервные копии, но обычный пользователь не делает их никогда, это тема для отдельной статьи) и это ещё не самое неприятное, что может случиться.

Linux только выглядит зависшим, но на деле, скорее всего, это не так. Лично я видел только один раз действительно зависший Linux (KERNEL PANIC), но у того компьютера были серьёзные проблемы с оборудованием.

Что делать

Годы, проведённые за виндузом, заставили пользователя воспринимать клавишу PrtScr/SysRq на клавиатуре как кнопочку для снятия картинки с экрана. Наиболее продвинутые пользователи знают, что сочетание Alt-PrtScr/SysRq делает картинку не всего экрана, а только активного окна. И совсем немногие знают, что PrtScr/SysRq — одна из «низкоуровневых» клавиш, для получения сигнала с которой не нужны костыли типа драйверов.

Нажмите сочетание клавиш Alt-PrtScr/SysRq (в графике надо добавлять ещё и Ctrl, то есть нажимать Ctrl-Alt-PrtScr/SysRq) и, удерживая их, жмите на клавиатуре: R E I S U B.

Alt-PrtScr/SysRq-R — отберёт управление клавиатурой у графики Linux и заставит её работать напрямую с системой. По сути - вернёт управление клавиатурой.
Alt-PrtScr/SysRq-E — пошлёт сигнал завершения всем запущеным процессам, кроме init. То есть, все пользовательские процессы постараются завершиться в штатном режиме.
Alt-PrtScr/SysRq-I — пошлёт сигнал уничтожения всем запущенным процессам, кроме init. Теперь процессы, включая те, чьё нормальное завершение невозможно - уничтожатся.
Alt-PrtScr/SysRq-S — синхронизирует диски, что уменьшает риски повреждения данных от сбоя.
Alt-PrtScr/SysRq-U — отмонтирует все файловые системы.
Alt-PrtScr/SysRq-B — перезагрузит систему.

Между нажатиями кнопок делайте паузу, чтобы предыдущая команда успела завершиться.
Работая из "зависшей" графики делайте большую паузу.

Работа по SSH

Всё-таки лень — великая вещь. Всё вышеописанное можно сделать не только находясь рядом с компьютером, но и по удалённому доступу через SSH.

Например, делаем очень небезопасную перезагрузку:

echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger

Дополнительно

Вот список интересных сочетаний с комбинацией Alt-PrtScr/SysRq:

+КлавишаДействие
RUnRaw, выключает режим RAW клавиатуры, что позволяет её использование без системы X-Window
KSecure Access Key, убивает все программы в текущей виртуальной консоли. Полезно, когда могут работать программы, способные украсть пароль или работают процессы, мешающие переключить консоль
ESIGTERM, завершает все запущенные процессы, кроме init
ISIGKILL, уничтожает все запущенные процессы, кроме init
LkiLl, уничтожает вообще все запущенные процессы
BreBoot, немедленно перезагружает компьютер
SSync, синхронизирует диски
UUmount, отмонтирует все файловые системы
Otirn Off, немедленно выключает компьютер
PPС, выгружает регистры и указатели в консоль
TTasks, показывает в консоли список всех процессов
MMemory, показывает в консоли информацию о памяти
[0-9]Задаёт уровень логирования ядра и перенаправляет вывод лога на экран

06.10.2011 Включение системной клавиши Alt+SysRq

Цитата.

Буквально пару дней назад писал о методе мягкой перезагрузки линукс через Alt+Sysrq+REISUB, как узнал, что у многих данная комбинация попросту не срабатывает…
Оказалось, что зависит это всего лишь от одной команды для ядра, и исправляется секудным вмешательством в конфигурацию…
Прежде всего, стоит проверить поддерживает ли ядро комбинации клавиш с сипользованием SysRq:

zcat /proc/config.gz | grep -i sysrq

Ответом должно быть – CONFIG_MAGIC_SYSRQ=y
Если при этом системная клавиша SysRq не работает, значит сама возможность отключена в настройках ядра. Проверяем, так ли это командой:

sysctl -a 2>/dev/null | grep -i sysrq

Если результат будет – kernel.sysrq = 0, значит все именно так.
Для того, чтобы включить SysRq задаем в терминале команду:

sudo sysctl -w "kernel.sysrq=1"

…и все заработает
Ну а чтобы работало каждый раз после перезагрузки системы, необходимо добавить в файл /etc/sysctl.conf параметр

kernel.sysrq = 1

…либо, если данный параметр уже имеется в файле и равен нулю, сменить его значение на единичку.

http://pingvinoff.net/2011/09/07/vklyuchenie-klavishi-alt-sysrq/ (http://pingvinoff.net/2011/09/07/vklyuchenie-klavishi-alt-sysrq/)

Для однократного включения клавиши (до перезагрузки):

sudo echo '1' >/proc/sys/kernel/sysrq