Клавиша Magic SysRq

Клавиша Magic SysRq (англ. magic SysRq key) — это специальная комбинация клавиш, обрабатываемая ядром Linux, позволяющая пользователю выполнять различные низкоуровневые команды вне зависимости от текущего состояния системы. Обычно применяется для восстановления работоспособности при зависании системы или для перезагрузки компьютера без повреждения файловой системы[1].

Эта комбинация клавиш предоставляет доступ к средствам для аварийного восстановления, являясь своеобразной escape-последовательностью. Основные поддерживаемые команды позволяют принудительно размонтировать файловые системы, завершать процессы, восстанавливать состояние клавиатуры и записывать невыгруженные данные на диск.

Клавиша Magic SysRq не работает в определённых ситуациях, например, при панике ядра[2] или аппаратных сбоях, мешающих корректной работе ядра.

Реализация

В ядре Linux реализована поддержка Magic SysRq в исходном файле sysrq.c[3]. Функциональность Magic SysRq может быть вызвана и из драйверов работы с последовательным портом[4][5] на низком уровне.

Команды

Комбинация Magic SysRq обычно состоит из Alt + SysRq («Системный запрос») и дополнительной управляющей клавиши, задающей необходимую команду. Клавишу SysRq можно отпустить до нажатия командной клавиши, пока Alt остаётся зажатой.

Как правило, команды привязаны к раскладке клавиатуры QWERTY. Например, при использовании раскладки Дворака комбинация для выключения системы использует клавишу R вместо O. На некоторых клавиатурах отдельная клавиша SysRq отсутствует, но тогда её функцию может выполнять присутствующая PrtScn («Print Screen»).

На некоторых устройствах, в частности ноутбуках, для использования Magic SysRq нередко необходимо дополнительно удерживать клавишу Fn. Например, на Thinkpad Carbon X1 клавиша SysRq активируется одновременно нажатием Alt+Fn+S, затем Fn и S можно отпустить, удерживая Alt[6].

Функции Magic SysRq могут быть задействованы и без клавиатуры (см. ниже: Альтернативные способы вызова Magic SysRq). Некоторые команды по умолчанию могут быть отключены, что регулируется битовой маской в /proc/sys/kernel/sysrq[7].

Действие QWERTY Дворак AZERTY Colemak
Установить уровень журналирования консоли (контролирует тип сообщений ядра, выводимых в консоль) 09 09 09
(без ⇧ Shift)
09
Немедленная перезагрузка системы без размонтирования/синхронизации файловых систем b x b b
Инициировать сбой (crash) системы; создаётся дамп ядра, если настроен c j c c
Показать все захваченные блокировки (требуется параметр ядра ) d e d s
Послать сигнал всем процессам кроме (PID 1) e . e f
Вызвать (убить процесс ради освобождения памяти при OOM) f u f t
При использовании режимов настройки ядра (KMS)} — переключить на фреймбуферную консоль ядра.
Если присутствует встроенный отладчик , — перейти в него.
g i g d
Краткая справка по командам
Любая клавиша, не назначенная отдельной функции, также вызывает это.
h d h h
Послать сигнал всем процессам кроме (PID 1) i c i u
Принудительно «размораживает» ранее замороженные файловые системы (после вызова ioctl ) j h j n
Убить все процессы на текущей виртуальной консоли
Изначально создано как аналог секурной клавиши
k t k e
Показать обратную трассу вызовов (stack backtrace) для всех активных CPU l n l i
Вывести информацию об используемой памяти m m , m
Сбросить приоритеты (nice) всех задач с высоким и реальным приоритетом n b n k
Полное выключение системы o r o y
Показать текущий набор регистров и флагов процессора p l p ;
Показать все активные высокоточные таймеры и источники часов q ' a q
Переключить клавиатуру из raw-режима (используемого X11 и SVGAlib) в XLATE-режим r p r p
Синхронизировать все смонтированные файловые системы s o s r
Вывести список задач и их состояние t y t g
Перемонтировать все файловые системы в режим только для чтения u g u l
Насильно восстановить фреймбуферную консоль.
Для ARM — вывести дамп буфера ETM.
v k v v
Показать список заблокированных (d state) задач w , z w
Используется только интерфейсом xmon на PowerPC, и для других задач на SPARC64 и MIPS (вывод регистра, дамп TLB и др.)[8] x q x x
Показать глобальные регистры CPU (только для SPARC-64) y f y j
Сохранить буфер ftrace z ; w z
Отладочный дамп планировщика BPF D
Воспроизвести сообщения журнала ядра на консолях R
Отключить планировщик BPF и вернуться к CFS S

Пример вывода команды 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) dump-sched-ext(D) replay-kernel-logs(R) reset-sched-ext(S)

Настройка

Функционирование Magic SysRq контролируется как на этапе компиляции ядра через опцию[4], так и посредством параметра ядра sysctl — .

В новых версиях ядра (начиная с 2.6.12[9]) возможен более детализированный контроль: значение, записанное в , может быть 0 (отключено), 1 (разрешено всё) или битовой маской, определяющей разрешённые функции[10]. Например, в Ubuntu соответствующее значение задаётся при загрузке из файла .

Использование

До появления журналируемых файловых систем частое применение Magic SysRq заключалось в безопасной перезагрузке зависшей машины Linux (последовательность клавиш, известная как REISUB), что снижало риск повреждения файловой системы. Для современных файловых систем принудительная синхронизация и размонтирование всё ещё актуальны для сброса данных на диск, хотя и не обязательны для предотвращения порчи данных; в ряде случаев преждевременная перезагрузка может даже повысить риск повреждения[11]. По умолчанию в дистрибутивах Ubuntu и Debian значение kernel.sysrq обычно составляет 176 (разрешены sync, unmount, reboot), а в Debian — 438[12] (дополнительно loglevel, unraw, nice-all-RT-tasks).

