Est-il possible de redémarrer un système d'exploitation Linux sans redémarrer le matériel?

89

Est-il possible de redémarrer un système Linux (Debian en particulier) sans redémarrer le matériel?

J'ai un contrôleur RAID qui prend un peu de temps à s'exécuter avant que le système d'exploitation ne démarre, et j'aimerais qu'il soit possible de redémarrer rapidement le système d'exploitation Linux sans avoir à passer par tout le processus de redémarrage du contrôleur RAID, etc.

lacrosse1991
la source
6
Tous les systèmes basés sur UEFI peuvent changer de système d’exploitation sans redémarrer. Vous avez également kexec()ce qui ressemble à exec(), mais pour les noyaux Unix.
user2284570

Réponses:

98

J'utilise kexec-reboot sur presque tous mes systèmes de production.

Cela fonctionne incroyablement bien, ce qui me permet de contourner la longue période de POST sur les serveurs HP ProLiant et de réduire le cycle de démarrage de 5 minutes à environ 45 secondes.

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

Le seul inconvénient est que cela ne semble pas fonctionner sur les systèmes RHEL / CentOS 6.x démarrant UEFI. Mais la plupart des combinaisons saines système / matériel fonctionnent.

ewwhite
la source
62
J'ai écrit ça! Mais ça marche encore assez bien ...
Michael Hampton
1
Fascinant. Alors, à quoi ressemble le processus actuel? Selon un article de Hariprasad Nellitheertha (lié à la page wikipedia de kexec), "contrairement au processus de redémarrage normal, kexec n'exécute pas un arrêt complet du système avant la réinitialisation. Il vous appartient de tuer toutes les applications et de démonter les systèmes de fichiers avant de tenter un redémarrage kexec. " Je remarque certaines choses discutables, par exemple, Wim Coekaerts dit que "sync; umount -a; kexec -e" effectuera un redémarrage très rapide. Mais vous ne pouvez pas supprimer un système de fichiers occupé. En parcourant le Web, il semble que beaucoup ignorent la partie "tuer toutes les applications".
Mike S
2
@MikeS Ce n'est pas kexec. C'est l' kexec-rebootutilitaire. La description de Github décrit la différence et ce que l'utilitaire ajoute au processus.
ewwhite
4
@MikeS Après avoir mis en place kexec, il vous suffit de faire un shutdown -r. Vos scripts système remarqueront que kexec a été mis en scène et agissent correctement. À quoi ça ressemble? Trois, quatre ou quinze minutes plus courtes. J'ai une vidéo d'une qualité très horrible. J'ai enlevé la console iDRAC, mais vous ne voulez vraiment pas en subir les kexec-rebootconséquences ... Le script est destiné à automatiser le processus d'obtention des arguments de ligne de commande appropriés pour kexec, ce qui peut être délicat. .
Michael Hampton
1
@ MichaelHampton - cool. Je vois que sur CentOS 6.5 à la fin de /etc/rc3d/rc6.d/S01reboot il y a: [ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/null. Donc, si un noyau est chargé par kexec -l, le système redémarrera sans un / sbin / reboot complet ... kexec est intégré! Je ne savais pas ça, merci. Je suppose que les distributions plus modernes l'ont également couvert. En passant, si kexec n’avait pas déjà été exécuté avec -l, le script de redémarrage dira "Rien n’a été chargé!" c'est pourquoi la sortie est envoyée à / dev / null, et pourquoi je n'ai jamais été au courant de cette installation.
Mike S
17

Oui c'est possible. kexec permettra à un noyau Linux d’être démarré directement à partir de Linux sans passer par le processus de démarrage du BIOS.

Kasperd
la source
De plus, l'UEFI permet de changer de système d'exploitation sans redémarrer.
user2284570
1
@ user2284570 Autant que je sache, UEFI ne fournit aucun mécanisme de ce type.
Jonathon Reinhart
16

Oui. Vous devez utiliser kexec-tools. Pour rendre la vie plus facile, j'utilise 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
la source
13
Pour qu'il n'y ait pas de confusion, je n'ai pas écrit ceci.
Michael Hampton
C'est probablement Ubuntu / Debian uniquement, n'est-ce pas?
ewwhite
1
@ewwhite Cela fonctionnerait probablement sur RHEL / CentOS, mais à la lecture du code, j'ai trouvé plusieurs problèmes où des cas extrêmes pourraient entraîner l'échec. Et la source semble le reconnaître avec un commentaire:# The error checking is very basic.
Michael Hampton