basculer entre différentes versions du noyau sans redémarrage


11

Je souhaite basculer entre différentes versions du noyau installées sur mon système sans redémarrer.

C'est-à-dire que si j'ai un 3.0.0-16-genericnoyau en cours d'exécution et que j'ai aussi un noyau plus ancien 3.0.0-14-generic, je pourrai peut-être basculer vers 3.0.0-14-generic(l'autre noyau) sans redémarrer.

(Je dois faire le débogage du noyau en direct et apporter des modifications, donc pour ce faire, je ne peux pas redémarrer)

Réponses:


8

Il n'y a aucun moyen d'échanger deux noyaux complets. Je suis sûr que vous pouvez comprendre l'importance d'un noyau monolithique comme Linux et pourquoi il est impossible de le remplacer simplement.

Le plus proche que vous pouvez obtenir est un processus de correction en direct à l'aide de Ksplice . Il convertit les mises à jour du noyau en cales magiques qui peuvent boucher les trous dans un noyau en cours d'exécution, vous permettant de garder l'ordinateur allumé indéfiniment sans avoir besoin d'un redémarrage. Pour vos besoins, il vous permet également d'annuler les modifications.

Il est gratuit pour les éditions Ubuntu Desktop, vous pouvez donc jouer avec mais vous devez payer un abonnement pour les serveurs (où ce genre de chose est le plus nécessaire).


Je viens de voir votre montage. Ksplice ne va probablement pas aider si vous piratez et construisez manuellement vos propres noyaux pour le débogage en tant que "service", c'est qu'ils fournissent les mises à jour spéciales et qu'ils ne sont pas quelque chose que vous pouvez générer par vous-même.

Si vous construisez simplement des choses par rapport à un noyau officiel, cela pourrait toujours fonctionner.


Une autre idée: la virtualisation. Vous pouvez créer votre nouveau noyau et échanger des éléments dans votre machine virtuelle et redémarrer. Cela va encore prendre le temps nécessaire pour redémarrer, mais vous pourriez rendre la machine virtuelle beaucoup plus légère que votre machine de développement (basez-la sur Ubuntu Server, supprimez le serveur X si vous n'en avez pas besoin, etc.).


1
mais je veux basculer entre deux noyaux différents dans mon répertoire / boot
codeur

1
Ouais, tu ne vas pas être en mesure de basculer arbitrairement entre deux noyaux. J'ai ajouté une autre modification avec une autre idée qui pourrait vous convenir.
Oli

2

Comme Oli mentionné, votre meilleur coup est probablement la virtualisation.

Cela dit, si vous bricoler avec le matériel, la virtualisation pourrait ne pas le couper pour vous, dans ce cas, vous pouvez utiliser kexecpour échanger le noyau en cours d' exécution sans un redémarrage complet.

Tiré de la ArchWiki la kexecpage :

kexec -l /boot/new-kernel --initrd=/boot/new-initrd --reuse-cmdline
kexec -e

Notez que l'alambic redémarrer au- dessus de tous les services , y compris votre système d'initialisation, le serveur d'affichage, la mise en réseau, etc. Cependant, si vous utilisez un système init assez vite, comme systemd, votre pouvez démarrer dans votre nouveau noyau en 2-3 secondes, depuis vous sans passer par le BIOS / UEFI et le bootloader.


Une description similaire se trouve sur la page par Ubuntu RapidReboot Wiki .


0

Je pense que ces réponses doivent être mis à jour.

Il est kpatch maintenant , ce qui est plus originaire que ksplice et al.

Il ne peut pas changer les structures de données dans le noyau si, pour des raisons évidentes, il est surtout utile pour les hotpatches de sécurité.

Le problème général est toujours: processus en cours gardent encore des structures de données noyau autour, en attendant les fonctions du noyau pour les attendre et leur redonner. Et sans ces processus en cours pour, il 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 en direct ragréage tous ces programmes aussi.
Et je ne mentionne même pas les changements de pilote, lorsque le matériel est dans un état particulier. (Même problème que avec kexec .)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.