Можно ли перезагрузить ОС Linux без перезагрузки аппаратного обеспечения?


89

Есть ли способ перезагрузить систему Linux (в частности, Debian) без перезагрузки оборудования?

У меня есть RAID-контроллер, который требует некоторого времени для запуска до запуска ОС, и мне бы хотелось, чтобы был способ быстрой перезагрузки ОС Linux без необходимости проходить весь процесс перезагрузки и перезапускать RAID-контроллер, и т.п.


6
Все системы на основе UEFI способны переключать ОС без перезагрузки. У вас также есть kexec()что-то вроде exec(), но для ядер Unix.
user2284570

Ответы:


98

Я использую kexec-reboot практически на всех своих производственных системах.

Он работает невероятно хорошо, позволяя мне обойтись без долгого времени 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" сделает очень быструю перезагрузку. Но вы не можете размонтировать занятую файловую систему. Просматривая веб, кажется, что многие игнорируют часть «убить все приложения».
Майк С

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 запекается! Я этого не знал, спасибо. Я полагаю, что более современные дистрибутивы также охватывают это. Кстати, если kexec ранее не запускался с -l, скрипт перезагрузки скажет: «Ничего не загружено!» именно поэтому выходные данные отправляются в / dev / null, и поэтому я никогда не знал об этой возможности.
Майк С

17

Да, это возможно. kexec позволит загружать ядро ​​Linux напрямую из Linux, не проходя процесс загрузки BIOS.


Также UEFI позволяет переключать ОС без перезагрузки.
user2284570

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

16

Да. Вы должны использовать kexec-tools. Чтобы облегчить жизнь, я использую kexec-reboot .

$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.