I’ve been upgrading systems from opensuse 11.4 to opensuse 12.1. This message describes a problem in booting an upgraded system, and the workaround I found.
The system has two SATA hard drives and a SD/SDHC/etc. removable flash chip interface. Under opensuse 11.4, the hard drives were identified as /dev/sda and /dev/sdb, while the flash chips took various other names, e.g. /dev/sde.
This morning, the system refused to boot. Upon investigation, I determined that the hard drives were being given the names “/dev/sde” and “/dev/sdf”, while the flash chips were getting /dev/sda, etc. In “/boot/grub/menu.lst”, I saw “root=/dev/sda1”. Using rescue mode, I mounted the boot partition and chrooted to it, after doing bind mounts for /dev, /proc, /sys and /run. I edited menu.lst to use a /dev/disk/by-id/… identifier for the partition, then ran grub-install to update the MBR.
The system now proceeded further in the boot sequence. It then encountered a second problem, which I will detail in a separate thread.
I’m puzzled because the system booted properly immediately after I performed the upgrade. My hypothesis is that the opensuse 12.1 kernel parallelizes system initialization, leading to varying device enumeration orders. Another possibility is that, since I applied updates after previously booting opensuse 12.1, perhaps one of the updates changed the order of device enumeration.
I have other systems that use the older naming convention in menu.lst (e.g., “root=/def/sda1”). I am considering proactively changing them to use /dev/disk/by-id/…
If the problem I described here does in fact exists for the reasons I’ve hypothesized, I think that the opensuse upgrader should warn the user of the potential problem and offer to make the change I described.