An example of mirroring the root disks with DiskSuite on Solaris 9. Step by step instructions on how to mirror 2 internal root disks with the bundled version of DS.
With a default install (Entire Group plus/minus OEM) of Solaris 9, you should have Solaris Volume Manager installed. It’s basically disksuite with a few niceties. I believe one of them is viewing the volumes in MB instead of cylinders. Don’t quote me on that.
Vi /etc/lvm/md.tab and follow the example below:
# Root Mirror MetaDevices # MetaDevice for c1t0d0s0 (boot disk root slice) /dev/md/dsk/d11 1 1 /dev/dsk/c1t0d0s0 # MetaDevice for c1t1d0s0 (bootmirror disk root slice) /dev/md/dsk/d12 1 1 /dev/dsk/c1t1d0s0 # MetaDevice for a mirror using boot disk to start with /dev/md/dsk/d10 -m /dev/md/dsk/d11 # Swap Mirror Metadevices # MetaDevice for c1t0d0s1 (boot disk swap) /dev/md/dsk/d21 1 1 /dev/dsk/c1t0d0s1 # MetaDevice for c1t1d0s1 (bootmirror disk swap) /dev/md/dsk/d22 1 1 /dev/dsk/c1t1d0s1 # MetaDevice for Swap Mirror /dev/md/dsk/d20 -m /dev/md/dsk/d21 # /export Mirror Metadevices # MetaDevice for c1t0d0s5 /dev/md/dsk/d31 1 1 /dev/dsk/c1t0d0s7 # MetaDevice for c1t1d0s5 /dev/md/dsk/d32 1 1 /dev/dsk/c1t1d0s7 # MetaDevice for Export Mirror /dev/md/dsk/d30 -m /dev/md/dsk/d31 # /usr Mirror Metadevices # MetaDevice for c1t0d0s3 /dev/md/dsk/d41 1 1 /dev/dsk/c1t0d0s3 # MetaDevice for c1t1d0s3 /dev/md/dsk/d42 1 1 /dev/dsk/c1t1d0s3 # MetaDevice for /usr Mirror /dev/md/dsk/d40 -m /dev/md/dsk/d41 # /var Mirror Metadevices # MetaDevice for c1t0d0s4 /dev/md/dsk/d51 1 1 /dev/dsk/c1t0d0s4 # MetaDevice for c1t1d0s3 /dev/md/dsk/d52 1 1 /dev/dsk/c1t1d0s4 # MetaDevice for /var Mirror /dev/md/dsk/d50 -m /dev/md/dsk/d51
Now create your metadatabase. It holds info about your volumes. This is similar to encapsulation under Veritas.
[root@server /]# metadb -af -c 4 /dev/dsk/c1t0d0s6 [root@server /]# metadb -af -c 4 /dev/dsk/c1t1d0s6
Make sure that the database replicas were created.
[root@server /]# metadb
        flags           first blk       block count
     a        u         16              8192            /dev/dsk/c1t0d0s6
     a        u         8208            8192            /dev/dsk/c1t0d0s6
     a        u         16400           8192            /dev/dsk/c1t0d0s6
     a        u         24592           8192            /dev/dsk/c1t0d0s6
     a        u         16              8192            /dev/dsk/c1t1d0s6
     a        u         8208            8192            /dev/dsk/c1t1d0s6
     a        u         16400           8192            /dev/dsk/c1t1d0s6
     a        u         24592           8192            /dev/dsk/c1t1d0s6
