пятница, 22 мая 2009 г.

Диалог с ядром

Конечно, Linux стабильная система и ввести её в состояние "не отвечает" обычными методами не так-то просто. Но Linux'оиды народ неугомонный, то, что они делают, порой, вводит в ступор даже сверхстабильную Slackware. Поэтому необходимо средство, позволяющее корректно завершить работу в случае сбоя. "Почему бы просто не нажать на Reset, как обычно?" Да просто потому, что подобные вещи для Linux чаще всего означают смертельный исход файловые системы Linux не приспособлены к таким нагрузкам и если выключить их не размонтировав, вы вполне можете получить "Unable to mount root file system. System halted". Но выход есть. Вспомните, что ядро Linux не "висит" никогда. Даже если система никак не реагирует на клавиатуру и мышь, ядро Linux готово воспринимать ваши команды. Другое дело дойдут ли они до него. 

Есть способ сделать так, чтобы дошли! Для этого и существует клавиша SysRq (Print Screen). Если вы думаете, что она предназначена лишь для скриншотов, то глубоко ошибаетесь. Ядро Linux слушает эту клавишу лично, в обход любых приложений. 

Итак, приведем список сочетаний клавиш: 

Alt+SysRq+r перехватывает у X-сервера клавиатуру и мышь. Полезно, когда висят X-ы и волшебное сочетание Ctrl+Alt+BackSpace не срабатывает. Вы можете переключится на консоль и убить X-сервер.

Alt+SysRQ+k убивает все процессы данной консоли. Не используйте, когда вы находитесь в графическом режиме! Х-ы повиснут и вы не будете видеть, что печатаете.

Alt+SysRQ+b работает также, как и кнопка Reset. Просто перезагружает систему без синхронизации файловых систем и без их размонтирования. Не используйте это без предварительных шагов!

Alt+SysRQ+o выключает компьютер через APM (Advanced Power Management)

Alt+SysRQ+s записывает все данные из кеша диска на диск, т.е. выполняет синхронизацию.

Alt+SysRQ+u перемонтирует все смонтированные файловые системы в состояние "только для чтения". После этого вы можете жать Reset без риска для системы.

Alt+SysRQ+m выводит информацию о памяти в консоль.

Alt+SysRQ+e посылает сигнал SIGTERM всем процессам кроме init. Этот сигнал позволяет процессам корректно завершиться (с сохранением данных).

Alt+SysRQ+i посылает сигнал SIGKILL всем процессам кроме init. Это убьет все процессы, даже те, которые не успели завершится или зависли.

Alt+SysRQ+L посылает SIGKILL всем процессам, т.е. даже init ключевой процесс будет убит. Естественно, после этого система окажется неработоспособной.


По умолчанию, в Ubuntu не включена возможность использования Magic SysRq, поэтому нам следует включить её. Нажмите Alt+F2, наберите:

sudo gedit /etc/sysctl.conf

Добавьте в конец этого файла строку:

kernel.sysrq = 1 и перезагрузите систему. 

Теперь при фатальном зависании системы вы можете выполнить следующее: 

Alt+SysRQ+e (корректно завершит ваши процессы)

Alt+SysRQ+u (размонтирует ваши файловые системы, при этом синхронизация будет выполнена автоматически)

Alt+SysRQ+i (убьет зависшие процессы, не отреагировавшие на команду SIGTERM)

 Alt+SysRQ+b (перезагрузка).

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


И в завершение: команда whoami возвращает в консоль имя текущего пользователя (Who Am I? - Кто я?)
Копипаст отсюда

Комментариев нет:

Отправить комментарий