11 апр. 2008 г.

коротко о SysRq

Еще с времен win-систем всем известен так называемый "трехпальцевый салют",то бишь Alt+Ctrl+Del, кто-то еще помнит ctrl+shift+esc, вызываюший Диспетчер задач. А какие горячие, причем в буквальном смысле - требуемые, када фсе "горит", сочетания клавиш знаем мы в мире nix? Кроме сакраментального альтконтрлделета да at+ctrl+backspace, рестартующего иксы, в голову лезут только хоткеи или часто используемых приложений, или KDE. Что, в случае зависания системы по тем или иным причинам, малодейственно, ибо Х-сервер, вкупе с "кедами" висануть могут в первую очередь.
Однако UNIX на то и UNIX - и выход есть и из таких сложных задач. Да, всегда существует "семь бед - один RESET", однако часто это чревато или потерей данных, или некорректной записью на жесткий диск с возможным повреждением его структуры. Короче, с геморроем на наши головы. С помощью SysRQ клавиш, точнее, с сигналами, формируемыми ими ;), многих проблем можно попробовать избежать.
Кратенько опишем основные из них, которые могут пригодиться в жизни чаще остальных. Подробности как всегда есть в документации, например вот тут - /usr/src/linux/Documentation/sysrq.txt , ну или в рамках форума сообщества Вашего дистрибутива. Или просто в Google ).
Везде по-разному, и некоторые дистрибы могут по умолчанию отключать работу ядра с sysrq-комбинациями, поэтому для надежности включим их через procfs:
echo "1" > /proc/sys/kernel/sysrq
Теперь можно и поиграться. В общих чертах опишем, что произойдет при нажатии тех или иных сочетаний. Для тех, кто до сих пор в танке, поясняем, что клавиша SysRQ совмещена на клаве с PrtScr, с принтскрином то есть. Итак, поехали!

alt+sysrq+I - посылка SIGKILL (SAK), то бишь в текущей консоли кирдык приходит всем приложениям, причем без сохранения.
alt+sysrq+E - посылка SIGTERM - в принципе аналогично предыдущему, только софту дается время на сохранение всех рабочих данных (естественно при условии, что данная софтина знает, что нужно делать при SIGTERM'е, иначе - тот же SIGKILL).
alt+sysrq+K - убивает все зависшие процессы в текущей виртуальной консоли, остальные вроде как живы останутся ;).
alt+sysrq+S - Очень важное сочетание - сброс содержимого дисковых буферов на хард, то бишь принудительная синхронизация всех устройств хранения. Ясно-понятно, что на это требуется время, поэтому следует дождаться вывода в STDOUT строки
Emergency Sync...OK
или, если уж совсем все знатно зависло, но клава все таки (хотя бы теоретически) способна переслать нажатие, то подождать секунд 5-10.
alt+sysrq+U - Размонтирование фсех фс. Опять же экстренное, кстати с синхронизацией вроде бы не связанное, так что следует 1) делать это после Emergency Sync 2) тоже покурить секунд 10-15 или дождаться
Emergency Umount... OK
alt+sysrq+B - reboot аля ресет, то есть жестко, сразу, без каких либо сохранений, синхронизаций и прочих прелюдий.
alt+sysrq+O - выключение питания без размонтирования фс. Похоже наверное на выдерживание Power'a в течение 4 секунд у ATX БП.

Ну вот, как то так ;)