Блог

Новости, акции и полезные статьи для разработчиков.

Перезагрузка сервера по REISUB

Мягкая" низкоуровневая перезагрузка *nix-cистем с помощью сочетания "R-E-I-S-U-B"

Во многих *nix-cистемах для "мягкой" перезагрузки можно одновременно нажать клавиши (удерживая Alt и SysRq), затем последовательно, с короткими паузами, клавиши R E I S U B…

(клавиша SysRq/PrintScreen - может быть подписана как просто PrintScreen)

_

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

Почему это происходит? И почему именно эта комбинация клавиш? Тут всё довольно просто — каждая из клавиш при нажатии отправляет ядру системы такие команды:

unRaw — приказывает вернуть управление системой клавиатуре;

tErminate — посылает сигнал SIGTERM всем процессам, чем производится попытка безопасного завершения всех процессов с сохранением данных, исключение составляет лишь процесс init;

kIll — посылает сигнал SIGKILL всем процессам, которые не смогли быть закрыты ранее, также за исключением процесса init — все остальные процессы будут уничтожены и несохраненные данные будут утеряны;

Sync — переписывает всё из кэша на жесткий диск, происходит синхронизация, что уменьшает возможность повреждения данных;

Unmount — перемонтирует все файловые системы в режим "только для чтения" — после использования этого ключа вы можете перезагружать систему нажатием Alt + SysRq + B без ущерба для системы;

reBoot — собственно команда перезагрузки системы. (Кстати, если воспользоваться этим ключом без использования предыдущих, система перезагрузится в жестком режиме!)
_

Замечания:
1) Работает только на клавиатуре, непосредственно подключённой к серверу;
2) Используйте PS/2 клавиатуру, если зависла USB и если есть разъём;
3) На всех Windows-системах перезагрузка по R-E-I-S-U-B - не поддерживается;
4) Можете проверить на своей рабочей машине в СТП (можно и из Иксов , можно и перейдя по Ctrl+Alt+F1 в консоль для наглядности, назад - Ctrl+Alt+F7);
5) Такая перезагрузка Крайне полезна на серверах-файлохранилищах с большим кол-вом HDD, т.к. после не требуется FSCK;
6) На некоторых системах отключена возможность низкоуровневой перезагрузки по REISUB в ядре или опциях:

не всякий дистрибутив Линукса поддерживает SysRq. Это зависит от значения переменной ядра CONFIG_MAGIC_SYSRQ. К счастью, ядро большинства линуксных дистрибутивов уже скомпилировано с разрешающим значением этой переменной. Во всяком случае, в Ubuntu это точно так. Если вы сомневаетесь, то проверьте командой

cat /proc/sys/kernel/sysrq
Если ответом будет единица, то всё в порядке. Добавим включалку/выключалку этой возможности. С помощью эмулятора консоли запускаем консольный редактор файла управления системным конфигом:
sudo nano /etc/sysctl.conf

И вставляем (или раскомментируем, убрав символ решётки) строчку

kernel.sysrq = 1
Чтобы ознакомиться с хелпом к SysRq, надо переключиться в виртуальную консоль (оконный эмулятор консоли тут «не при делах»), нажав сочетание Ctrl+Alt+F2, ввести свои логин и пароль. Да, кстати: цифры пароля набирайте не в правой цифровой клавиатуре, а по старинке над алфавитной клавиатурой. Вот теперь, когда вы не в графической среде, волшебное сочетание можно набирать и не нажимая Ctrl, то есть Alt+SysRq+символ. Набираем Alt+SysRq+H. На экран должен поступить хелп на английском языке: SysRq : HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E) memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems( J) saK show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N) powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T) Unmount force-fb(V) show-blocked-tasks(W) dump-ftrace-buffer(Z)

По-русски значение добавляемого символа выглядело бы следующим образом:

0-9 – уровень подробности вывода системных сообщений. 9 – максимальная подробность.

C – запускает краш-тест вашей системы. Если в результате этого запроса ядро вашей системы не впало в панику, у вас очень надёжная система. По этому запросу происходит перезагрузка ядра.

F – убивает процессы, занимающие, «по мнению ядра», слишком много памяти. У меня систематически убивает Firefox, если открыто более 10-и вкладок. Запрос может быть полезен, если машина «свопит» и подтормаживает.

J – размораживание (разблокирование) всех замороженных (заблокированных) файловых систем. Например, вы «замонтили» раздел, начали с ним работать, скажем, архивировать, и тут система зависла. Запрос поможет избавиться от недоступности раздела.

K – клавиша безопасного доступа (secure access key). Убивает все процессы на текущей консоли. Если в вашей машине работает троян, который может украсть или подменить ваш пароль, то вредонос тут же будет убит, и системный процесс init запустит подлинный логин.

L – выводит трассировку стека для всех активных процессоров. Интересно тем, кто занимается отладкой ПО.

M – выводит объём занятой памяти. В Ubuntu работает, если вы предварительно установите высокий уровень подробности вывода.

N – выводит список задач реального времени. Также работает, если вы предварительно установили высокий уровень вывода.

E – аварийно прекращает работу всех процессов, кроме init.

I – убивает все процессы, включая init.

T – выводит список задач в консоль.

S – cинхронизирует все файловые системы, записывая все буферизованные данные на жесткий диск.

R – принудительно возвращает клавиатуру в рабочее состояние. При этом ядро начинает работать с клавиатурой напрямую, минуя X-сервер, и только в кодах ASCII.

T – выводит список процессов. Опять же работает только при высоком уровне подробности вывода.

P – дамп регистров процессора. Запрос может быть интересен тем, кто занимается отладкой ПО.

Q – выводит события хард-таймеров. Работает, если установлен высокий уровень подробности вывода.

O – срочно выключает компьютер.

B – перезагружает компьютер. Правда, сообщают, что при ядре 3.8.0-25 происходит не перезагрузка, а выключение. Но сам я не проверял.

U – перемонтирует все файловые системы в режим «только чтение».

V – восстанавливает фреймбуфер консоли. Допустим, вы просматриваете в виртуальной консоли какой-нибудь видеоролик (да-да, Линукс, в отличие от Windows, позволяет и это), а вам срочно нужно вспомнить, что вы делали в консоли до запуска ролика. Команда восстановит фреймбуфер консоли. Вообще же следовало бы рассказать подробнее об этой занятной штуке – фреймбуфер, но не в этой статье.

W – показывает все зависшие задачи, если таковые имеются.

Z – выводит содержимое буфера трассировки работы ядра.