Завис Linux? 3 способа справиться с этим.

Вкратце: эта статья научит вас нескольким приемам, с помощью которых можно попытаться спасти или перезагрузить не отвечающую систему Linux.

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

Для целей этой статьи Linux можно рассматривать как набор из двух стеков: стек ядра и пользовательский стек. Где-то внутри пользовательского стека у вас работают программы. Скорее всего, X-сервер, менеджер окон и некоторые программы. Вы можете представить этот список программ, включая X-сервер, в виде другого стека внутри пользовательского стека. Эта концепция поможет новому пользователю Linux понять некоторые задачи, которые мы будем выполнять позже.

Способ 1 - Убить не отвечающую программу с помощью xkill

Если вы используете графический интерфейс Linux, вашим первым шагом должна быть попытка использовать функцию выполнения команд из графического интерфейса, например alt + f2 в Ubuntu и его производных.

наберите в появившейся строке xkill и навести курсор на окно зависшей программы и щелкнете на нем.

Xkill работает быстрее, чем традиционный значок X или щелчок правой кнопкой мыши по окну на панели задач и нажатие кнопки «Закрыть». Xkill убивает мгновенно без вопросов.

Способ 2 - Восстановление зависшей системы Linux с виртуальными консолями (TTY)

Иногда вам не повезет, система может показаться полностью мертвой.

Но это может быть просто иллюзией. Помните стек программ внутри пользовательского стека? Давайте немного поработаем с этим постулатом.

Хотя может показаться, что корнем пользовательского стека является X Window. Это не так.

X Window System работает на виртуальной консоли (VC), также называемой TTY. Консоли представлены в файловой системе как /dev/ttyX. Linux имеет несколько VC. Попытка получить доступ к другой консоли может помочь вернуть вам контроль над системой.

Вы можете переключиться на другой VC, нажав CTRL+ALT+F{1,6} в среде графического интерфейса или ALT+F{1,6} в другом VC. Вышеупомянутое нажатие клавиши дает вам доступ к VC 1-6. Графический интерфейс работает на VC 7 и выше (в зависимости от дистрибутива).

При работе с нестабильной системой даже запрос на смену VC может занять некоторое время, поэтому будьте немного терпеливы.

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

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

  • Вы можете попытаться убить зависшую программу с помощью команд kill или killall.
  • Вы можете убить оконный менеджер, X-сервер или менеджер входа в систему. Это убьет все дочерние процессы, и, если все пойдет хорошо, то ваш менеджер входа в систему перезапустится, представив вам графический экран входа в систему.

Способ 3 - Когда все предыдущие терпит неудачу, работайте с Kernel, используя SysReq

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

Этот способ полезен в ситуации, когда весь пользовательский стек мертв. Он известен как волшебная клавиша SysRq. Скомпилированный и включенный по умолчанию в большинстве дистрибутивов, только Kernel Panic должен быть в состоянии предотвратить это.

Чтобы убедиться, что опция была установлена во время компиляции ядра, вы можете попытаться найти файл конфигурации вашего текущего ядра в /boot. Ищите опцию CONFIG_MAGIC_SYSRQ. Как упоминалось ранее, он компилируется и включается в большинстве дистрибутивов. Чтобы подтвердить, что он включен, выполните следующее:

# sysctl kernel.sysrq

В старых системах у вас было 2 варианта: 0 и 1. Он был либо выключен, либо включен. На более новых есть более точный контроль над тем, какие команды включены.

Любое значение выше 1 означает, что включены только некоторые команды.

Чтобы временно установить другое значение, выполните следующую команду:

$ sudo sysctl -w kernel.sysrq=value

где value - значение параметра.

Чтобы навсегда изменить это значение, отредактируйте файл /etc/sysctl.conf. Найдите kernel.sysrq и установите желаемое значение.

################################################################### 
# Magic system request Key 
# 0=disable, 1=enable all, >1 bitmask of sysrq functions 
# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html 
# for what other values do \\
kernel.sysrq=1

Самый простой способ проверить, работает ли он, - попробовать. Я также рекомендую тестировать и изучать набор нажатий клавиш, пока система стабильна. Когда вы выполняете вызов SysRq, ядро попытается ответить. Этот ответ можно увидеть, только если вы находитесь в виртуальной консоли с 1 по 6. Если фокус не может быть перемещен от X, вы не увидите ответы. Это не значит, что это не работает.

Есть множество команд, которые можно отправить. Полный список можно посмотреть здесь. Я рекомендую запомнить следующее:

Alt + SysRq + R — перехватывает управление мышью и клавиатурой у Х-сервера, что полезно, если Х-сервер завис: так можно перейти в консоль, убить Х-сервер или проверить логи;

Alt + SysRq + E — послать сигнал завершения работы SIGTERM всем процессам, кроме init;

Alt + SysRq + I — послать сигнал немедленного завершения работы SIGKILL всем процессам, кроме init.

Alt + SysRq + K — убивает все процессы на текущей консоли. При этом графический сервер будет остановлен и невозможно будет увидеть ввод-вывод либо пока X-сервер не перезапустится, либо пока видеорежим не будет исправлен вручную;

Alt + SysRq + S — пытается синхронизировать все примонтированные файловые системы, при этом пишет в консоли «Emergency Sync». При успешном завершении выводится «Emergency Sync Complete»;

Alt + SysRq + U — пытается перемонтировать все примонтированные файловые системы в режим «только чтение»;

Alt + SysRq + B — выполняет немедленную перезагрузку системы аналогично кнопке RESET (без синхронизации и размонтирования файловых систем);

Alt + SysRq + O — корректно выключает систему (если настроено и поддерживается, обычно это прямая команда отключения).

Этот короткий список команд дает вам новый мощный инструмент для работы с нестабильной системой. При отправке запроса, если вы не видите ответы ядра, дайте несколько секунд между командами. Обратите внимание на LED-индикатор жесткого диска при обращение к жесткому диску.

Есть 2 последовательности, которые стоит запомнить.

1. Alt + SysRq + r e k

Эта последовательность хороша для перезапуска не отвечающего X-сервера. Сначала вы перехватываете управление мышью и клавиатурой у Х-сервера с помощью Alt + SysRq + r. Затем вы отправляете SIGTERM всем процессам с помощью Alt + SysRq + e. X-сервер может перезагрузиться с этим запросом. Если это так, вы спасли свою систему. Если нет, перейдите к третьему запросу, Alt + SysRq + k. Который отправит SIGKILL всем процессам в текущей виртуальной консоли.

Если ваша система по-прежнему не отвечает после указанной выше последовательности, вам следует перейти к следующей последовательности.

2. Alt + SysRq + r e i s u b

Последняя команда инициирует аварийную перезагрузку.

  • r: перехват клавиатуры и мыши;
  • e: отправка SIGTERM всем процессам;
  • i: отправка SIGKILL на все процессы;
  • s: синхронизация всех смонтированных файловых систем;
  • u: аварийное перемонтирование файловых систем в режим только для чтения;
  • b: немедленная перезагрузка системы.

Теперь вы вооружены всем необходимым против зависшей системы.

Источник