Wechseln Sie ohne Neustart zwischen verschiedenen Kernelversionen

11

Ich möchte ohne Neustart zwischen verschiedenen auf meinem System installierten Kernelversionen wechseln.

Das heißt, wenn ich gerade einen 3.0.0-16-genericKernel habe und dort auch einen älteren Kernel habe 3.0.0-14-generic, kann ich möglicherweise 3.0.0-14-genericohne Neustart zu (dem anderen Kernel) wechseln .

(Ich muss Live-Kernel-Debugging durchführen und Änderungen vornehmen, damit ich nicht neu starten kann.)

Codierer
quelle

Antworten:

8

Es gibt keine Möglichkeit, zwei vollständige Kernel auszutauschen. Ich bin sicher, Sie können die Bedeutung eines monolithischen Kernels wie Linux verstehen und warum dies es unmöglich macht, ihn einfach zu ersetzen.

Das nächste, was Sie bekommen können, ist ein Live-Patching-Prozess mit Ksplice . Es konvertiert Kernel-Updates in magische Shims, die Löcher in einen laufenden Kernel schließen können, sodass Sie den Computer unbegrenzt eingeschaltet lassen können, ohne dass ein Neustart erforderlich ist. Für Ihre Zwecke können Sie auch Änderungen rückgängig machen.

Es ist kostenlos für Ubuntu Desktop-Editionen, damit Sie damit herumspielen können, aber Sie müssen ein Abonnement für Server bezahlen (wo solche Dinge am dringendsten benötigt werden).


Habe gerade deine Bearbeitung gesehen. Ksplice wird wahrscheinlich nicht helfen, wenn Sie Ihre eigenen Kernel für das Debuggen manuell hacken und erstellen, da "der Dienst" darin besteht, dass sie die speziellen Updates bereitstellen und nicht von Ihnen selbst generiert werden können.

Wenn Sie nur Dinge gegen einen offiziellen Kernel erstellen, funktioniert dies möglicherweise immer noch.


Noch eine Idee: Virtualisierung. Sie können Ihren neuen Kernel erstellen und Dinge in Ihrer VM austauschen und neu starten. Der Neustart wird noch einige Zeit in Anspruch nehmen, aber Sie könnten die VM viel leichter als Ihre Entwicklungsmaschine machen (basierend auf Ubuntu Server, den X-Server löschen, wenn Sie ihn nicht benötigen usw.).

Oli
quelle
1
aber ich möchte zwischen zwei verschiedenen Kerneln in meinem / boot-Verzeichnis wechseln
Codierer
1
Ja, Sie können nicht willkürlich zwischen zwei Kerneln wechseln. Ich habe eine weitere Bearbeitung mit einer anderen Idee hinzugefügt, die jedoch für Sie funktionieren könnte.
Oli
2

Wie Oli bereits erwähnt hat, ist Ihre beste Einstellung wahrscheinlich die Virtualisierung.

Wenn Sie jedoch an Hardware basteln, ist die Virtualisierung möglicherweise nicht für Sie geeignet. In diesem Fall können Sie kexecden laufenden Kernel ohne vollständigen Neustart austauschen.

Entnommen von der ArchWiki- kexecSeite :

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

Beachten Sie, dass die oben genannten Dienste weiterhin alle Dienste neu starten , einschließlich Ihres Init-Systems, des Anzeigeservers, des Netzwerks usw. Wenn Sie jedoch ein ausreichend schnelles Init-System verwenden, systemdkönnen Sie Ihren neuen Kernel seitdem in 2-3 Sekunden starten Sie umgehen das BIOS / UEFI und den Bootloader.


Eine ähnliche Beschreibung finden Sie auf der RapidReboot Ubuntu Wiki-Seite .

Attila O.
quelle
0

Ich denke, diese Antworten müssen aktualisiert werden.

Es gibt jetzt kpatch , das nativer ist als ksplice et al.

Es kann jedoch aus offensichtlichen Gründen keine kerninternen Datenstrukturen ändern, sodass es hauptsächlich für Sicherheits-Hotpatches nützlich ist.

Das allgemeine Problem ist immer: Durch das Ausführen von Prozessen bleiben die Kerneldatenstrukturen erhalten, und es wird erwartet, dass die Kernelfunktionen sie erwarten und zurückgeben. Und ohne diese Prozesse ist es nicht wirklich möglich zu wissen, ob dies der Fall ist. Sie können diese also erst ändern, wenn alle Prozesse, die sie verwenden, neu gestartet wurden. Es würde auch ein Live-Patching all dieser Programme erfordern.
Und ich habe nicht einmal Treiberänderungen erwähnt, wenn sich die Hardware in einem besonderen Zustand befindet. (Gleiches Problem wie bei kexec .)

Evi1M4chine
quelle