If you have a previously generated md.tab file to convert to use disk IDs, you can use the script in Example B-1 to help with the conversion. The script checks the md.tab file for physical device names, such as /dev/dsk/c0t0d0 or c0t0d0, and converts these names to the full DID name, such as /dev/did/rdsk/d60.
more phys_to_did
#! /bin/sh
#
# ident "@(#)phys_to_did 1.1 98/05/07 SMI"
#
# Copyright (c) 1997-1998 by Sun Microsystems, Inc.
# All rights reserved.
#
# Usage: phys_to_did <md.tab filename>
# Converts $1 to did-style md.tab file.
# Writes new style file to stdout.
MDTAB=$1
TMPMD1=/tmp/md.tab.1.$$
TMPMD2=/tmp/md.tab.2.$$
TMPDID=/tmp/didout.$$
# Determine whether we have a "physical device" md.tab or a "did" md.tab.
# If "physical device", convert to "did".
grep "\/dev\/did" $MDTAB > /dev/null 2>&1
if [ $? -eq 0 ]; then
# no conversion needed
lmsg=`gettext "no conversion needed"`
printf "${lmsg}\n"
exit 0
fi
scdidadm -l > $TMPDID
if [ $? -ne 0 ]; then
lmsg=`gettext "scdidadm -l failed"`
printf "${lmsg}\n"
exit 1
fi
cp $MDTAB $TMPMD1
...
...
# Devices can be specified in md.tab as /dev/rdsk/c?t?d? or simply c?t?d?
# There can be multiple device names on a line.
# We know all the possible c.t.d. names from the scdidadm -l output.
# First strip all /dev/*dsk/ prefixes.
sed -e 's:/dev/rdsk/::g' -e 's:/dev/dsk/::g' $TMPMD1 > $TMPMD2
# Next replace the resulting physical disk names "c.t.d." with
# /dev/did/rdsk/<instance>
exec < $TMPDID
while read instance fullpath fullname
do
old=`basename $fullpath`
new=`basename $fullname`
sed -e 's:'$old':/dev/did/rdsk/'$new':g' $TMPMD2 > $TMPMD1
mv $TMPMD1 $TMPMD2
done
cat $TMPMD2
rm -f $TMPDID $TMPMD1 $TMPMD2
exit 0
|