Не всё то 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]Задаёт уровень логирования ядра и перенаправляет вывод лога на экран

Цитата.

Буквально пару дней назад писал о методе мягкой перезагрузки линукс через 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/

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

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



kma21
2011.05.19 15:22:16
#cid2671

Ответить

Можно запомнить описанную выше комбинацию как "REboot ISкусственный UBийственный". =)

imen
2012.10.19 12:07:44
#cid44660

Ответить

Почему не:

$ zgrep SYSRQ /proc/config.gz
(если функция включена)

# sysctl kernel.sysrq
kernel.sysrq = 1

imen
2012.10.19 12:56:30
#cid44666

Ответить

Включена в смысле:
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y

2012.10.19 14:53:29
#cid44682

Ответить

#cid44660, imen

Почему не:

Там цитата, чужой материал.
Подредактировал, чтобы было понятнее.
Добавил ссылку про CONFIG_IKCONFIG и CONFIG_IKCONFIG_PROC

imen
2012.10.19 15:20:12
#cid44687

Ответить

#cid44682,

Там цитата, чужой материал.
Подредактировал, чтобы было понятнее.

Тот так и работает интырнет по своему основому профилю (тиражирование популярных мифов, заблуждений и просто ошибок).
Доля материалов, не требующих доработки напильником крайне невелика.
Если цитируешь: припиши где (и почему) автор не вполне прав.
Или исправь, сделай соответствующую пометку и не поленись поставить ссылку на первоисточник вдохновения.

2012.10.19 15:38:38
#cid44689

Ответить

#cid44687, imen

Тот так и работает интырнет по своему основому профилю (тиражирование популярных мифов, заблуждений и просто ошибок).

Так там нет ошибки — просто другой вариант решения.

Если цитируешь: припиши где (и почему) автор не вполне прав.
Или исправь, сделай соответствующую пометку и не поленись поставить ссылку на первоисточник вдохновения.

Считаешь, у меня недостаточно ссылок на источники вдохновения?

lbcom
2015.06.03 01:44:19
#cid90656

Ответить

Может кто-нибудь подскажет, как происходит reset в линуксе?

то есть b вызывает:

static void sysrq_handle_reboot(int key)
{
lockdep_off();
local_irq_enable();
emergency_restart();
}

но что реально отрабатывает, каков механизм ресета?

Adrian
2015.06.21 20:51:57
#cid90704

Ответить

А вот это значение CONFIG_MAGIC_SYSRQ=y, оно только для чтения?
То есть я могу только посмотреть на него в файле config* ? Или можно, к примеру, прямо в этом файле исправить на CONFIG_MAGIC_SYSRQ=n ?

2015.06.22 08:50:59
#cid90705

Ответить

#cid90704, Adrian

А вот это значение CONFIG_MAGIC_SYSRQ=y, оно только для чтения?
То есть я могу только посмотреть на него в файле config* ? Или можно, к примеру, прямо в этом файле исправить на CONFIG_MAGIC_SYSRQ=n ?

Это информация о настройках текущего ядра при компиляции.
Содержимое файла никак не влияет на работу уже откомпилированного ядра.

This file shows you the compile-time configuration settings for the kernel (gzip compressed, use zcat or zless to see its contents). It is available only if you enable it using CONFIG_IKCONFIG_PROC when you compile.

Say you want to upgrade to the next available kernel. Your current kernel works fine, so you'd like to use the same parameters, but you accidentally lost your original .config configuration file. Simply
zcat /proc/config.gz > /usr/src/linux/.config
and you're ready to go.

http://www.linuxinsight.com/proc_config.gz.html

Adrian
2015.06.22 15:24:49
#cid90706

Ответить

Спасибо, приблизительно понятно. Редактировать файл config не имеет смысла.

Ещё вопрос. А вот эта заметка, он про какую конкретно версию Линукса ?

К примеру, с моим Linux Mint 17 (KDE, но это в данном случае наверное неважно) не совсем совпадает. Правда, я кое-как разобрался где - что. В Убунту 12.04 ещё немного по-другому -- там я меньше копался, но тоже не совсем так, как в статье, если вам это интересно знать.

