Чи можливо перезавантажити ОС Linux без перезавантаження апаратного забезпечення?


89

Чи є спосіб перезавантажити систему Linux (зокрема Debian) без перезавантаження апаратного забезпечення?

У мене є контролер RAID, який вимагає трохи запуститись до запуску ОС, і мені хотілося б, якби був спосіб швидко перезавантажити ОС Linux без необхідності пройти весь процес перезавантаження перезавантаження контролера RAID, тощо.


6
Усі системи на базі UEFI здатні перемикати ОС без перезавантаження. У вас також є kexec()таке, як exec()для ядер Unix.
користувач2284570

Відповіді:


98

Я використовую kexec-перезавантаження майже у всіх своїх виробничих системах.

Він працює надзвичайно добре, що дозволяє мені обійти довгий час POST на серверах HP ProLiant і скоротити цикл завантаження з 5 хвилин до ~ 45 секунд.

Дивіться: https://github.com/error10/kexec-reboot

Єдине застереження полягає в тому, що він, здається, не працює на системах RHEL / CentOS 6.x, що завантажують UEFI. Але більшість розумних комбінацій ОС / обладнання працюють.


62
Я це написав! Але це все ще працює досить добре ...
Майкл Хемптон

1
Захоплююче. То як виглядає власне процес? Згідно зі статтею Hariprasad Nellitheertha (пов’язаною зі сторінкою вікіпедії kexec), "На відміну від звичайного процесу перезавантаження, kexec не здійснює чистого відключення системи перед перезавантаженням. Вам залишається вбити всі програми та відключити файлові системи. перед тим, як спробувати перезавантажити kexec. " Я помічаю деякі сумнівні речі, наприклад, Вім Кокеертс каже, що "sync; umount -a; kexec -e" дуже швидко перезавантажиться. Але ви не можете налаштувати зайняту файлову систему. Переглядаючи Інтернет, здається, що багато хто ігнорує частину "знищити всі програми".
Майк S

2
@MikeS Це не так kexec. Це kexec-rebootутиліта. Опис Github окреслює різницю та те, що утиліта додає процесу.
ewwhite

4
@MikeS Після постановки kexec ви просто зробите це shutdown -r. Ваші системні сценарії помітять, що kexec був поставлений і робить все правильно. Як це виглядає? На три-чотири-п’ятнадцять хвилин коротше. У мене дуже жахливе якість відео. Я зняв консоль iDRAC, але ви через це не хочете страждати ... kexec-rebootСценарій призначений для автоматизації процесу отримання правильних аргументів командного рядка в kexec, що може бути складним. .
Майкл Хемптон

1
@MichaelHampton - круто. Я бачу , що на CentOS 6.5 ближче до кінця /etc/rc3d/rc6.d/S01reboot є: [ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/null. Отже, якщо ядро ​​завантажується kexec -l, система перезавантажиться в нього без завершення / sbin / reboot ... kexec запечений! Я не знав цього, дякую. Я думаю, що більш сучасні дистрибуції також охоплювали це. BTW, якщо kexec раніше не виконувався з -l, сценарій перезавантаження скаже "Нічого не завантажено!" через що висновок надсилається в / dev / null, і чому я ніколи не знав про це об'єкт.
Майк S

17

Так, можливо. kexec дозволить завантажувати ядро ​​Linux безпосередньо з Linux, не проходячи процес завантаження BIOS.


Також UEFI дозволяють перемикати ОС без перезавантаження.
користувач2284570

1
@ user2284570 Наскільки мені відомо, UEFI не забезпечує такого механізму.
Джонатан Райнхарт

15

Так. Ви повинні використовувати kexec-інструменти. Щоб полегшити життя, я використовую kexec-перезавантаження .

$sudo apt-get install kexec-tools
$wget https://raw.githubusercontent.com/vadmium/kexec-reboot/master/kexec-reboot
$chmod +x kexec-reboot
$sudo mv kexec-reboot /usr/local/sbin/kexec-reboot
$sudo /usr/local/sbin/kexec-reboot

13
Щоб не було плутанини, я цього не писав.
Майкл Хемптон

Ймовірно, це лише Ubuntu / Debian, правда?
ewwhite

1
@ewwhite Це, ймовірно, працює на RHEL / CentOS, але, прочитавши код, я знайшов кілька проблемних місць, де крайові випадки можуть призвести до його відмови. І джерело, здається, підтверджує це коментарем:# The error checking is very basic.
Майкл Хемптон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.