Ранее Magic SysRq использовался для принудительного завершения зависших графических приложений: система окон X Window System полностью контролировала ввод и видеорежим, и обычные сочетания клавиш оказывались неэффективны.

В дистрибутивах без отдельной команды переключение в текстовую консоль обычно вызывается клавишами Ctrl+Alt+F1 (или F2, F3, в зависимости от системы).

Альтернативные способы вызова Magic SysRq

Хотя изначально Magic SysRq реализовывался через обработчик клавиатуры в ядре для целей отладки, функциональность доступна и через виртуальную файловую систему proc, что обеспечивает управление удалёнными и headless-системами. Из пользовательского пространства (терминала) действия SysRq осуществимы посредством записи в (например, echo s > /proc/sysrq-trigger)[1].

На многих встраиваемых и серверных системах вместо клавиатуры используется последовательный порт. В этом случае Magic SysRq вызывается через serial-консоль путём отправки сигнала Break, после чего нажимается нужная клавиша. Конкретный способ зависит от используемого программного или аппаратного обеспечения. Необходимо также включить соответствующую опцию sysctl[13].

Демоны [14] и [15] позволяют выполнять команды SysRq по TCP после простейшей аутентификации. Демон [16] позволяет автоматически задействовать выбранные SysRq по достижении определённой загрузки системы.

Гипервизор Xen поддерживает передачу Magic SysRq приглашённых доменам через команду [17]; также команда SysRq может быть отправлена с помощью break-последовательности через консоль: Ctrl+O, затем нужная клавиша.

В гипервизоре KVM команда Magic SysRq отправляется в виртуальную машину через команду [18]:

virsh send-key --domain domainname --keycode KEY_LEFTALT KEY_SYSRQ KEY_S

На ноутбуках Chromebook, где отсутствует отдельная клавиша SysRq, используется сочетание Alt+VolumeUp (или Alt+F10)[19][20][21], хотя часть команд может различать используемые клавиши[22][23].

На серверах IBM Power Systems вызов Magic SysRq производится через Ctrl+O в аппаратном интерфейсе Hardware Management Console.

Для разделов мейнфреймов IBM совместимая функция вызывается комбинацией ^+-, затем нужная клавиша на терминале 3270 или HMC.

Примечания

  1. 1 2 Linux Magic System Request Key Hacks. kernel.org (12 августа 2013). Дата обращения: 29 июля 2024.
  2. Mel Khamlichi. Use Magic SysRq Combination Key to Recover from a Frozen System in Linux. Unixmen (18 октября 2010). Дата обращения: 29 июля 2024. Архивировано 20 августа 2014 года.
  3. linux/drivers/tty/sysrq.c at master · torvalds/linux (англ.). GitHub. Дата обращения: 27 марта 2025.
  4. 1 2 linux/drivers/usb/serial/generic.c at 6537cfb395f352782918d8ee7b7f10ba2cc3cbf2 · torvalds/linux (англ.). GitHub. Дата обращения: 27 марта 2025.
  5. linux/include/linux/serial_core.h at 6537cfb395f352782918d8ee7b7f10ba2cc3cbf2 · torvalds/linux (англ.). GitHub. Дата обращения: 27 марта 2025.
  6. Alt+SysRq on a laptop (англ.). Super User. Дата обращения: 25 июля 2023.
  7. Linux Magic System Request Key Hacks — The Linux Kernel documentation. www.kernel.org. Дата обращения: 29 июля 2024.
  8. Linux Magic System Request Key Hacks (13 сентября 2021). Дата обращения: 25 сентября 2022.
  9. Calleja, Diego Linux 2.6.12. Linux Kernel Newbies (17 июля 2012). Дата обращения: 31 августа 2013.
  10. QA/Sysrq. Fedora Project (9 мая 2013). Дата обращения: 9 апреля 2015.
  11. Documentation: sysrq: don't recommend 'S' 'U' before 'B'. Git. Kernel (6 сентября 2019).
  12. 4.9. Restricting the use of the Magic SysRq key. Securing Debian Manual. Дата обращения: 20 августа 2024.
  13. Glen Turner; Mark F. Komarinski. Magic SysRq key. Remote Serial Console How-To. The Linux Documentation Project (31 марта 2003). Дата обращения: 8 мая 2015.
  14. Julien Danjou. sysrqd. GitHub. Дата обращения: 13 сентября 2016.
  15. Folkert van Heusden. tcpconsole. Дата обращения: 31 августа 2013. Архивировано 31 августа 2017 года.
  16. Paul Morgan. hangwatch. GitHub. Дата обращения: 31 августа 2013.
  17. 27. The xm command quick reference. Enterprise Linux 5 Virtualization Guide. RedHat. Дата обращения: 31 августа 2013.
  18. 20.26. Sending a Keystroke Combination to a Specified Guest Virtual machine. docs.redhat.com. Дата обращения: 29 июля 2025.
  19. Debug Button Shortcuts. Chromium OS docs. Дата обращения: 22 октября 2018.
  20. CHROMIUM: sysrq: treat F10 as magic sysrq key. Дата обращения: 11 июля 2016.
  21. Chromium OS dev: SysRq in ChromiumOS' kernel. Дата обращения: 11 июля 2016.
  22. Helping debug system hangs. The Chromium Projects. Дата обращения: 25 сентября 2018.
  23. CHROMIUM: sysrq: add ability for sysrq-x to signal chrome/X. Дата обращения: 12 апреля 2018.

Литература

Категории