Не всё то 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:
+Клавиша | Действие |
---|---|
R | UnRaw, выключает режим RAW клавиатуры, что позволяет её использование без системы X-Window |
K | Secure Access Key, убивает все программы в текущей виртуальной консоли. Полезно, когда могут работать программы, способные украсть пароль или работают процессы, мешающие переключить консоль |
E | SIGTERM, завершает все запущенные процессы, кроме init |
I | SIGKILL, уничтожает все запущенные процессы, кроме init |
L | kiLl, уничтожает вообще все запущенные процессы |
B | reBoot, немедленно перезагружает компьютер |
S | Sync, синхронизирует диски |
U | Umount, отмонтирует все файловые системы |
O | tirn Off, немедленно выключает компьютер |
P | PС, выгружает регистры и указатели в консоль |
T | Tasks, показывает в консоли список всех процессов |
M | Memory, показывает в консоли информацию о памяти |
[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/
Для однократного включения клавиши (до перезагрузки):
sudo echo '1' >/proc/sys/kernel/sysrq
- ВикипедиЯ: SysRq
- The Linux Kernel
- Linux Guide/Freezes
- Удаленная перезагрузка Linux
- Включение системной клавиши Alt+SysRq
- Про CONFIG_IKCONFIG и CONFIG_IKCONFIG_PROC
Комментарии
kma21
#cid2671
Ответить
Можно запомнить описанную выше комбинацию как "REboot ISкусственный UBийственный". =)
imen
#cid44660
Ответить
Почему не:
$ zgrep SYSRQ /proc/config.gz
(если функция включена)
# sysctl kernel.sysrq
kernel.sysrq = 1
imen
#cid44666
Ответить
Включена в смысле:
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
#cid44682
Ответить
#cid44660, imen
Там цитата, чужой материал.
Подредактировал, чтобы было понятнее.
Добавил ссылку про CONFIG_IKCONFIG и CONFIG_IKCONFIG_PROC
imen
#cid44687
Ответить
#cid44682,
Тот так и работает интырнет по своему основому профилю (тиражирование популярных мифов, заблуждений и просто ошибок).
Доля материалов, не требующих доработки напильником крайне невелика.
Если цитируешь: припиши где (и почему) автор не вполне прав.
Или исправь, сделай соответствующую пометку и не поленись поставить ссылку на первоисточник вдохновения.
#cid44689
Ответить
#cid44687, imen
Так там нет ошибки — просто другой вариант решения.
Считаешь, у меня недостаточно ссылок на источники вдохновения?
lbcom
#cid90656
Ответить
Может кто-нибудь подскажет, как происходит reset в линуксе?
то есть b вызывает:
static void sysrq_handle_reboot(int key)
{
lockdep_off();
local_irq_enable();
emergency_restart();
}
но что реально отрабатывает, каков механизм ресета?
lbcom
#cid90657
Ответить
вот немного подробнее: http://mjg59.livejournal.com/137313.html
и http://superuser.com/questions/294681/how-does-a-computer-restart-itself
Adrian
#cid90704
Ответить
А вот это значение CONFIG_MAGIC_SYSRQ=y, оно только для чтения?
То есть я могу только посмотреть на него в файле config* ? Или можно, к примеру, прямо в этом файле исправить на CONFIG_MAGIC_SYSRQ=n ?
#cid90705
Ответить
#cid90704, Adrian
Это информация о настройках текущего ядра при компиляции.
Содержимое файла никак не влияет на работу уже откомпилированного ядра.
http://www.linuxinsight.com/proc_config.gz.html
Adrian
#cid90706
Ответить
Спасибо, приблизительно понятно. Редактировать файл config не имеет смысла.
Ещё вопрос. А вот эта заметка, он про какую конкретно версию Линукса ?
К примеру, с моим Linux Mint 17 (KDE, но это в данном случае наверное неважно) не совсем совпадает. Правда, я кое-как разобрался где - что. В Убунту 12.04 ещё немного по-другому -- там я меньше копался, но тоже не совсем так, как в статье, если вам это интересно знать.
Вот например выше в комменте написано
А в Linux Mint 17 KDE файл .config находится в каталоге /usr/src/linux-headers-3.13.0-24-generic. И так далее. Нужно (мне) вносить некоторые изменения.
Я сейчас пишу в своём ЖЖ заметку на эту же тему. Для себя на память -- что где находится и как это настроить. Сбросить вам потом ссылку? Или за спам посчитаете? (Ну или просто оно вам не нужно).
#cid90708
Ответить
#cid90706, Adrian
Про любую. Это ж ядро.
Где находятся исходники — не имеет значения. Их можно скачать вручную и расположить в домашнем каталоге пользователя, и там же компилировать. Чистая эстетика. Несущественные отличия — а они, конечно, есть в разных дистрибутивах.
imen
#cid90709
Ответить
#cid90706, Adrian
Более того: этот конфиг не предназначен для ручного редактирования. Вообще.
Смотри 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
#cid91652
Ответить
elementary OS live mode (без установки)
kernel.sysrq=176
Кто-нибудь знает это значение "работает" ? Спасибо!
#cid91653
Ответить
#cid91652, vs_user
kernel.sysrq задаёт побитовую маску. Значение 176 запрещает всё кроме синхронизации дисков (sync, S), перемонтирования только для чтения (remount-read-only, U) и перезагрузки (reboot, B).
Типа для безопасности.
Ник
#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