Je souhaite basculer entre les différentes versions du noyau installées sur mon système sans redémarrer.
C’est-à-dire que si le noyau 3.0.0-16-generic
est en cours d’exécution et si le noyau 3.0.0-14-generic
est plus ancien, il sera peut-être possible de passer à 3.0.0-14-generic
(l’autre noyau) sans redémarrer.
(Je dois effectuer un débogage du noyau en direct et apporter des modifications afin de pouvoir le redémarrer.)
Il n'y a aucun moyen d'échanger deux noyaux complets. Je suis sûr que vous pouvez comprendre la signification d'un noyau monolithique comme Linux et pourquoi cela rend impossible son remplacement.
Le plus proche que vous puissiez obtenir est un processus de patch en direct utilisant Ksplice . Il convertit les mises à jour du noyau en cales magiques capables de boucher les trous d'un noyau en cours d'exécution, vous permettant de laisser l'ordinateur allumé indéfiniment sans nécessiter de redémarrage. Pour vos besoins, il vous permet également d'annuler les modifications.
Il est gratuit pour les éditions de bureau Ubuntu. Vous pouvez donc vous en servir, mais vous devez payer un abonnement pour les serveurs (où ce genre de chose est le plus nécessaire).
Je viens de voir votre édition. Ksplice ne vous aidera probablement pas si vous piratez manuellement et construisez vos propres noyaux pour le débogage, car "le service" signifie qu'ils fournissent les mises à jour spéciales et qu'ils ne peuvent pas être générés par vous-même.
Si vous ne faites que construire contre un noyau officiel, cela pourrait quand même fonctionner.
Une autre idée: la virtualisation. Vous pouvez construire votre nouveau noyau et échanger des éléments dans votre VM et redémarrer. Cela prendra encore le temps nécessaire au redémarrage, mais vous pourriez rendre le VM beaucoup plus léger que votre machine de développement (basez-le sur Ubuntu Server, abandonnez le serveur X si vous n'en avez pas besoin, etc. ).
Comme Oli , votre meilleure solution est probablement la virtualisation.
Cela dit, si vous bricolez du matériel, la virtualisation risque de ne pas suffire. Dans ce cas, vous pouvez utiliser kexec
pour permuter le noyau en cours d'exécution sans un redémarrage complet.
Tiré de la page ArchWiki kexec
:
kexec -l /boot/new-kernel --initrd=/boot/new-initrd --reuse-cmdline kexec -e
Notez que ce qui précède redémarre toujours tous les services , y compris votre système init, le serveur d’affichage, la mise en réseau, etc. Cependant, si vous utilisez un Comme systemd
, votre système peut démarrer dans votre nouveau noyau en 2-3 secondes, car vous ignorez le BIOS/UEFI et le chargeur de démarrage.
Une description similaire peut être trouvée sur le page RapidReboot Ubuntu Wiki .
Je pense que ces réponses doivent être mises à jour.
Il y a kpatch maintenant , ce qui est plus natif que ksplice et al .
Il ne peut pas changer les structures de données dans le noyau, cependant, pour des raisons évidentes, il est donc particulièrement utile pour les hotpatches de sécurité.
Le problème général est toujours le suivant: Les processus en cours conservent toujours les structures de données du noyau, attendant que les fonctions du noyau les attendent et les restituent. Et si ces processus ne sont pas faits pour cela, il n’est pas vraiment possible de savoir, si tel est le cas. Vous ne pouvez donc pas les modifier tant que tous les processus qui les utilisent ne sont pas redémarrés. Il faudrait aussi appliquer des correctifs en direct à tous ces programmes.
Et je n’ai même pas mentionné les changements de pilotes, lorsque le matériel est dans un état spécial. (Même problème qu'avec kexec .)