Мягкая перезагрузка и мгновенное выключение компьютера в Ubuntu

Мало кто знает для чего служит клавиша SysRq, которая совмещена с PrintScreen. Если вы виндовод и ничего более, то вам есть смысл пропустить эту заметку: в Windows этой клавиши нет. Но если вы используете ещё и Линукс, то SysRq может выручить в самых, казалось бы, безвыходных ситуациях, если, конечно, ядро не в «панике», о чём обычно свидетельствуют хаотически мигающие светодиоды клавиатуры. Интересно? Тогда читаем дальше.

Клавиша SysRq появилась задолго до того, как виндоводы начали делать скриншоты. Первоначально по замыслу IBM клавиша SysRq предназначалась для переключения между приложениями без прекращения их работы. Но это уже история. Линуксоиды же приспособили SysRq, чтобы давать пользователю экстренный доступ к ядру. Но и тут не всё просто. Дело в том, что для совместимости с Windows в линуксных графических средах одиночная клавиша SysRq работает, как PrintScreen, а сочетание Alt+SysRq, рекомендуемое в учебниках по консоли, так же, как и в Windows, тупо помещает картинку активного окна в буфер. Поэтому в оконных Линуксах клавиши SysRq ...тоже нет! Вместо этой клавиши в линуксных графических средах употребляется волшебное сочетание Alt+Ctrl+SysRq+латинская буква/цифра, существенно увеличивающее вашу власть над машиной.

Не всякий дистрибутив Линукса поддерживает 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 – выводит содержимое буфера трассировки работы ядра.

Итак, ВНЕЗАПНО ваш Линукс завис так, что не помогает даже перезагрузка «иксов» клавишами Alt+Del+BS. Спокойствие, только спокойствие. Ни в коем случае не спешите жать кнопку reset на корпусе компьютера. С очень высокой вероятностью вы не потеряете данные при последовательном нажатии клавиш R-E-I-S-U-B (удерживаем Alt+Ctrl+SysRq !). И знаете что? Всегда можете мгновенно выключать нормально работающий компьютер сочетанием Alt+Ctrl+SysRq+O. Если, конечно, вы закрыли свои программы. :)

Однако, думается, что опасно делать доступной волшебную SysRq, если вы пускаете других пользователей удалённо работать на вашей машине или же сами работаете с ней удалённо. Дело в том, что сигнал break, посланный с удалённой консоли, может быть интерпретирован как Alt+SysRq, со всеми вытекающими последствиями. Поэтому если вы решили дать удалённый доступ к своей машине, то на всякий случай предварительно обнулите в системном конфиге переменную kernel.sysrq. Можно также написать на баше простенький скрипт для этого и даже прикрутить к нему кнопку на рабочем столе, чтобы каждый раз не заморачиваться редактированием файла управления системным конфигом. Успехов!

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя savely

Не знал. +

Аватар пользователя mike

Что нужно, чтобы форматирование вы не рушили, дорогая редакция?

Присылайте текст на info@kv.by, будем стараться сохранить его, выдирая из ODT. А то в том виде, в котором оно здесь, его сохранить без ущерба для сайта невозможно.

Клавиша SysRq появилась задолго до того, как виндоводы начали делать скриншоты.

Справедливости ради заметим, что PrintScreen'ом скриншоты делали ещё в MS-DOS. Причём на моей памяти это был действительно Print.

Аватар пользователя mike

на моей памяти это был действительно Print.

Помню, помню. :)