Initialize your metadevices. You don’t have to force each one but I did for quicker Bash shortcuts (up arrow).
[root@server /]# metainit -f /dev/md/dsk/d11 d11: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d12 d12: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d10 d10: Mirror is setup [root@server /]# metainit -f /dev/md/dsk/d21 d21: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d22 d22: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d20 d20: Mirror is setup [root@server /]# metainit -f /dev/md/dsk/d31 d31: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d32 d32: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d30 d30: Mirror is setup [root@server /]# metainit -f /dev/md/dsk/d41 d41: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d42 d42: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d40 d40: Mirror is setup [root@server /]# metainit -f /dev/md/dsk/d51 d51: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d52 d52: Concat/Stripe is setup [root@server /]# metainit -f /dev/md/dsk/d50 d50: Mirror is setup
Here, metaroot modifies vfstab to boot / off the d10 metadevice
[root@server /]# metaroot d10
Then manually change /dev/dsk/c1t0d0s1 for swap to read /dev/md/dsk/d20
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # fd - /dev/fd fd - no - /proc - /proc proc - no - /dev/md/dsk/d20 - - swap - no - /dev/md/dsk/d10 /dev/md/rdsk/d10 / ufs 1 no - /dev/md/dsk/d40 /dev/md/rdsk/d40 /usr ufs 1 no - /dev/md/dsk/d50 /dev/md/rdsk/d50 /var ufs 1 no - /dev/md/dsk/d30 /dev/md/rdsk/d30 /export ufs 2 yes - swap - /tmp tmpfs - yes -
Reboot to check your progress. If your server comes up, continue while doing a happy dance.
Root’s fine
[root@server /]# df -lk / Filesystem kbytes used avail capacity Mounted on /dev/md/dsk/d10 5039370 336115 4652862 7% /
Swap’s fine
[root@server /]# swap -l swapfile dev swaplo blocks free /dev/md/dsk/d20 85,20 16 2097392 2097392
Do the following for every mirror pair, here I attach d11 to d12 as d10 (d11 is assumed by our previous config file).
[root@server /]# metattach d10 d12 d10: submirror d12 is attached
[…]
[root@server /]# metastat|grep Resync State: Resyncing Resync in progress: 2 % done State: Resyncing
Best idea to let one synch go at a time. Watch status with:
while true; do metastat|grep %; sleep 1; done
When you don’t see Resync progress anymore, the mirrors are sync’d. Then we check to see how our new mirrors are doing:
[root@server /]# metastat
d40: Mirror
    Submirror 0: d41
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 6142014 blocks (2.9 GB)
d41: Submirror of d40
    State: Okay
    Size: 6142014 blocks (2.9 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s3          0     No            Okay   Yes
d30: Mirror
    Submirror 0: d31
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 51314418 blocks (24 GB)
d31: Submirror of d30
    State: Okay
    Size: 51314418 blocks (24 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s5          0     No            Okay   Yes
d20: Mirror
    Submirror 0: d21
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 2097414 blocks (1.0 GB)
d21: Submirror of d20
    State: Okay
    Size: 2097414 blocks (1.0 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s1          0     No            Okay   Yes
d10: Mirror
    Submirror 0: d11
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 10238616 blocks (4.9 GB)
d11: Submirror of d10
    State: Okay
    Size: 10238616 blocks (4.9 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s0          0     No            Okay   Yes
d50: Mirror
    Submirror 0: d51
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 1022706 blocks (499 MB)
d51: Submirror of d50
    State: Okay
    Size: 1022706 blocks (499 MB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s4          0     No            Okay   Yes
d52: Concat/Stripe
    Size: 1022706 blocks (499 MB)
    Stripe 0:
        Device     Start Block  Dbase   Reloc
        c1t1d0s4          0     No      Yes
d42: Concat/Stripe
    Size: 6142014 blocks (2.9 GB)
    Stripe 0:
        Device     Start Block  Dbase   Reloc
        c1t1d0s3          0     No      Yes
d32: Concat/Stripe
    Size: 51314418 blocks (24 GB)
    Stripe 0:
        Device     Start Block  Dbase   Reloc
        c1t1d0s5          0     No      Yes
d22: Concat/Stripe
    Size: 2097414 blocks (1.0 GB)
    Stripe 0:
        Device     Start Block  Dbase   Reloc
        c1t1d0s1          0     No      Yes
d12: Concat/Stripe
    Size: 10238616 blocks (4.9 GB)
    Stripe 0:
        Device     Start Block  Dbase   Reloc
        c1t1d0s0          0     No      Yes
Device Relocation Information:
Device   Reloc  Device ID
c1t1d0   Yes    id1,ssd@w20000004cf9f2e91
c1t0d0   Yes    id1,ssd@w20000004cf99e53f