Новини, акції та корисні статті для розробників.
"М'яке" нижньорівневе перезавантаження *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 – виводить зміст буфера трасування роботи ядра.