Mirror Drives

 

FAQ: 
How to setup Disk Suite(SDS) Mirrors 
for Root, Swap, and data via the command line.


By Colin A. Bitterfield
EX-SUN Microsystems, Inc.
Contact Me
 


 Step 1: Setup proper slices


         Suggestions for a 36GB drive, use the same partition table for both drives.
         0 [root] 4GB
         1 [swap] 4GB
         2 [backup] -
         3 /export/home 4GB
         4 /data (Remainer)
         5 open
         6 open
         7 [meta devices] (last 10MB of disl space)
         Assumptions:
          Drive 0: c0t0d0
          Drive 1: c0t1d0

 Step 2: Load OS w/SDS 4.2.1 & reboot.

 Step 3: Initialize the Metadb database (w/2 replicas per drive) * See notes on database at end.


         > metadb -a -f -c 2 c0t0d0s7 c0t1d0s7
         > metadb

 Step 4: Create Metadevices for one side of the mirror


         [root]
         > metainit -f d10 1 1 c0t0d0s0
         > metainit d20 1 1 c0t1d0s0
         > metainit d0 -m d10
         > metaroot d0
         [swap]
         > metainit -f d11 1 1 c0t0d0s1
         > metainit d21 1 1 c0t1d0s1
         > metainit d1 -m d11
         [export/home]
         > metainit -f d12 1 1 c0t0d0s3
         > metainit d22 1 1 c0t1d0s3
         > metainit d2 -m d12
         [data]
         > metainit -f d13 1 1 c0t0d0s4
         > metainit d23 1 1 c0t1d0s4
         > metainit d3 -m d13
         > lockfs -fa

 Step 5: (Reboot the system)

 Step 6: Attach the second half of the mirror


         [root]
         > metattach d0 d20
         [swap]
         > metattach d1 d21
         [export/home]
         > metattach d2 d22
         [data]
         > metattach d3 d23

 Step 7. (Make sure that VFSTAB points to meta devices)


         edit the file and make sure that the devices are something like:
         Look for [Root], Swap, Home & Data. Pay attention to swap.
         /dev/md/dsk/d0 /dev/md/rdsk/d0
         Check for all slices.
       #device         device          mount           FS      fsck    mount   mount
       #to mount       to fsck         point           type    pass    at boot options
       #/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr          ufs     1       yes     -
       fd      -       /dev/fd fd      -       no      -
       /proc   -       /proc   proc    -       no     -
       /dev/md/dsk/d1  -       -       swap    -       no      -
       /dev/md/dsk/d0  /dev/md/rdsk/d0 /       ufs     1       no      -
       /dev/md/dsk/d2  /dev/md/rdsk/d2 /export/home    ufs     1       yes     -
       /dev/md/dsk/d3  /dev/md/rdsk/d3 /data   ufs     1       yes     -
       swap    -       /tmp    tmpfs   -       yes     -
      

 Step 8. (Make sure that disk1 is bootable)

  example# installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk  /dev/rdsk/c0t1d0s0
 

 Step 9. (NVRAM)


         Make sure that boot-device = disk0,disk1
         sentenv boot-device = disk0 disk1

All Done.

Q & A:

Q. How many replica's do I need ? What happens if I only have 2 disks
A. There is an issue with having only 2 disks. The system will remain operational until reboot. The system tries to get a quorum on the database replicas > 50%. This is not possible with only two disks. The system will reboot into single user mode and you will have to use metadb -d  /dev/dsk/c0t0d0s0 (or whatever the replica that is bad). Then reboot one more time. When you bring the mirror back on line you will need to re-create the  metadb.
 

Q. I have two disks that are different sizes. (i.e. (1) 18GB and (1) 36GB) what do I do ?
A. Make the partition sizes larger on disk 1. The following configuration was tested using this FAQ.
 

Disk 0 (4GB)

Current partition table (original):
Total disk cylinders available: 3880 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders        Size            Blocks
  0       root    wm     486 - 3377        2.98GB    (2892/0/0) 6246720
  1       swap    wu       0 -  485      512.58MB    (486/0/0)  1049760
  2     backup    wm       0 - 3879        4.00GB    (3880/0/0) 8380800
  3       home    wm    3378 - 3852      500.98MB    (475/0/0)  1026000
  4 unassigned    wm       0               0         (0/0/0)          0
  5 unassigned    wm       0               0         (0/0/0)          0
  6 unassigned    wm       0               0         (0/0/0)          0
  7 alternates    wm    3870 - 3879       10.55MB    (10/0/0)     21600
 

