Поиск по сайту:

Как использовать клавишу Magic SysRq в Linux для восстановления зависшей системы


Клавиша Linux Magic SysRq — это функция на уровне ядра, которая позволяет отправлять экстренные команды напрямую на зависшую систему Linux, нажимая Alt + SysRq + буква команды.

В этом подробном руководстве мы обсудим, что именно представляет собой клавиша Magic SysRq, когда её использовать (а когда нет), и, наконец, как использовать клавишу Magic SysRq для безопасного восстановлении зависшей системы Linux.

Краткое резюме

Клавиша Magic SysRq — это функция ядра Linux, которая позволяет отправлять прямые команды вашей системе даже когда она зависла или не отвечает. Считайте её жёстко встроенной панелью аварийного управления, которая обходит обычные процессы.

Он может сохранять данные, безопасно перезагружать сбойную систему или помогать диагностировать серьёзные проблемы. Но он также может выявлять угрозы безопасности, если его неправильно использовать.

Что на самом деле представляет собой клавиша Magic SysRq

Клавиша Magic SysRq встроена непосредственно в ядро Linux. Согласно официальной документации ядра Linux, она описывается как «волшебная комбинация клавиш, которую вы можете нажать, и на которую ядро отреагирует независимо от того, что оно делает в данный момент, если только оно полностью не заблокировано».

Он реагирует на специальные комбинации клавиш, которые обращаются напрямую к ядру, минуя все пользовательские программы и службы. Функциональность реализована в исходном файле ядра drivers/tty/sysrq.c.

Название происходит от клавиши SysRq (System Request), которая встречается на некоторых клавиатурах. На большинстве современных клавиатур эта клавиша совмещена с кнопкой Print Screen.

Когда вы нажимаете правильную комбинацию, ядро немедленно выполняет низкоуровневые команды. Нет ожидания ответа от процессов. Нет запроса разрешения у аварийно завершившего работу программного обеспечения.

Чего это не является

Клавиша Magic SysRq не является обычным сочетанием клавиш. Это не программа, которую вы устанавливаете, и не служба, которая может дать сбой. Это код ядра, который выполняется при срабатывании.

Почему эта функция существует

Системные сбои случаются. Программное обеспечение зависает. Иногда весь ваш рабочий стол замерзает, и ничего не реагирует.

В этих ситуациях у вас есть три варианта:

  1. Удерживайте кнопку питания и выполните жесткое завершение работы (риск для данных)
  2. Ожидать восстановления системы бесконечно (обычно бесполезно)
  3. Используйте Magic SysRq для корректного завершения работы (может сохранить ваши данные)

Эта функция была добавлена в Linux для аварийного восстановления и отладки ядра. Системные администраторы используют её для отладки проблем ядра, завершения неконтролируемых процессов или принудительной чистой перезагрузки удалённых серверов.

Как вызвать команды Magic SysRq

Основная схема проста: удерживайте определённые клавиши, затем нажмите командную букву.

На большинстве систем x86:

  • Удерживайте Alt + SysRq (или Print Screen)
  • Удерживая эти клавиши, нажмите командную букву

На некоторых ноутбуках:

  • Нажмите и удерживайте Alt + Fn + SysRq
  • Затем нажмите командную букву

Пример: Чтобы немедленно перезагрузить, удерживайте Alt + SysRq и нажмите b.

Документация ядра отмечает, что некоторые клавиатуры не могут обрабатывать одновременное нажатие множества клавиш. Если это происходит, попробуйте: нажмите Alt, нажмите SysRq, отпустите SysRq, нажмите клавишу команды, затем отпустите все клавиши.

Важное примечание: Клавиши команд отличают регистр. Документация ядра прямо указывает на это. Строчная r и заглавная R — это две совершенно разные команды. Все команды SysRq строчные. Это особенно важно при прямом использовании /proc/sysrq-trigger.

Наиболее полезные команды SysRq

В официальной документации ядра перечислено множество команд. Ниже приведены наиболее часто используемые команды. Все они написаны строчными буквами:

1. r - Выключает сырой режим клавиатуры, устанавливает его в XLATE (unraw)

X и Wayland переводят клавиатуру в сырой режим для эксклюзивного управления вводом. Эта команда восстанавливает нормальную обработку ввода ядром.

2. e - Отправляет SIGTERM всем процессам (кроме init/PID 1)

Запрашивает у программ корректное завершение работы.

