Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I want to switch between different version of kernel installed on my system without reboot.

That is to say if i have '3.0.0-16-generic kernel currently running and i have older kernel 3.0.0-14-generic also there, then I maybe be able to switch to 3.0.0-14-generic(the other kernel) without rebooting .

(I need to do live kernel debugging and making changes so in order to do so i can't reboot)

share|improve this question
up vote 5 down vote accepted

There is no way to swap out two complete Kernels. I'm sure you can understand the significance of a monolithic kernel like Linux and why that makes it impossible to simply replace.

The closest you can get is a live-patching process using Ksplice. It converts Kernel updates into magical shims that can plug holes in a running Kernel, allowing you to keep the computer on indefinitely without needing a reboot. For your purposes, it also lets you roll back changes.

It is free for Ubuntu Desktop editions so you can play around with it but you have to pay a subscription for servers (where this sort of thing is most needed).

Just seen your edit. Ksplice probably isn't going to help if you're manually hacking and building your own Kernels for debugging as "the service" is that they provide the special updates and they're not something you can generate on your own.

If you're just building things against an official kernel, it might still work.

One more idea: Virtualisation. You could build your new kernel and swap things around in your VM and reboot. It's still going to take the time it needs to reboot but you could make the VM much more light than your development machine (base it on Ubuntu Server, drop the X server if you don't need it, etc).

share|improve this answer
but i want to switch between two different kernels in my /boot directory – coder Mar 12 '12 at 11:31
Yeah, you're not going to be able to arbitrarily switch between two kernels. I've added another edit with another idea that might work for you though. – Oli Mar 12 '12 at 12:10

As Oli mentioned, your best shot is probably virtualisation.

That said, if you're tinkering with hardware, virtualisation might not cut it for you, in which case, you could use kexec to swap the running kernel without a full reboot.

Taken from the ArchWiki kexec page:

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

Note that the above will still restart all services, including your init system, the display server, networking, etc. However, if you use a fast enough init system, like systemd, your can boot into your new kernel in 2-3 seconds, since you're bypassing the BIOS/UEFI and the bootloader.

A similar description can be found on the RapidReboot Ubuntu Wiki page.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.