Czy można zrestartować system operacyjny Linux bez ponownego uruchamiania sprzętu?

89

Czy istnieje sposób na ponowne uruchomienie systemu Linux (w szczególności Debiana) bez ponownego uruchamiania sprzętu?

Mam kontroler RAID, który uruchamia się trochę przed uruchomieniem systemu operacyjnego, i chciałbym, aby istniał sposób szybkiego ponownego uruchomienia systemu operacyjnego Linux bez konieczności przechodzenia przez cały proces ponownego uruchamiania kontrolera RAID, itp.

lacrosse1991
źródło
6
Wszystkie systemy oparte na UEFI są w stanie przełączyć system operacyjny przy ponownym uruchomieniu. Masz także takie, kexec()które jest podobne exec(), ale dla jądra uniksowego.
user2284570,

Odpowiedzi:

98

Używam kexec-reboot na prawie wszystkich moich systemach produkcyjnych.

Działa niesamowicie dobrze, co pozwala mi ominąć długi czas testu POST na serwerach HP ProLiant i skrócić cykl uruchamiania z 5 minut do ~ 45 sekund.

Zobacz: https://github.com/error10/kexec-reboot

Jedynym zastrzeżeniem jest to, że nie działa na systemach RHEL / CentOS 6.x uruchamiających UEFI. Ale większość rozsądnych kombinacji OS / sprzęt działa.

ewwhite
źródło
62
Napisałem to! Ale nadal działa całkiem dobrze ...
Michael Hampton
1
Fascynujący. Jak więc wygląda faktyczny proces? Zgodnie z artykułem Hariprasad Nellitheertha (do którego link znajduje się na stronie wikipedii kexec): „W przeciwieństwie do normalnego procesu ponownego uruchamiania, kexec nie wykonuje czystego zamykania systemu przed ponownym uruchomieniem. To do ciebie należy zabicie wszystkich aplikacji i odmontowanie systemu plików przed próbą ponownego uruchomienia kexec. ” Zauważyłem pewne wątpliwe rzeczy, na przykład Wim Coekaerts mówi, że „sync; umount -a; kexec -e” spowoduje bardzo szybki restart. Ale nie można odmontować zajętego systemu plików. Przyglądając się sieci, wydaje się, że wielu ignoruje część „zabij wszystkie aplikacje”.
Mike S
2
@MikeS To nie jest kexec. To kexec-rebootnarzędzie. Opis Github przedstawia różnicę i to, co narzędzie dodaje do procesu.
ewwhite
4
@MikeS Po wykonaniu kexec, po prostu robisz shutdown -r. Twoje skrypty systemowe zauważą, że kexec został zainscenizowany i postępują właściwie. Jak to wygląda? Trzy, cztery lub piętnaście minut krócej. Mam bardzo okropną jakość filmu, który zdjąłem z konsoli iDRAC, ale tak naprawdę nie chcesz przez to cierpieć ... kexec-rebootSkrypt ma zautomatyzować proces przekazywania odpowiednich argumentów wiersza poleceń do kexec, co może być trudne .
Michael Hampton
1
@MichaelHampton - cool. Widzę, że na CentOS 6.5 pod koniec /etc/rc3d/rc6.d/S01reboot jest: [ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/null. Więc, jeśli jądro jest ładowane przez kexec -l, system uruchomi się ponownie bez kompletnego / sbin / reboot ... kexec jest wypalony! Nie wiedziałem tego, dzięki. Podejrzewam, że obejmuje to także bardziej nowoczesne dystrybucje. BTW, jeśli kexec nie był wcześniej uruchamiany z opcją -l, skrypt restartu powie „Nic nie zostało załadowane!” dlatego dane wyjściowe są wysyłane do / dev / null i dlaczego nigdy nie byłem świadomy tego ułatwienia.
Mike S
17

Tak to mozliwe. kexec pozwoli na uruchomienie jądra Linuksa bezpośrednio z Linuksa bez konieczności uruchamiania systemu BIOS.

kasperd
źródło
Ponadto UEFI pozwala przełączać system operacyjny bez ponownego uruchamiania.
user2284570,
1
@ user2284570 O ile mi wiadomo, UEFI nie zapewnia takiego mechanizmu.
Jonathon Reinhart
15

Tak. Musisz użyć narzędzi kexec. Aby ułatwić życie, używam 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
Jose Raul Barreras
źródło
13
Aby nie było zamieszania, nie napisałem tego.
Michael Hampton
To prawdopodobnie tylko Ubuntu / Debian, prawda?
ewwhite
1
@ewwhite Prawdopodobnie działałoby to na RHEL / CentOS, ale po odczytaniu kodu znalazłem kilka problemów, w których przypadki krawędzi mogą powodować awarię. Źródło wydaje się to potwierdzać za pomocą komentarza:# The error checking is very basic.
Michael Hampton