Synopsis:
Installing openSUSE 13.1 on computer with a PERC raid controller fails at firstboot.
Workaround provided in this thread.
Bug was reported 2013-12-05 but they don't seem to bother with handling a critical bug?
I wanted to install openSUSE 13.1 with LXDE desktop on both a DELL PowerEdge 1800 tower server and a DELL PowerEdge 2850 blade server.
After refurbishing them, adding more memory and disks, upgrading firmware and BIOS, and running DELL Diagnostics, Memtest86+ and a simple burn in test being Debian Live PXE booted linux running a script compressing and uncompressing a large number of small files, thus loading both CPU and disk near 100% for some hours to see if anything breaks, it was time for installing openSUSE 13.1.
installing openSUSE from a local repository mirror, (including update mirror), is rather fast.
The installation went well up to the point where the system boots for the first time, after which the Yast first boot configuration should take place.
But then it didn't reboot. GRUB2 loaded as it should. Generic MBR pointing to first active boot partition, where GRUB2 loads and takes over the booting. Then it should fire up the system, but no, no...
It can't find the root partition. In fact it can't find the disks at all. This is despite the fact GRUB2 loaded fine from the same disk.
Since i have the boot option "splash=verbose" i can see it complains about "Could not find /dev/root", and repeatedly tries to find it with no luck.
If the boot option is splash=silent, (default), then pressing left arrow key gets rid of the lizard graphics and shows the console log, complaining about not finding the root partition.
after searching for the solution on the web for a while i found that the issue has to do with the PERC raid controller, and that the issues with "not finding /dev/root" at boot with the PERC controllers is an issue going some ten years back in time. Some different variants, but affecting all Linux distributions.
But what about the Debian Live? Well, the bug seem to be handled some years ago for Debian.
So what's new here for openSUSE 13.1? Well, it seems like the Yast installer trims away lots of stuff when making the initrd image. You know - Where all the necessary driver modules go so the system will boot properly. Earlier variant of this bug stems from the driver module megaraid being replaced by megaraid2. And after that because if was replaced again with megaraid_mbox. Then the installer gets confused by it booting with megaraid2, (or megaraid_mbox), but then udev tells it to put the driver module "megaraid" in the initrd image. Which of course fails, since it is not the proper driver for the hardware.
But in this case with
openSUSE 13.1 installer the issue is it
simply trims away all the modules from the initrd image when configuring the bootloader for the installed system.
This affects all the LSI/DELL PERC raid controllers. (Possibly also the CERC controllers)?
I have tested this with:
LSI/DELL PERC 4e/Di
LSI/DELL PERC 4/DC
LSI/DELL PERC 4/SC
And they all fail the first boot when installing openSUSE 13.1.
It affects both x86_64 and i586 versions of openSUSE, and no matter if running the install DVDs or by PXE booted net installer which i like to use.
The bug is reported. But doesn't seem to be solved?
https://bugzilla.novell.com/show_bug.cgi?id=853914
A workaround that solves the booting issue with some effort:
First, install openSUSE like usual. After the install is complete it will reboot and fail because it didn't get the driver modules needed for mounting the root partition.
Then reboot the system with a live linux system, like the rescue CD for openSUSE, or as i did, network boot Clonezilla Live and enter the command shell.
Make sure you are logged in as root. For Clonezilla Live, enter "sudo su -" to become root.
mount the root partition like:
Code:
mount /dev/sda2 /mnt
Then modify the file /mnt/etc/sysconfig/kernel.
Personally i hate the vi editor, and prefer using emacs, joe or any other decent editor, or even to use a head/tail/cat combo to modify a file.
There is a line in the file like:
Wow. It's empty! No modules are selected to be put in the initrd image. Not even the driver for our raid disk controller. (And not any display drivers or filesystems like reiserfs for that matter).
We must manually put in all the required modules to be loaded at boot into this config line.
Considering the PERC raid controller we need to put in megaraid_mbox in there. (Also reiserfs if we have a root partition formatted with reiserfs).
So we need to change the line to be:
Code:
INITRD_MODULES="megaraid_mbox"
Then we want to remake the initrd image to reflect the change we just did to /etc/sysconfig/kernel on our root partition.
Remember we previously mounted the root partition /dev/sda2 on /mnt to work with.
Now we need to "chroot" to be able to make the new, (now complete), initrd image, and also to reinstall the GRUB2 bootloader.
Proceed as follows:
Code:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
Unless it complains about the above, proceed as follows:
Code:
chroot /mnt
mkinitrd
grub2-install /dev/sda
exit
After this, reboot the system and it should boot properly into the Yast first boot configuration, and thereafter work as it should.
We need to do the "mkinitrd" after changing the /etc/sysconfig/kernel file. Haven't bothered to check if "grub2-install" will do the "mkinitrd" automagically. Better to make sure.
The workaround should be permanent to that particular system since it is a permanent change of sysconfig that is then propagated to the boot code.
Interesting that the thread https://bugzilla.novell.com/show_bug.cgi?id=853914 claims that the bug belong to mkinitrd and then decided to do nothing.
Don't know what they where thinking about, since mkinitrd cannot "imagine" what's needed but not included in the sysconfig file. So the bug is still there, for what i know - In the openSUSE 13.1 installer system preconfiguration pruning away all the modules from the initrd image.
This thread will be marked as solved when the actual bug is taken care of.