Логотип

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

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

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

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

 

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

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

С его помощью можно сохранить данные, безопасно перезагрузить вышедшую из строя систему или диагностировать серьезные проблемы. Но при неправильном использовании он может создать угрозу безопасности.

 

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

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

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

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

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

 

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

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

 

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

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

В таких ситуациях у вас есть три варианта действий:

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

 

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

 

Как запускать магические команды SysRq

Базовый принцип прост: удерживайте определенные клавиши, затем нажмите букву команды.

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

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

 

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

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

 

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

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

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

Читать  Использование xpath() в PHP

 

Самые полезные команды 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» и «Done».

6. b — немедленная перезагрузка

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

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

8. f — вызов OOM killer

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

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

 

Читать  Archinstall 3.0.14 исправляет снимки Snapper-GRUB

Общие значения по умолчанию для дистрибутива:

  • 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

 

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

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

 

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

sudo sysctl --system

 

Когда на самом деле стоит использовать функцию 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 установил битовую маску, которая отключает нужные вам команды
Читать  Ubuntu 26.04 LTS повышает минимальные требования к оперативной памяти

 

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

 

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

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

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

echo s | sudo tee /proc/sysrq-trigger # Синхронизация файловых систем
echo u | sudo tee /proc/sysrq-trigger # Перемонтировать в режиме «только чтение»
echo b | sudo tee /proc/sysrq-trigger # Перезагрузка

 

Полная последовательность 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: тестирование опасных команд в рабочей среде

Команды ei, и b оказывают немедленное влияние на всю систему. Тестируйте на запасном компьютере.

Ошибка 5: уверенность в том, что это работает везде

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

Ошибка 6: включение полного SysRq на общих серверах

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

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

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

Заключение

Magic SysRq — это инструмент для экстренных случаев. Как уже говорилось, это крайняя мера перед тем, как нажать кнопку питания.

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

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

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

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

И последний совет: Запишите последовательность REISUB где-нибудь на видном месте. Например, на мониторе или внутри серверной стойки.

 

Ссылки на чтение:

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

15 + 1 =

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала