Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. 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 have an industrial PC mounting Linux.

These PC is delivered in two version, each with slightly different internal board and depending on the board type the disk inside the PC is see as hda or hdc.

Until now, to select between the two type of disk boot I simply put two entry inside the grub menu.lst like show below, so at the first start of the PC the maintenance people will select the correct device which will be memorize for future reboot.

default = 0
timeout = 9

title Linux 2.4.34 ( hda )
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.34 ro root=/dev/hda1 console=ttyS0,9600 console=tty0 apm=off

title Linux 2.4.34 ( hdc )
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.34 ro root=/dev/hdc1 console=ttyS0,9600 console=tty0 apm=off

But in most cases this type of PC are delivered without screen and keyboard and the maintenance people are not able to select the boot option so I'm looking for a way that allow the PC to check for the correct boot device before loading the kernel.

In pratical term I need that the boot procedure check if the disk is see as /dev/hdc or as /dev/hda in order to call the boot option with the right value for root device ( ie root=/dev/hda1 or root=/dev/hdc1 )

The problem is that I have no idea if that is possible and how to do that.

Someone have some suggestion about this topic ?

share|improve this question
Well Linux can't detect anything, it's not loaded yet. I'm having a hard time understanding your scenario. If you can configure the bootloader, why not put only the right entry there? – Mat Dec 11 '12 at 9:18
yes, is a complex requirement, I know. And I also know that is quite impossible for linux to make somethink at that early stage because is not yet loaded. Nut I'm looking if there are some way to check what is the right disk in order to select automatically the right boot entry for grub. – enzo2 Dec 11 '12 at 10:46
I can't put myself the right entry because there is a lot of this PC also on far isolated site, and people that go there to do maintenance are not always able to check the right boot disk to the right PC. You have to consider that both PC and disk are spare time that should be changeg when they are damaged and the requirement is to avoid tha maintenance people have to manage with different disk for different type of PC. – enzo2 Dec 11 '12 at 10:47
I still don't understand. Who installs & configures the bootloader? Isn't it installed on the disk we're talking about? Who creates & prepares those disks? Is there more than one disk on those machines? – Mat Dec 11 '12 at 12:47
The disk should be replaced because of a damage. In thies case the new disk should have a default device not compatible with the PC on wich it will be mounted. All this is thinked to allow maintenance by people that didn't know linux. – enzo2 Dec 11 '12 at 14:31

Mat's answer should work for you. I'd like to point out another possibility: use an initramfs/initrd.

You can ship an initrd (I'm pretty sure initramfs is post-2.4, but 2.4 should have initrd) that contains some code to find the rootfs. The advantage of an initrd is that you are running Linux at that point. You can write, e.g., a shell script to do find the root fs. Once you find it, you mount it, pivot_root to it, and exec /sbin/init.

You gain other nice things—for example, if the different boards (now or in the future) need to have different modules loaded to see the hard disk or other boot-critical devices, you can do that.

You could also put various recovery things on there, which may prove useful.

(On a modern Linux distro, the root= option is actually handled by the initramfs.)

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.