Disk 1 (9GB)

Current partition table (unnamed):
Total disk cylinders available: 4924 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders        Size            Blocks
  0       root    wm     293 - 2045        3.00GB    (1753/0/0)  6295023
  1       swap    wu       0 -  292      513.75MB    (293/0/0)   1052163
  2     backup    wm       0 - 4923        8.43GB    (4924/0/0) 17682084
  3       home    wm    2046 - 2332      503.23MB    (287/0/0)   1030617
  4 unassigned    wm       0               0         (0/0/0)           0
  5 unassigned    wm       0               0         (0/0/0)           0
  6 unassigned    wm       0               0         (0/0/0)           0
  7 alternates    wm    4913 - 4923       19.29MB    (11/0/0)      39501

Q. How do I know if a slice/mirror has failed?
A. metastat

Q. How "safe" is this procedure ? How well does it protect my system ?
A.

Q. I only have one controller in the system. What are the risks ?
A. If the controller fails, then none of the mirroring will help keep the system up. The controller becomes the "weakest link"

Q. How do I automate checking for slice errors?
A. This is directly from the manual. Create this script and activate it nightly from cron.


        #
        #ident "@(#)metacheck.sh   1.3     96/06/21 SMI"
        #
        # Copyright (c) 1992, 1993, 1994, 1995, 1996 by Sun Microsystems, Inc.
        #
         #
        # DiskSuite Commands
        #
        MDBIN=/usr/sbin
        METADB=${MDBIN}/metadb
        METAHS=${MDBIN}/metahs
        METASTAT=${MDBIN}/metastat
         #
        # System Commands
        #
        AWK=/usr/bin/awk
        DATE=/usr/bin/date
        MAILX=/usr/bin/mailx
        RM=/usr/bin/rm
         #
        # Initialization
        #
        eval=0
        date=`${DATE} '+%a %b %e %Y'`
        SDSTMP=/tmp/sdscheck.${$}
        ${RM} -f ${SDSTMP}
         MAILTO=${*:-"root"}   # default to root, or use arg list
         #
        # Check replicas for problems, capital letters in the flags indicate an error.
        #
        dbtrouble=`${METADB} | tail +2 | \
            ${AWK} '{ fl = substr($0,1,20); if (fl ~ /[A-Z]/) print $0 }'`
        if [ "${dbtrouble}" ]; then
                echo ""   >>${SDSTMP}
                echo "SDS replica problem report for ${date}" >>${SDSTMP}
                echo ""   >>${SDSTMP}
                echo "Database replicas are not active:"     >>${SDSTMP}
                echo ""   >>${SDSTMP}
                ${METADB} -i >>${SDSTMP}
                eval=1
        fi
         #
        # Check the metadevice state, if the state is not Okay, something is up.
        #
        mdtrouble=`${METASTAT} | \
            ${AWK} '/State:/ { if ( $2 != "Okay" ) print $0 }'`
        if [ "${mdtrouble}" ]; then
                echo ""  >>${SDSTMP}
                echo "SDS metadevice problem report for ${date}"  >>${SDSTMP}
                echo ""  >>${SDSTMP}
                echo "Metadevices are not Okay:"  >>${SDSTMP}
                echo ""  >>${SDSTMP}
                ${METASTAT} >>${SDSTMP}
                eval=1
        fi
         #
        # Check the hotspares to see if any have been used.
        #
        hstrouble=`${METAHS} -i | \
            ${AWK} ' /blocks/ { if ( $2 != "Available" ) print $0 }'`
        if [ "${hstrouble}" ]; then
                echo ""  >>${SDSTMP}
                echo "SDS Hot spares in use  ${date}"  >>${SDSTMP}
                echo ""  >>${SDSTMP}
                echo "Hot spares in usage:"  >>${SDSTMP}
                echo ""  >>${SDSTMP}
                ${METAHS} -i >>${SDSTMP}
                eval=1
        fi
        #
        # If any errors occurred, then mail the report to root, or whoever was called
        # out in the command line.
        #
        if [ ${eval} -ne 0 ]; then
                ${MAILX} -s "SDS problems ${date}" ${MAILTO} <${SDSTMP}
                ${RM} -f ${SDSTMP}
        fi
         exit ${eval}

last update on 28 Apr, 2005

[Colin's Home] [News] [Contact me] [Articles] [Solaris Resources] [Win32 Resources] [Mooniacs] [Aviation] [Photo Albums] [Family] [Private]