Solaris 10: Problems booting off mirror drive -- Error 22: No such partition

Solaris 10 5/08 on Ultra 40 M2

It boots fine off primary disk but having issues booting off the mirror disk.
I get this error when booting off mirror disk:

Booting 'Solaris 10 ... Mirror disk'

root (hd1,0,a)

Error 22: No such partition

Press any key to continue...

Any idea what's going on? What am I missing? (There is a 3rd disk in the system with Windows XP but I don't think it has anything to do with this error).

I followed this procedure to mirror the disks. They are mirrored but the mirror is not bootable, which defeats the purpose if the primary disk fails.

Solaris x86 root filesystem mirr...

# metastat

d2: Mirror
Submirror 0: d20
State: Okay
Submirror 1: d21
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 8401995 blocks (4.0 GB)

d20: Submirror of d2
State: Okay
Size: 8401995 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s1 0 No Okay Yes

d21: Submirror of d2
State: Okay
Size: 8401995 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s1 0 No Okay Yes

d1: Mirror
Submirror 0: d10
State: Okay
Submirror 1: d11
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 241858575 blocks (115 GB)

d10: Submirror of d1
State: Okay
Size: 241858575 blocks (115 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s0 0 No Okay Yes

d11: Submirror of d1
State: Okay
Size: 241858575 blocks (115 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s0 0 No Okay Yes

Device Relocation Information:
Device Reloc Device ID
c1t1d0 Yes id1,sd@n5000c5000652a133
c1t0d0 Yes id1,sd@n5000c50003cca7a3

# /sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/
c1t1d0s0

# cat /grub/boot/menu.lst

#############################################################
title Solaris 10 5/08 s10x_u5wos_10 X86
kernel /platform/i86pc/multiboot
module /platform/i86pc/boot_archive
#############################################################
title Solaris failsafe
kernel /boot/multiboot kernel/unix -s
module /boot/x86.miniroot-safe
#############################################################
title Solaris 10 5/08 s10x_u5wos_10 X86 Mirror Disk
root (hd1,0,a)
kernel /platform/i86pc/multiboot
module /platform/i86pc/boot_archive
#############################################################
title Windows XP
rootnoverify (hd2,0)
map (hd0) (hd2)
map (hd2) (hd0)
chainloader +1
#---------------------END BOOTADM--------------------

#: l /dev/rdsk/c1t0d0s0 # primary disk
lrwxrwxrwx 1 root root 63 Sep 14 2008 /dev/rdsk/c1t0d0s0 -> ../../
devices/pci@0,0/pci10de,376@a/pci1000,3150@0/sd@0,0:a,raw

#: l /dev/rdsk/c1t1d0s0 # mirror disk
lrwxrwxrwx 1 root root 63 Sep 17 2008 /dev/rdsk/c1t1d0s0 -> ../../
devices/pci@0,0/pci10de,376@a/pci1000,3150@0/sd@1,0:a,raw 

I am not very familiar with Solaris for Intel but when making mirrors on SPARC Solaris you have to use installboot(1m) to make the second disk bootable, see: Solstice DiskSuite - Admin's Guide.
This page mentions using installboot on a Solaris for Intel system.
Perhaps that is the problem?

The x86 version of installboot is called installgrub:

#: /sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/${MIR_DISK}s0
stage1 written to partition 0 sector 0 (abs 16065)
stage2 written to partition 0, 233 sectors starting at 50 (abs 16115)

A few links to installgrub:

Mirroring root With Solaris Volume Manager in the Solaris 9 and 10 OS - BigAdmin - wikis.sun.com

x86: How to Create a RAID-1 Volume From the root (/) File System (Solaris Volume Manager Administration Guide) - Sun Microsystems

The above doesn't work BTW, it won't boot off mirror. Have tried everything. Maybe my eeprom setting is not right??

.

it doesn't work this way on x86 systems to boot from mirror. you've to pull out the first disk to boot from mirror disk.

also you should add an entry with "eeprom" called "altbootpath". have a look at the output of eeprom after booting from your normal disk to find how the entry should look like.

Well, I think I should be able to boot off the mirror disk without removing the primary disk, after all, I can do that with Windows XP, which is the 3rd disk in the system.
But I did try that anyway and got the dreaded Error 22 for the thousand and one time.

I think this looks better:

# eeprom altbootpath=/pci@0,0/pci10de,376@a/pci1000,3150@0/sd@1,0:a

#: eeprom | grep -i bootpath
bootpath=/pci@0,0/pci10de,376@a/pci1000,3150@0/sd@0,0:a
altbootpath=/pci@0,0/pci10de,376@a/pci1000,3150@0/sd@1,0:a

BTW, found this line for x86, doesn't work either, neither file exists on my system:

# installboot /usr/platform/i86pc/lib/fs/ufs/pboot /usr/platform/i86pc/lib/fs/ufs/bootblk /dev/rdsk/${MIR_DISK}s2

#: ll /usr/platform/i86pc/lib/fs/ufs/pboot /usr/platform/i86pc/lib/fs/ufs/bootblk
/usr/platform/i86pc/lib/fs/ufs/pboot: No such file or directory
/usr/platform/i86pc/lib/fs/ufs/bootblk: No such file or directory

Update:

I was able to boot off the mirror disk, which was specified in the /grub/boot/menu.lst file.

Now question, just to be completely sure, how do I know which disk I booted off? Is there anything in the system logs that says "I booted off MIRROR disk and not primary"?

I did yank out the primary disk, tried to boot off mirror and went back to the Error 22 above.

How do I validate that the mirror disk is bootable? Can I swap primary and mirror disks and just let it boot?

OK, I can boot off either disk but I am not real sure that when I boot off the mirror, I am actually booting off that mirror.

The reason I am saying this, when I look at output of df in either case, I always get the same disk:

#: df -kFufs
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/md/dsk/d1       119098248 12882647 105024619    11%    /
/dev/dsk/c1t0d0s4    51634246   51217 51066687     1%    /part2
/dev/dsk/c1t0d0s3    51634246   51217 51066687     1%    /part1
/dev/dsk/c1t0d0s5    51634246   51217 51066687     1%    /part3
/dev/dsk/c1t0d0s7    10331209   10265 10217632     1%    /export/home

The disk mirroring makes the /etc/vstab file look the same on both sides, so once booted it will mount the same volumes unless you split the mirroring and then change the vfstab file on the second half of the mirror...

Thanks for clarifying that...