У вас завис компьютер с любимой операционной системой Linux? Ничего не работает, мышка не двигается? Нужно перезагружать, но боязно? Прошлый раз после перезагрузки по питанию файловая система побилась и пришлось убить пол дня на переустановку системы? Нет резервных копий личных файлов?
Как правильно перезагрузить Linux если всё висит? Вам поможет клавиша SysRq и магическая комбинация R E I S U B! После такой перезагрузки не нужно выполнять FSCK.
Кратко о SysRq
84-я клавиша SysRq (System Request) была добавлена IBM в клавиатуру IBM PC/AT для того, чтобы можно было вызывать низкоуровневые функции операционной системы без риска конфликта с любым существовавшим программным обеспечением. Для кнопки SysRq было добавлено программное прерывание BIOS номер 0x15, подфункция 0x85, которое сообщало ОС о нажатии или отпускании клавиши SysRq.
Не будем сейчас упоминать Windows, там свои заморочки. А в Linux SysRq — единственная прямая связь с ядром (если ядро ещё способно работать), которая работает всегда, даже если всё другое не работает.
Как использовать R E I S U B
Во-первых, в конфигурации ядра должно быть включено использование клавиши SysRq. CONFIG_MAGIC_SYSRQ должно иметь значение Y.
It's Magic!
Видов Linux много, где-то эта опция включена, где-то нет. В Debian и Ubuntu такая настройка есть. Проверить можно командой:
cat /proc/sys/kernel/sysrq
Если опция включена, то в ответ вернётся единица. Если вернётся ноль, то можно включить опцию:
sudo echo "1"> /proc/sys/kernel/sysrq
Можно и не полностью включать все функции:
0 — полностью отключить sysrq 1 — включить все функции sysrq 2 — включить управление уровнем логирования консоли 4 — включить управление клавиатурой (SAK, unraw) 8 — включить отладку дампов процессов и т.д. 16 — включить команду синхронизации 32 — включить перемонтирование только для чтения 64 — включить сигнализацию процессов (term, kill, oom-kill) 128 — разрешить перезагрузку/выключение 256 — разрешить выполнение всех задач RT
Можно включить несколько функций. 176 получается из суммы 128 (что позволяет перезагружаться и отключаться) + 32 (возможность перемонтировать файловые системы в режиме только для чтения) + 16 (что включает команду синхронизации). Точно так же значение 438 получается из суммы 2 + 4 + 16 + 32 + 128 + 256.
Можно представить как дискретный счётчик. 176 в двоичной системе будет 10110000, с ноликом впереди 010110000.
все нули — полностью отключить sysrq первый бит справа 1 — включить все функции sysrq второй бит справа 1 — включить управление уровнем логирования консоли третий бит справа 1 — включить управление клавиатурой (SAK, unraw) четвертый бит справа 1 — включить отладку дампов процессов и т.д. пятый бит справа 1 — включить команду синхронизации шестой бит справа 1 — включить перемонтирование только для чтения седьмой бит справа 1 — включить сигнализацию процессов (term, kill, oom-kill) восьмой бит справа 1 — разрешить перезагрузку/выключение девятый бит справа 1 — разрешить выполнение всех задач RT
Зажимаем Alt + SysRq и с интервалом в 2 секунды нажимаем по очереди клавиши R E I S U B. Каждая кнопка выполняет свою функцию. При такой комбинации происходит:
- unRaw — перехватывает управление мышью и клавиатурой у Х-сервера.
- tErminate — посылает SIGTERM всем процессам, кроме init.
- kIll — посылает SIGKILL всем процессам, кроме init.
- Sync — пытается синхронизировать все примонтированные файловые системы.
- Unmount — пытается перемонтировать все примонтированные файловые системы в режим read-only.
- reBoot — перезагрузка.
✔
Список команд SysRq в Linux
Alt + SysRq + H — помощь.
sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(v) show-blocked-tasks(w) dump-ftrace-buffer(z)
Сочетание клавиш | Действие |
Alt + SysRq + 0-9 | loglevel0-9 — позволяет менять уровень подробности вывода системных сообщений от 0 (только критические сообщения) до 9 (максимальная подробность). |
Alt + SysRq + B | reBoot — выполняет немедленную перезагрузку системы аналогично кнопке RESET. |
Alt + SysRq + C | Crashdump — выполняет директиву kexec (краш-тест) для перезагрузки, чтобы получить сведения об ошибках. Если настроено, то собирается дамп. |
Alt + SysRq + D | holDs — показывает все блокировки, которые держат устройства или файлы (требуется опция ядра CONFIG_LOCKDEP). |
Alt + SysRq + E | tErminate — посылает сигнал завершения работы SIGTERM всем процессам, кроме init. |
Alt + SysRq + F | Full — позволяет вызвать обработчик oom_kill (out-of-memory kill) для прерывания приложений, забравших слишком много памяти. |
Alt + SysRq + G | debuG — если есть отладчик kdb, то выполняется вход в отладчик. |
Alt + SysRq + H | Help — выводит все доступные возможности SysRq. |
Alt + SysRq + I | kIll — посылает сигнал немедленного завершения работы SIGKILL всем процессам, кроме init. |
Alt + SysRq + J | Just thaw it — принудительно размораживает файловые системы, замороженные FIFREEZE ioctl. |
Alt + SysRq + K | secure access Key — убивает все процессы в текущей консоли. Имитация нажатия кнопки безопасности. |
Alt + SysRq + L | bcktrace aLl cpu — выводит трассировку стека для всех активных процессоров. |
Alt + SysRq + M | showMem — выдаст информацию об оперативной памяти и свопе. Предварительно установите высокий уровень подробности вывода. |
Alt + SysRq + N | Nice — сбрасывает приоритет задач реального времени или просто с измененным приоритетом. |
Alt + SysRq + O | powerOff — выключает систему. |
Alt + SysRq + P | dumP — дамп регистров процессора. |
Alt + SysRq + Q | Q — выводит события хард-таймеров. |
Alt + SysRq + R | unRaw — перехватывает управление мышью и клавиатурой у Х-сервера. |
Alt + SysRq + S | Sync — пытается синхронизировать все смонтированные файловые системы. |
Alt + SysRq + T | showTasks — выдаст список текущих процессов. |
Alt + SysRq + U | Unmount — пытается перемонтировать все смонтированные файловые системы в режим "только чтение". |
Alt + SysRq + V | V — восстанавливает фреймбуфер консоли. Для ARM процессоров сбрасывает ETM буфер. |
Alt + SysRq + W | shoW-blocked-tasks — выдаст список всех непрерываемых (заблокированных, ждущих окончание ввода-вывода) задач. |
Alt + SysRq + X | Xmon — используется интерфейсом xmon на платформах PowerPC. Отключает блокировку (Secure Boot restrictions) для некоторых ядер. |
Alt + SysRq + Y | Y — показывает глобальные регистры процессора. |
Alt + SysRq + Z | Z — выводит содержимое буфера трассировки работы ядра. |
Примечания
Иногда клавиша SysRq совмещена на клавиатуре с какой-то другой, например PrtScr/SysRq. При нажатии получаем скриншот. Это можно обойти добавлением клавиши Ctrl. Тогда полная комбинация будет:
Ctrl + Alt + SysRq + R E I S U B
Работает только на клавиатуре, которая физически подключена к серверу.
Можно использовать PS/2 разъём если USB не работает.
На Windows R E I S U B не работает, там клавиша SysRq используется для других целей.
Если на клавиатуре несколько клавиш Alt, то может работать только с какой-то одной из них, обычно правой.
На ноутбуках может понадобиться кнопка Fn. Нажмите и удерживайте Fn + Alt. Нажмите и удерживайте SysRq. Отпустите Fn и, при необходимости, Alt, но удерживайте SysRq. R E I S U B.
Вы можете отпустить Alt после того, как удерживаете SysRq.
В серийной консоли: BREAK, потом в течение 5 секунд командную клавишу. Повторное нажатие BREAK прерывает ввод.
На хромбуке вместо SysRq используется сочетание клавиш Alt + VolumeUp или Alt+F10.
На серверах IBM Power Systems вместо SysRq используется сочетание клавиш Ctrl + O в Hardware Management Console.
В IBM mainframe вместо SysRq используется сочетание клавиш ^ + -.
Xen hypervisor может послать магическую комбинацию на виртуалку через команду xm sysrq.
Ссылки
https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html