3. i - Отправляет SIGKILL всем процессам (кроме init/PID 1)

Принудительно завершает процессы немедленно.

4. s - Синхронизирует все смонтированные файловые системы

Записывает кэшированные данные на диск. Документация ядра отмечает: дождитесь появления «OK» и «Done» на экране, прежде чем продолжить.

5. u - Перемонтирует файловые системы в режиме только для чтения

Защищает данные от записи во время завершения работы. Снова дождитесь «OK» и «Готово».

6. b - Перезагружается немедленно

Без синхронизации и отмонтирования. Это эквивалентно нажатию кнопки сброса.

7. o - Выключает систему (если ваше оборудование и ядро это поддерживают)

8. f - Вызывает убийцу OOM

Убивает процесс, потребляющий много памяти. Если ничего нельзя убить, ядро не будет испытывать панику.

9. h - Показывает справку в журналах ядра

Выводит список всех доступных команд SysRq.

Последовательность REISUB: безопасное завершение работы при полном зависании

Последовательность REISUB

Когда ваша система полностью зависла, используйте эту последовательность для безопасного завершения работы. Каждая строчная буква отправляет одну команду:

  • r - Выключить режим необработанной клавиатуры (unraw) и позволить ядру обрабатывать следующие нажатия клавиш
  • e - Корректно завершить все процессы (SIGTERM)
  • i - Убить все оставшиеся процессы (SIGKILL)
  • s - Синхронизировать данные на диск и дождаться завершения активности диска
  • u - Перемонтировать файловые системы только для чтения
  • b - Перезагрузка

    Удерживайте Alt + SysRq на протяжении всего времени. Нажимайте каждую букву отдельно с паузой в 1-2 секунды между ними. Дайте каждому шагу время завершиться перед нажатием следующей.

    Две мнемоники, которые помогут вам запомнить REISUB:

    • "Перезагрузить, даже если система полностью сломана"
    • «Выращивание слонов настолько ужасно скучное»

    Оба соответствуют одной и той же последовательности букв. Используйте то, что лучше запомнится.

    Примечание о современных файловых системах:

    До того как журнальные файловые системы стали стандартом, REISUB был необходим для предотвращения повреждения файловой системы при жесткой перезагрузке. С современными журнальными файловыми системами (ext4, btrfs, xfs) шаги s и u по-прежнему помогают записать данные на диск, но они больше не обязательны для предотвращения повреждения при перезагрузке.

    В редких случаях, особенно когда сам ядро находится в поврежденном состоянии, шаги синхронизации и повторного монтирования теоретически могут увеличить риск повреждения, а не уменьшить его. На практике выполнение s и u перед b по-прежнему является хорошей привычкой в большинстве ситуаций.

    Проверка, включен ли SysRq

    Magic SysRq должен быть скомпилирован в ядро с включенной опцией CONFIG_MAGIC_SYSRQ, что имеет место во всех основных дистрибутивах. Значение по умолчанию для CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE в исходниках ядра равно 1.

    Вот как проверить, что в данный момент активно на вашей системе:

    cat /proc/sys/kernel/sysrq

    Число, которое вы видите, контролирует, что включено. Согласно документации ядра:

    • 0=Полностью отключено
    • 1=Все команды включены
    • >1=Битовая маска разрешённых функций

    Значения битовой маски:

    ЗначениеШестигранникФункция
    20x2Уровень ведения журнала консоли управления
    40x4Клавиатура управления (SAK, unraw)
    80x8Включить дампы отладки
    160x10Включить команду синхронизации
    320x20Включить повторное монтирование только для чтения
    640x40Процессы сигналов (term, kill, oom-kill)
    1280x80Разрешить перезагрузку/выключение
    2560x100Разрешить повышение приоритета всех задач RT

    Типичные значения по умолчанию для распределения:

    • Ubuntu: 176 (16+32+128 — синхронизация, перемонтирование, перезагрузка) — широко сообщалось, но точное значение может отличаться; проверьте /etc/sysctl.d/10-magic-sysrq.conf на вашей системе
    • Debian: 438 (2+4+16+32+128+256)

    Примечание для пользователей systemd:

    На некоторых дистрибутивах, где systemd управляет этим значением (в частности, Arch Linux и производные), systemd по умолчанию устанавливает битовую маску в 0x10 (десятичное 16), что включает только команду sync и отключает сигнализацию процессов и перезагрузку. Если вы используете систему на базе systemd и REISUB не работает полностью, это, вероятно, является причиной.

    Чтобы временно включить все команды:

    echo 1 | sudo tee /proc/sys/kernel/sysrq

    Чтобы сделать это постоянным, создайте конфигурационный файл для подстановки:

    # /etc/sysctl.d/99-sysrq.conf
    kernel.sysrq = 1

    Затем перезагрузите:

    sudo sysctl --system

    Рекомендуемое чтение:

    • Объяснение директорий Drop-In (.d) в Linux - безопасный способ управления конфигурационными файлами

    Когда на самом деле использовать функцию REISUB

    Используйте Magic SysRq, когда:

    • Ваш рабочий стол полностью зависает, и ничего не реагирует
    • SSH-соединение разорвано, но сервер может быть все еще жив
    • Процесс заблокировал всю систему
    • Вам нужно перезагрузиться, но обычное завершение работы зависает
    • Вы отлаживаете паники ядра или сбои

    Не используйте это, когда:

    • Обычные команды завершения работы по-прежнему работают
    • Ты просто нетерпелив с медленной системой
    • Приложения отвечают, даже если медленно
    • Вы сначала не пробовали Ctrl+Alt+F2, чтобы переключиться на текстовую консоль
    • Проблема в одной зависшей программе (убейте её вместо этого)

    Сначала попробуйте более мягкие решения. Используйте SysRq как последнюю меру перед кнопкой питания.

    Последствия для безопасности и риски

    Любой, у кого есть физический доступ к клавиатуре вашего компьютера, может использовать Magic SysRq. При полном доступе они могут:

    • Перезагрузите машину мгновенно
    • Убить все запущенные процессы
    • Получение содержимого памяти с помощью команд отладки
    • Вызвать сбой

    Проект документации Linux специально отмечает, что «для компьютеров, которые не используются для разработки программного обеспечения ядра, магическая клавиша SysRq является идеальным устройством для отказа в обслуживании.»

    На многопользовательских или производственных серверах: Рассмотрите возможность ограничения до значения битовой маски 176 (только синхронизация + повторное монтирование + перезагрузка). Это отключает команды отладки, которые могут раскрыть содержимое памяти.

    На персональных ноутбуках: Полный доступ (значение 1) обычно приемлем. Физический доступ к клавиатуре персонального устройства уже является значительным барьером безопасности.

    Внимание: Включение всех команд SysRq на серверах с общедоступным доступом или на совместно используемых системах представляет собой угрозу безопасности. Злоумышленник с доступом к консоли может вызвать сбой вашей системы, завершить процессы или просмотреть содержимое памяти через отладочные команды. Используйте ограничительную битовую маску на рабочих системах.

    Одно важное техническое замечание: Значение в /proc/sys/kernel/sysrq управляет только командами, вызываемыми с клавиатуры. Вызов через /proc/sysrq-trigger всегда разрешён для пользователей с правами администратора (root), независимо от настроек битовой маски. Если вы полагаетесь на /proc/sysrq-trigger для удалённого администрирования, учтите, что ограничение значения sysrq не ограничивает доступ через триггер.

    Ограничения, которые вам следует знать

    Magic SysRq мощный, но он не может исправить всё. Он работает «если система полностью не зависла».

    Это не поможет, если:

    • Само ядро неисправно или сработала паника без возможности восстановления
    • Оборудование физически вышло из строя
    • ЦП заблокирован из-за аппаратной ошибки
    • Сам драйвер клавиатуры перестал работать
    • Ваша клавиатура подключена неправильно

    Это может не сработать, если:

    • Ваше ядро было скомпилировано без CONFIG_MAGIC_SYSRQ
    • Вы используете виртуальную машину, и комбинация клавиш не передается
    • Ваша рабочая среда перехватывает комбинацию клавиш
    • systemd установил битовую маску на значение, которое отключает необходимые вам команды

    Это не магия: Несмотря на название, это функция ядра. Если ядро не может работать, SysRq не сможет работать.

    Использование SysRq через сеть

    Интерфейс /proc/sysrq-trigger, доступный с Linux 2.4.21, позволяет запускать команды удаленно. Его ключевое преимущество заключается в том, что он работает независимо от битовой маски клавиатуры, если у вас есть права root.

    Через SSH (если соединение все еще активно):

    echo s | sudo tee /proc/sysrq-trigger  # Sync filesystems
    echo u | sudo tee /proc/sysrq-trigger  # Remount read-only
    echo b | sudo tee /proc/sysrq-trigger  # Reboot

    Полная последовательность REISUB в одной команде (с использованием префикса подчеркивания, поддерживается в текущих ядрах):

    echo _reisub | sudo tee /proc/sysrq-trigger

    Через последовательную консоль: Отправьте сигнал BREAK, затем в течение 5 секунд отправьте командный ключ. Способ отправки сигнала BREAK зависит от вашей терминальной программы.

    Проверка: Тестирование SysRq работает

    Прежде чем оно вам понадобится в экстренной ситуации, испытайте это:

    1. Проверьте, что оно включено: cat /proc/sys/kernel/sysrq должно показать ненулевое значение
    2. Попробуйте безопасную команду: Alt + SysRq + h (показывает помощь в логах ядра)
    3. Подтвердите, что это сработало: sudo dmesg | tail -20 должно показать вывод SysRq

    Не тестируйте b, если вы не готовы перезагрузиться немедленно.

    Не тестируйте f, если не хотите, чтобы случайный процесс был завершён OOM-киллером.

    Начните с h. Если текст помощи появляется в dmesg, всё остальное будет работать.

    Распространённые ошибки, которых следует избегать

    Ошибка 1: Поспешное выполнение последовательности REISUB

    Каждый шаг занимает 1-2 секунды. Если вы нажмёте b до того, как s завершит синхронизацию, вы сведёте цель на нет.

    Ошибка 2: Использование b для перезагрузки

    Команда b выполняет немедленную перезагрузку без синхронизации и размонтирования. Вместо этого используйте полную последовательность REISUB.

    Ошибка 3: Забывание клавиши Fn на ноутбуках

    Многим ноутбукам требуется Fn + SysRq. Попробуйте обе комбинации, если одна не реагирует.

    Ошибка 4: Тестирование опасных команд в рабочей среде

    Команды e, i и b вызывают немедленные системные эффекты по всей системе. Тестируйте на запасной машине.

    Ошибка 5: Предположение, что это работает везде

    Виртуальные машины, облачные инстансы и пользовательские ядра могут не поддерживать комбинации SysRq. Проверьте заранее, прежде чем это понадобится.

    Ошибка 6: Включение полной функции SysRq на общих серверах

    Любой пользователь с доступом к консоли или последовательному порту может вызвать сбой системы. Используйте ограничительную битовую маску.

    Ошибка 7: Использование заглавных букв команд в /proc/sysrq-trigger

    Команды чувствительны к регистру. Например, echo B > /proc/sysrq-trigger не перезагрузит вашу систему. echo b перезагрузит.

    Шпаргалка по волшебной клавише SysRq в Linux

    Заключение

    Magic SysRq — это аварийный инструмент. Как было сказано ранее, это ваш последний ресурс перед кнопкой питания.

    Когда всё замерзает и ничто не отвечает, REISUB может спасти ваши данные. Он корректно завершает работу даже когда обычное выключение невозможно.

    Включите REISUB на персональных компьютерах. Ограничьте его использование на серверах. Протестируйте его до того, как он вам понадобится. Еще важнее, помните, что все клавиши команд вводятся в нижнем регистре.

    Magic SysRq не исправит любые основные проблемы. Думайте о нем как о аварийном запасном выходе. Используйте его, когда необходимо. Игнорируйте его, когда нет нужды.

    И когда ваша система зависнет в 3 часа ночи с несохранённой работой, вы будете рады, что протестировали её заранее.

    Последний совет: Запишите последовательность REISUB на каком-нибудь физическом носителе. Например, вы можете прикрепить её на монитор или внутри серверного шкафа.

    Рекомендуемое чтение:

    • Как исправить сломанную ОС Ubuntu без её переустановки
    • Как восстановить сломанный Arch Linux до предыдущего рабочего состояния

    Ссылки и дополнительная литература:

    • Документация ядра Linux - Волшебная клавиша SysRq (Официальная)
    • Исходный код ядра Linux - Реализация SysRq
    • Википедия - Магическая клавиша SysRq
    • Проект документации Linux - Руководство по удалённой последовательной консоли
    • Страница руководства Linux - proc_sysrq-trigger(5)
    • Руководство по обеспечению безопасности Debian - Ограничение использования клавиши Magic SysRq
    • Вики Arch Linux - Горячие клавиши (раздел SysRq)
    • Вики Gentoo - Magic SysRq