Вот например выше в комменте написано

zcat /proc/config.gz > /usr/src/linux/.config

А в Linux Mint 17 KDE файл .config находится в каталоге /usr/src/linux-headers-3.13.0-24-generic. И так далее. Нужно (мне) вносить некоторые изменения.

Я сейчас пишу в своём ЖЖ заметку на эту же тему. Для себя на память -- что где находится и как это настроить. Сбросить вам потом ссылку? Или за спам посчитаете? (Ну или просто оно вам не нужно).

2015.06.23 06:36:40
#cid90708

Ответить

#cid90706, Adrian

Спасибо, приблизительно понятно. Редактировать файл config не имеет смысла.

Ещё вопрос. А вот эта заметка, он про какую конкретно версию Линукса ?

Про любую. Это ж ядро.

Вот например выше в комменте написано

zcat /proc/config.gz > /usr/src/linux/.config

А в Linux Mint 17 KDE файл .config находится в каталоге /usr/src/linux-headers-3.13.0-24-generic. И так далее. Нужно (мне) вносить некоторые изменения.

Где находятся исходники — не имеет значения. Их можно скачать вручную и расположить в домашнем каталоге пользователя, и там же компилировать. Чистая эстетика. Несущественные отличия — а они, конечно, есть в разных дистрибутивах.

imen
2015.06.23 17:01:05
#cid90709

Ответить

#cid90706, Adrian

Спасибо, приблизительно понятно. Редактировать файл config не имеет смысла.

Более того: этот конфиг не предназначен для ручного редактирования. Вообще.
Смотри make config || make menuconfig || make nconfig || make xconfig и далее.

#cid90708,

Про любую. Это ж ядро.

Ты неосторожно обращаешься с квантором всеобщности ☺
Я бы не стал так сразу вписываться на присутствие фичи в первой публичной версии Linux.

Где находятся исходники — не имеет значения. Их можно скачать вручную и расположить в домашнем каталоге пользователя, и там же компилировать. Чистая эстетика. Несущественные отличия — а они, конечно, есть в разных дистрибутивах.

Опять же: смотря для кого.
Системы сборки многих (если не всех) внешних модулей ожидают видеть текущее ядро в /usr/src/linux/ и никак иначе.
Возможность переопределения путей часто, если не обычно, отсутствует.
А ещё есть мнение, что установленный из отдельного пакета модуль не отразится в базовом конфиге ядра.
Например:
$ eix -Ic virtual

[I] app-emulation/virtualbox-modules (4.3.28@16.06.2015): Kernel Modules for Virtualbox

$ zgrep -i vbox /proc/config.gz
$ lsmod | grep vbox
vboxnetflt 15730 0
vboxnetadp 17734 0
vboxdrv 320143 2 vboxnetadp,vboxnetflt

vs_user
2016.08.31 15:06:04
#cid91652

Ответить

elementary OS live mode (без установки)
kernel.sysrq=176
Кто-нибудь знает это значение "работает" ? Спасибо!

2016.08.31 23:48:27
#cid91653

Ответить

#cid91652, vs_user

kernel.sysrq=176
Кто-нибудь знает это значение "работает" ? Спасибо!

kernel.sysrq задаёт побитовую маску. Значение 176 запрещает всё кроме синхронизации дисков (sync, S), перемонтирования только для чтения (remount-read-only, U) и перезагрузки (reboot, B).

Типа для безопасности.

Ник
2021.01.19 19:44:47
#cid92371

Ответить

Хорошая статья, немного доплню:

# List of possible values in /proc/sys/kernel/sysrq:
#
# 0 - disable sysrq completely
# 1 - enable all functions of sysrq
# >1 - bitmask of allowed sysrq functions (see below for detailed function description):
# 2 - enable control of console logging level
# 4 - enable control of keyboard (SAK, unraw)
# 8 - enable debugging dumps of processes etc.
# 16 - enable sync command
# 32 - enable remount read-only
# 64 - enable signalling of processes (term, kill, oom-kill)
# 128 - allow reboot/poweroff
# 256 - allow nicing of all RT tasks