È possibile riavviare un sistema operativo Linux senza riavviare l'hardware?


89

C'è un modo per riavviare un sistema Linux (in particolare Debian) senza riavviare l'hardware?

Ho un controller RAID che richiede un po 'di tempo per avviarsi prima dell'avvio del sistema operativo e mi piacerebbe che ci fosse un modo per riavviare rapidamente il sistema operativo Linux senza dover passare attraverso l'intero processo di riavvio del riavvio del controller RAID, eccetera.


6
Tutti i sistemi basati su UEFI sono in grado di cambiare il sistema operativo al riavvio. Hai anche quello kexec()che è simile exec(), ma per i kernel Unix.
user2284570

Risposte:


98

Uso kexec-reboot su quasi tutti i miei sistemi di produzione.

Funziona incredibilmente bene, permettendomi di bypassare il lungo tempo POST sui server HP ProLiant e ridurre il ciclo di avvio da 5 minuti a ~ 45 secondi.

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

L'unica avvertenza è che non sembra funzionare su sistemi RHEL / CentOS 6.x che avviano UEFI. Ma la maggior parte delle combinazioni di sistemi operativi / hardware funzionanti.


62
L'ho scritto io! Ma funziona ancora abbastanza bene ...
Michael Hampton

1
Affascinante. Quindi, come appare l'attuale processo? Secondo un articolo di Hariprasad Nellitheertha (collegato alla pagina wikipedia di kexec), "A differenza del normale processo di riavvio, kexec non esegue un arresto completo del sistema prima di riavviare. prima di provare a riavviare kexec. " Ho notato alcune cose discutibili, per esempio, Wim Coekaerts afferma che "sync; umount -a; kexec -e" farà un riavvio molto veloce. Ma non puoi smontare un filesystem occupato. Esaminando il Web, sembra che molti ignorino la parte "uccidi tutte le applicazioni".
Mike S,

2
@MikeS Questo non lo è kexec. È l' kexec-rebootutilità. La descrizione di Github delinea la differenza e ciò che l'utilità aggiunge al processo.
ewwhite,

4
@MikeS Dopo aver messo in scena kexec, fai semplicemente un shutdown -r. Gli script di sistema noteranno che Kexec è stato messo in scena e fa la cosa giusta. Come sembra? Tre o quattro o quindici minuti in meno. Ho un video di qualità orribile che ho tolto dalla console iDRAC, ma non vuoi davvero soffrire per quello ... Lo kexec-rebootscript ha lo scopo di automatizzare il processo di ottenere i giusti argomenti della riga di comando su Kexec, il che può essere difficile .
Michael Hampton

1
@MichaelHampton - fantastico. Vedo che su CentOS 6.5 verso la fine del /etc/rc3d/rc6.d/S01reboot c'è: [ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/null. Quindi, se un kernel viene caricato da kexec -l, il sistema si riavvierà senza un completo / sbin / reboot ... kexec è inserito! Non lo sapevo, grazie. Suppongo che anche le distribuzioni più moderne lo abbiano coperto. A proposito, se kexec non era stato precedentemente eseguito con -l, lo script di riavvio dirà "Non è stato caricato nulla!" che è il motivo per cui l'output viene inviato a / dev / null e perché non sono mai stato a conoscenza di questa funzione.
Mike S,

17

Sì, è possibile. kexec consentirà l'avvio di un kernel Linux direttamente da Linux senza passare attraverso il processo di avvio del BIOS.


Inoltre, UEFI consente di cambiare il sistema operativo senza riavviare.
user2284570

1
@ user2284570 Per quanto ne so, UEFI non fornisce questo meccanismo.
Jonathon Reinhart,

15

Sì. Devi usare kexec-tools. Per semplificare la vita, uso 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
In modo che non ci sia confusione, non ho scritto questo.
Michael Hampton

Questo è probabilmente solo Ubuntu / Debian, giusto?
ewwhite,

1
@ewwhite Probabilmente funzionerebbe su RHEL / CentOS, ma su una lettura del codice ho trovato diversi punti problematici in cui i casi limite potrebbero causarne il fallimento. E la fonte sembra riconoscerlo con un commento:# The error checking is very basic.
Michael Hampton
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.