A Little Help Here, Please…

I know that a lot of very knowledgeable gurus read this site, and I’d like to ask a favor of some assistance with an unusual issue that I’m currently having. Any help would be appreciated.

This article was originally posted as a forum submission at two different forums. You can read those threads here and here for some more info and progress.

Here’s a little background for everyone…

I am running Slackware as my primary operating system and Arch as my secondary (backup) operating system on my main computer (ericsbane05). I also have installations of MS Windows XP, CentOS, and Debian on a separate hard drive.

SATA looks like this on my system:

SATA0 channel = /dev/sda, /dev/sdb
SATA1 channel = /dev/sdc, /dev/sr1
SATA2 channel = vacant, vacant

Originally, these drives were in ericsbane03 and 04 with one exception. I only had two SATA drives and one EIDE drive then. The EIDE drive was removed when building this new system and replaced with the drive /dev/sdc that you see above on the SATA1 channel (/dev/sr1 is a DVD R/W, by the way).

Arch Linux’s GRUB controls /dev/sda’s MBR and is the main bootloader for all operating systems on this system. Here’s what my menu.lst looks like:

<snip># IMPORTANT –> Arch GRUB sees /dev/sda as hd0, but /dev/sdb as hd2 (should be hd1).
#
# (1) Slackware64-13.37
title  Slackware Primary
root   (hd0,0)
kernel /boot/vmlinuz root=/dev/sda1 ro
initrd /boot/initrd.gz
#
# (2) Arch64
title  Arch Linux Secondary
root   (hd0,4)
kernel /boot/vmlinuz26 root=/dev/sda5 ro
initrd /boot/kernel26.img

# (3) MS Windows XP/SP3
title MS WIN XP Pro
root (hd2,0)
map (hd0) (hd2)
map (hd2) (hd0)
chainloader +1

# (4) CentOS64 5.6
title    CentOS Tester01
root    (hd2,5)
kernel    /boot/vmlinuz-2.6.18-238.9.1.el5 root=/dev/sdb6 ro
initrd    /boot/initrd-2.6.18-238.9.1.el5.img<snip>

You can see that Arch’s GRUB thinks that /dev/sdb is (hd2), when in fact, it should be (hd1). This was like this originally because of the hybrid EIDE/SATA setup that I had on previous systems. Now that I’m running pure SATA, I’d like to get this fixed. Here’s what I’ve done so far:

1) I manually edited /boot/grub/device.map to look like this:

(fd0)    /dev/fd0
(hd0)    /dev/sda
(hd1)    /dev/sdb
(hd2)    /dev/sdc

It was originally incorrect, but this didn’t fix the issue. GRUB was still seeing the drives incorrectly.

2) I then deleted all files from the /boot/grub directory and used pacman to uninstall GRUB completely.

3) I then reinstalled GRUB and created a new menu.lst with the correct /dev to (hd) conversions. It looks like this now:

<snip>
# (1) Slackware64-13.37
title  Slackware Primary
root   (hd0,0)
kernel /boot/vmlinuz root=/dev/sda1 ro
initrd /boot/initrd.gz
#
# (2) Arch64
title  Arch Linux Secondary
root   (hd0,4)
kernel /boot/vmlinuz26 root=/dev/sda5 ro
initrd /boot/kernel26.img

# (3) MS Windows XP/SP3
title MS WIN XP Pro
root (hd1,0)
map (hd0) (hd1)
map (hd1) (hd0)
chainloader +1

# (4) CentOS64 5.6
title    CentOS Tester01
root    (hd1,5)
kernel    /boot/vmlinuz-2.6.18-238.9.1.el5 root=/dev/sdb6 ro
initrd    /boot/initrd-2.6.18-238.9.1.el5.img<snip>

The entries for Windows and CentOS reflect the new (and correct) device.map in /boot/grub.

4) After all this, I reinstalled GRUB to the MBR like this:

# grub-install /dev/sda

Unfortunately, GRUB is still seeing /dev/sdb as (hd2). I can get all my operating systems to boot just fine by using the wrong (hd) strings in menu.lst, but I’d really like to get GRUB to work the way it’s supposed to. I’m sure there is something simple here that I’m missing. Any help would be appreciated.

Thanks,

~Eric

Addenda: Here’s a copy of my fdisk -l output along with notations. It might be helpful:

Disk /dev/sdb: 250.0 GB, 250000000000 bytes
255 heads, 63 sectors/track, 30394 cylinders, total 488281250 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0009e140

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1    *      16384    51216383    25600000    7  HPFS/NTFS/exFAT <– MS Windows XP C partition
/dev/sdb2        51232768   102432767    25600000    7  HPFS/NTFS/exFAT
/dev/sdb3       102453181   488270159   192908489+   5  Extended <– swap
/dev/sdb5       102453183   106550639     2048728+  82  Linux swap
/dev/sdb6       106565823   137289599    15361888+  83  Linux <– CentOS /
/dev/sdb7       137304783   188501039    25598128+  83  Linux
/dev/sdb8       188516223   219239999    15361888+  83  Linux <– Debian /
/dev/sdb9       219255183   270451439    25598128+  83  Linux
/dev/sdb10      270466623   301190399    15361888+  83  Linux <– tester /
/dev/sdb11      301205583   352401839    25598128+  83  Linux
/dev/sdb12      352417023   383140799    15361888+  83  Linux <– tester /
/dev/sdb13      383155983   434352239    25598128+  83  Linux
/dev/sdb14      434367423   488270159    26951368+  83  Linux <– storage

Disk /dev/sdc: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002cd1d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1           16065   102414374    51199155   83  Linux <– Slackware backups
/dev/sdc2       102430440   204828749    51199155   83  Linux <– Arch backups
/dev/sdc3       204844815   488392064   141773625    5  Extended
/dev/sdc5       204860880   307259189    51199155    b  W95 FAT32 <– MS Windows backups
/dev/sdc6       307275318   409673564    51199123+  83  Linux <– tester backups
/dev/sdc7       409689693   488392064    39351186    b  W95 FAT32 <– common storage

Disk /dev/sda: 250.1 GB, 250058268160 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488395055 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x24812481

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *       16065    51215219    25599577+  83  Linux <– Slackware primary operating system /
/dev/sda2        51247350   153645659    51199155   83  Linux
/dev/sda3       153661725   488392064   167365170    5  Extended
/dev/sda5       153661788   204860879    25599546   83  Linux <– Arch secondary operating system /
/dev/sda6       204877008   307275254    51199123+  83  Linux
/dev/sda7       307307448   311403959     2048256   82  Linux swap <– swap
/dev/sda8       311420088   488392064    88485988+  83  Linux <– archives

Thanks again. :)

About these ads

3 Comments on “A Little Help Here, Please…”

  1. Matt Joiner says:

    It’s just an idea, but you may be able to adjust the hard disk “boot order” in your BIOS to achieve the desired effect.

    Also I think you can manually specify a device.map file when running grub-* utilities. You could try passing this file explicitly.

    Most distros have moved on to GRUB2, but I don’t blame you for sticking it out with GRUB legacy, it was really easy to use.

  2. Well, I’ve decided just to let this be for a while. I know how to work around it, so that’s not an issue. It was just one annoying little quirk. I’ll figure it out some where down the road a piece.

    Regards,

    ~Eric


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 43 other followers