loremOS Admin

"Системное администрирование – это культура"

Safe-перезагрузка Linux

Опубликовано 17th Nov 2019 10:50:17 в категории Linux

Здравствуй, дорогой друг! Может случиться такая ситуация с любимым ПК или сервером, что он намертво зависнет, и перестанет реагировать на клавиши. Как показывает практика, большинство просто "ресетят" его, и дело с концом а потом жалуются на форумах, что данные потеряны, ололо. Но в Linux есть возможность избежать нажатия кнопки Reset (при условии, что само ядро не крешнулось, что бывает крайне крайне редко). Дело в том, что когда система, как говорят, "намертво зависла и не реагирует на клавиши", на самом деле это не значит, что ядро тоже зависло. Само ядро как раз не зависло, и оно способно принимать некоторые команды от некоторых клавиш, коими являются, например, несколько низкоуровненных сочетаний клавиш, реализованных в ядре, и которые могут быть использованы для отладки и восстановления зависнувшей системы. И эти сочетания напрямую связаны с клавишей SysRq. SysRq всегда работает, если работает ядро (клавиатурные комбинации с этой клавишей, о которых пойдет речь ниже, напрямую перехватываются ядром и соответствующий код является частью драйвера клавиатуры). В народе эти сочетания (как и саму процедуру safe-перезагрузки) называют REISUB. Почему так? А вот почему:

  • (Alt+SysRq+r) unRaw - вернуть управление системой клавиатуре.
  • (Alt+SysRq+e) tErminate - посылает сигнал SIGTERM всем процессам, чем производится попытка безопасного завершения всех процессов с сохранением данных, исключение составляет лишь процесс init.
  • (Alt+SysRq+i) kIll - посылает сигнал SIGKILL всем процессам, которые не смогли быть закрыты ранее, также за исключением процесса init — все остальные процессы будут уничтожены и не сохраненные данные будут утеряны.
  • (Alt+SysRq+s) Sync - переписывает всё из кэша на жесткий диск, происходит синхронизация, что уменьшает возможность повреждения данных.
  • (Alt+SysRq+u) Unmount - перемонтирует все файловые системы в режим только для чтения - после использования этого ключа вы можете перезагружать систему нажатием Alt+SysRq+b без ущерба для системы.
  • (Alt+SysRq+b) reBoot - собственно, команда перезагрузки системы. Кстати, если воспользоваться этим ключом без использования предыдущих, система перезагрузится хардкорно, по аналогии с кнопкой Reset.

    Даже, если система перестала отвечать на запросы, не реагирует на клавиши, не передвигается курсор мыши (в случае десктопа), введя последовательно клавиатурные сочетания выше, ядро безопасно перезагрузкит машину.

Бывают случаи, когда эти магические комбинации отключены по-умолчанию. Проверить это можно командой:

sysctl -a 2>/dev/null | grep -i sysrq

Если терминал в ответ выхлопнет:

kernel.sysrq = 0

значит sysrq и правда отключена. Для включения можно задействовать несколько способов:

  • Добавить в файл /etc/sysctl.d/99-sysctl.conf (или /etc/sysctl.conf, в зависимости от дистрибутива) строчку
    kernel.sysrq = 1
  • В параметры запуска ядра (/etc/default/grub, в случае использования ArchLinux + Grub) добавить строчку
    sysrq_always_enabled=1
    (не забыть обновить grub.cfg с помощью grub-mkconfig -o /boot/grub/grub.cfg)

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

Собственно, вот и всё.
Мягких перезагрузок (а лучше, высоких аптаймов)!


Поделиться:


Теги