Accessing Mirrored Metadevice When Booting from CD/DVD

How do you access mirrored root disks when booting into single user mode from either network or DVD/CD? Presumably because of luck I have not been forced into this situation. When booting from DVD or network in single user mode your mirrored root disks will not be available.

If you are booting single user mode from an alternative media, probably something fairly bad has already happened to the machine. Unless you feel like creating more problems for yourself do not mount any submirrors manually in read/write mode. You are pretty much going to wreck the whole system. It should not be necessary to explain why.

I found the procedure for activating metadevices in single user mode while booted from DVD, on this mailing list, while looking for something else. But I decided to put it up here, just in case it disappears. Plus, I think it is a very handy procedure. I tested this on Solaris 10, just to see if it works.

Once I booted the system from I DVD, mounted one of the submirrors in RO mode:

# mount -o ro /dev/dsk/c0t0d0s1 /a

After that I copied md.conf file from the submirror into proper location for the currently running kernel - the one loaded from DVD:

# cp /a/kernel/drv/md.conf /kernel/drv/md.conf

Then I unmounted the submirror:

# umount /a

After that I used update_drv command to force the md module to reread the md.conf file I have retrieved from the submirror. In Solaris 9 and Solaris 10 md.conf contains mirror configuration. In Solaris 8 it is in /etc/system file.

# update_drv md
devfsadm: mkdir failed for /dev 0x1ed: Read-only file system
#

And that was it. My mirrors were activated:

# metastat
d0: Mirror
    Submirror 0: d1
      State: Needs maintenance
    Submirror 1: d2
      State: Needs maintenance
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 11839905 blocks (5.6 GB)

d1: Submirror of d0
    State: Needs maintenance
    Invoke: metasync d0
    Size: 11839905 blocks (5.6 GB)
    Stripe 0:
        Device   Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s0        0     No            Okay   Yes


d2: Submirror of d0
    State: Needs maintenance
    Invoke: metasync d0
    Size: 11839905 blocks (5.6 GB)
    Stripe 0:
        Device   Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s0        0     No            Okay   Yes


d10: Mirror
    Submirror 0: d11
      State: Needs maintenance
    Submirror 1: d12
      State: Needs maintenance
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 1220940 blocks (596 MB)

d11: Submirror of d10
    State: Needs maintenance
    Invoke: metasync d10
    Size: 1220940 blocks (596 MB)
    Stripe 0:
        Device   Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s1        0     No            Okay   Yes


d12: Submirror of d10
    State: Needs maintenance
    Invoke: metasync d10
    Size: 1220940 blocks (596 MB)
    Stripe 0:
        Device   Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s1        0     No            Okay   Yes


d70: Mirror
    Submirror 0: d71
      State: Needs maintenance
    Submirror 1: d72
      State: Needs maintenance
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 7727265 blocks (3.7 GB)

d71: Submirror of d70
    State: Needs maintenance
    Invoke: metasync d70
    Size: 7727265 blocks (3.7 GB)
    Stripe 0:
        Device   Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s7        0     No            Okay   Yes


d72: Submirror of d70
    State: Needs maintenance
    Invoke: metasync d70
    Size: 7727265 blocks (3.7 GB)
    Stripe 0:
        Device   Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s7        0     No            Okay   Yes


Device Relocation Information:
Device   Reloc  Device ID
c0t0d0   Yes    id1,sd@SSEAGATE_ST373307LSUN72G_3HZ75X6Y000074380JVB
c1t0d0   Yes    id1,sd@SSEAGATE_ST373307LSUN72G_3HZ9DXR2000075159L9J

Solaris is cool…