Corrupt kernel update breaks mkinitrd - cannot boot

Today from YaST I ran the update to the kernel, and along with it the update to the corresponding VirtualBox OSE kernel module.

The update failed at the step where the initrd is rebuilt. Running mkinitrd in a terminal returns this error message:

Device root not found in sysfs

I’ve attempted to reinstall the update, downgrade back to the previous kernel, remove the VBox module first . . . everything fails, apparently due to the same error.

I have an old kernel and initrd which I could attempt to boot from, but I hesitate as I’ve never seen the above error and so I am unsure what may happen.

Suggestions how to fix this?

Thanks in advance.

P.S. By the way, googling the error returned only one hit (!), and that was from a post here which had no bearing on the problem above.

Maybe download them separately as files from the repo and install with rpm -ihv --nodeps?

It will install it along the existing kernels.
You could also update the kernel with it if you’d like with the files downloaded (i have no problems with the new kernel).

There was a post on the VirtualBox forum about somebody else with exactly the same problem with VBox OSE and the new kernel. Unfortunately no solution, but I can say that the PUEL version works fine with the new kernel.

Hi mingus,
Have seen yout helpful posts here in the install and boot section. You have help a lot of folks here. Sorry can’t help but I have a link not so relevant to your problem but the procedure is interesting and you might find a part to disect and might be able to apply in your present situation.
Here is the link. SUSE Linux Enterprise troubleshooting: Fixing boot problems by repairing a broken initrd

Thanks to each of you for your suggestions. I have not been able to pinpoint the fundamental problem, but I was able to repair the system and find an interim workaround.

The error is being thrown by /lib/mkinitrd/setup/ The mkinitrd process begins with the /sbin/mkinitrd script which runs the /sbin/mkinitrd_setup script which in turn runs the series of scripts in /lib/mkinitrd/setup. The (complex) code which is failing attempts to retrieve the root block device from the dynamic sysfs. The workaround is to run mkinitrd from a terminal thus (of course as root):

rootdev=<root block device> mkinitrd

Apparently the upgrade of the VBox kernel module invokes a rebuild of the initrd. I could not determine if the failure of this rebuild was caused by the package script itself, or by a previously created problem by something else such as the preceding kernel upgrade. Besides destroying the initrd, the VBox module itself could not be upgraded/reinstalled/removed via YaST. But zypper using --force did remove the VBox module, and reinstalled it successfully. However, the mkinitrd error is still there (despite reinstalling kernel-default-base, which is the kernel package which rebuilds the initrd) and so I expect future kernel upgrades to fail, i.e., I will need to do the upgrades from the command line using the workaround above for the initrd. I can’t file a bug report because I can’t really say how the problem was created in the first place.

This experience certainly re-emphasizes the value of keeping a backup of the kernel and initrd files in the /boot directory. Before I found the workaround I needed to reboot; fortunately I still had a copy of the previous kernel/initrd.