Перейти к основному содержанию

R E I S U B — магическая низкоуровневая перезагрузка Linux

Linux

У вас завис компьютер с любимой операционной системой 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

Теги

 

Похожие материалы

Уменьшение виртуального диска с LVM

У нас есть виртуальная машина, на ней есть диск. Диск большой, данных мало. Наша задача - сделать диск меньшего размера. На борту Logical Volume Manager (LVM). Gparted не умеет переносить данные на LVM разделах. Будем делать всё руками.