SUMMARY: Replace an FCAL disk

From: Bill.Sherman@bridge.bellsouth.com
Date: Tue Jun 08 1999 - 09:06:55 CDT


Sun managers:

The final answer is:
1) Drop DiskSuite metadb
2) Remove the /dev/dsk & /dev/rdsk entries
3) Replace the drive & wait for spin up
4) Run /usr/sbin/drvconfig to verify the drivers
5) Run /usr/sbin/disks to rebuild the /dev/dsk /dev/rdsk files
6) Recreate the DiskSuite metadb

Got about 5 answers, but unfortunately the names were lost to the email
quota demons (sorry everyone, especially the one who pointed to the
disks command)

Here is a script I'm using to do this automaagically. It's based on a 2
disk mirror.

**********************************************************************
#!/usr/bin/ksh

# Procedure to replace a mirror
# Bill Sherman - June 1, 1999

DEBUG= #echo

# Source in the global variables
# These are kept in a cluster.variables file

DISK1=/dev/dsk/c0t0d0
DISK2=/dev/dsk/c2t4d0

ROOT=s0
SWAP=s1
META=s3
BTO=s4
VAR=s5
LENSDATA=s6

# End of cluster.variables

# Minimize the PATH stuff
PATH=/sbin:/usr/sbin:/bin:/usr/sbin:/usr/opt/SUNWmd/sbin
export PATH

BADFILE=/tmp/bad_mirror.lis

# Get a list of the bad partitions
metastat | awk '
        BEGIN { MIR = ""; MD = ""; STATE = ""; DEV = "" }
        /^d.*:/ {
                if ( MD > "" && STATE !~ /Okay/ ) {
                        print MIR, MD, DEV
                        MIR = ""
                        MD = ""
                        STATE = ""
                        DEV = ""
                }
                if ( $0 ~ /Mirror/ ) { MIR = substr( $1, 1, length( $1)
- 1) }
                else { MD = substr( $1, 1, length( $1) - 1) }
        }
        /State:/ { STATE = $2 }
        /^[ ]c/ { DEV = $1 }
END { if ( MD > "" && STATE !~ /Okay/ ) { print MIR, MD, DEV }
}' >$BADFILE

DISK=$( awk '{print substr( $NF, 1, length( $NF) - 2) }' $BADFILE | sort
-u )
if [[ -z $DISK ]]
then
   echo "No disk to replace... exiting"
   exit 1
fi

# Remove the metaDB from the bad disk
echo "Removing the MetaDB from ${DISK}..."
${DEBUG} metadb -d ${DISK}${META}

# Remove the entries in /dev/dsk and /dev/rdsk
${DEBUG} rm /dev/dsk/${DISK}s? /dev/rdsk/${DISK}s?

# Physically replace the disk
read ans?"Replace the bad drive now. Press <RETURN> to continue "

# Wait for the disk to spin up
WAIT=20
L=0
printf "Waiting ${WAIT} seconds for the drive to spin up"
while [[ ${L} -lt ${WAIT} ]]
do
   printf "."
   sleep 1
   let "L = ${L} + 1"
done
print

# Reconfigure the drivers and disk entries
echo "Reconfiguring and formatting the disk..."
${DEBUG} /usr/sbin/drvconfig
${DEBUG} /usr/sbin/disks

# Format the new drive
if [[ -r /HA/HADISK.format && -r /HA/HADISK.commands ]]
then
   export FORMAT_PATH=/HA/HADISK.format:/etc/format.dat
   ${DEBUG} format -d ${DISK} -f /HA/HADISK.commands -p HADISK
else
   echo "Can't find files for formatting disk... exiting!"
   exit 1
fi

# Recreate the metaDB
echo "Recreating the MetaDB..."
${DEBUG} metadb -c 3 -a ${DISK}${META}

# Tell DiskSuite to replace the mirrors
echo "Reattaching the mirrors..."
cat $BADFILE | while read MIR MD DEV
do
   ${DEBUG} metareplace -e ${MIR} ${DEV}
done

cat <<EOF

The disk should now be synchronizing. Use the stat command
to check the status.

EOF
rm ${BADFILE}
stat
exit



This archive was generated by hypermail 2.1.2 : Fri Sep 28 2001 - 23:13:20 CDT