Summary: sdXX -> cXtXdX

From: zoo11@mail.hst.co.kr
Date: Mon Jul 29 2002 - 23:58:38 EDT


Hi. Gurus

Sorry for late summary and thanks for your effort.

I got no answer with particular rule to convert name. Almost every
messages that I recieved has solution for name converting not rule.

that is.
1) ls -l /dev/dsk/*
2) compare iostat -x and iostat -xn
3) Using 1) or 2) write a script to convert.

Here is a script to convert sdXX -> cXtXdX by Mike van der Velden.

Thanks you guys.

#!/bin/sh
#
# @(#) whatdev 1.1 99/03/09
#
# Used to convert sd instance numbers (eg. sd20) to SCSI hardware location
# (eg. c1t5d0s0) or the other way around. Can also list all such devices
# by using the -all option.
#
# Credits:
# hw2inst() function based on "phylog" script by Nick Hindley
# inst2hw() function based on "whatdev" script from Sun Microsystems
#
# Revision History
# 1.1 1999-03-09 Mike van der Velden
# Original Version. Converts sdxx to cxdxtxsx and back.
# Optionally lists all such devices.
#
# Feedback, bug fixes, enhancements? Send to mvanderv@yahoo.com
#

inst2hw ()
{
    # Convert the sd instance number into the SCSI hardware location.
    # Grabbed from the "phylog" script by Nick Hindley, 1998-08-04
    
    DEVNAME=$1
    TYPE=`echo $DEVNAME | cut -c 1-2`
    NUM=`echo $DEVNAME | cut -c3-255`

    DEVPATH=`sed 's/"//g' /etc/path_to_inst | \
             nawk -v type=$TYPE -v num=$NUM \
                  '{if (($2==num) && ($3==type)) print $1;}'`
    
    if [ -z "$DEVPATH" ]; then
        echo "No such device $DEVNAME"
        exit 2
    fi

    # now get all the devices out of /dev.
    # No way that I know of to map this back.

    for p in /dev/dsk /dev/rdsk /dev/rmt /dev/osa/dev/dsk /dev/osa/dev/rdsk;
    do
        if [ -d $p ]; then
            DEV=`ls -l $p | \
                    nawk -v device=$DEVPATH \
                         '{if ($NF ~ device) {print $(NF - 2);exit;}}'`
            if [ ! -z "$DEV" ]; then
                # still need work on the st/rmt devices, which currently
                # prints out as a simple number, not as, say rmt/0.
                echo $DEV
                break
            fi
        fi
    done
}

hw2inst ()
{
    # Convert the SCSI hardware location into the sd instance number.
    # From the script "whatdev" from the Solaris 2.X on Sun Hardware
    # Answerbook (or http://docs.sun.com)

    devname=$1

    for p in /dev /dev/osa/dev/dsk /dev/osa/dev/rdsk /dev/dsk /dev/rdsk /dev/rmt;
    do
        if [ -h $p/$devname ]; then
            DEVPATH=$p/$devname
            break
        fi
    done

    if [ -z "$DEVPATH" ]; then
        echo "No such device $devname"
        exit 2
    fi
    

    # print out the drive name - st0 or sd0 - given the /dev entry
    # first get something like "/iommu/.../.../sd@0,0"
    DEV=`/bin/ls -l $DEVPATH | \
         nawk '{ n = split($11, a, "/"); split(a[n],b,":"); \
                 for(i = 4; i < n; i++) printf("/%s",a[i]); \
                 printf("/%s\n", b[1]) }'`
    if [ ! -z "$DEV" ]; then
        # get the instance number and concatenate with the "sd"
        nawk -v dev=$DEV \
             '$1 ~ dev { n = split(dev, a, "/"); split(a[n], b, "@"); \
                         printf("%s%s\n", b[1], $2) }' /etc/path_to_inst
    fi
}

###############################################################
#
# MAIN
#

USAGE="$0 <device> | -all"

# "verbose" is an unadvertised option, useful for debugging
if [ "$1" = "-v" ]; then
    set -x
    shift
fi

if [ -z "$1" ]; then
    echo "Usage: $USAGE"
    exit 1
fi

case $1 in

    s*) # make sure slice number is *not* part of the name
         DEVNAME=`echo $1 | sed "s/\(s[dt][0-9]*\)[a-h]$/\1/"`
         inst2hw $DEVNAME
         ;;

    c*) # make sure slice number *is* part of the name
         DEVNAME=`echo $1 | sed "s/\(c[0-9]t[0-9]d[0-9]\)$/\1s0/"`
         hw2inst $DEVNAME
         ;;

   -all) if [ -d /dev/osa ]; then
             PREFIX="/dev/osa"
         fi
         for d in ${PREFIX}/dev/rdsk/c?t?d?s0; do
             DEVNAME=`basename $d`
             printf "%s --- " $DEVNAME
             hw2inst $DEVNAME
         done
         ;;

esac

exit 0
_______________________________________________
sunmanagers mailing list
sunmanagers@sunmanagers.org
http://www.sunmanagers.org/mailman/listinfo/sunmanagers



This archive was generated by hypermail 2.1.7 : Wed Apr 09 2008 - 23:24:40 EDT