source: gpfs_3.1_ker2.6.20/lpp/mmfs/bin/mmdevdiscover @ 16

Last change on this file since 16 was 16, checked in by rock, 16 years ago
  • Property svn:executable set to *
File size: 4.9 KB
Line 
1#!/bin/ksh
2# IBM_PROLOG_BEGIN_TAG
3# This is an automatically generated prolog.
4
5
6
7# Licensed Materials - Property of IBM
8
9# (C) COPYRIGHT International Business Machines Corp. 2004,2005
10# All Rights Reserved
11
12# US Government Users Restricted Rights - Use, duplication or
13# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
14
15# IBM_PROLOG_END_TAG
16# @(#)54 1.8 src/avs/fs/mmfs/ts/admin/mmdevdiscover.sh, mmfs, avs_rgpfs24, rgpfs240610b 8/8/05 19:09:02
17##############################################################################
18#
19# This script is invoked by GPFS to discover the disk devices on the
20# local machine that will subsequently be opened for NSD volume identifier
21# mapping.  We open each of the devices listed and examine sector 2 for a
22# volume identifier that correlates to a volume identifier recorded in our
23# configuration database.  If a match is found then this machine has local
24# access to the underlying NSD device and local I/O occurs through the local
25# device interface.  This script will also invoke
26#
27#   /var/mmfs/etc/nsddevices
28#
29# if it is supplied by the user.  If the nsddevices script exits with
30# a return code of zero, then no other disk discovery is performed.
31# If nsddevices does not exist, or returns with a non-zero return
32# code, then this script performs its normal disk discovery steps.
33#
34# The output from both this script and nsddevices is a number of lines
35# with the following format:
36#
37#   deviceName deviceType
38#
39# where
40#   deviceName is a device name ("hdisk1", "sda", etc.)
41#   deviceType is a known disk types.
42#
43# Known disk types currently are:
44#
45#   powerdisk  - EMC power path disk
46#   vpath      - IBM virtual path disk
47#   dlmfdrv    - Hitachi dlm
48#   hdisk      - AIX hard disk
49#   lv         - AIX logical volume.  Historical usage only.
50#                Not allowed as a new device to mmcrnsd.
51#   generic    - Device having no unique failover or multipathing
52#                characteristic (predominantly Linux devices).
53#
54# Example:
55#
56#   hdisk1  hdisk
57#   hdisk2  hdisk
58#
59##############################################################################
60
61# Include global declarations and service routines.
62. /usr/lpp/mmfs/bin/mmglobfuncs
63
64sourceFile="mmdevdiscover.sh"
65[[ -n $DEBUG || -n $DEBUGmmdevdiscover ]] && set -x
66$mmTRACE_ENTER "$*"
67
68# Change this if you want stderr to go elsewhere.
69STDERR=/dev/null
70
71
72########################################################
73# Invoke the nsddevices user exit, if it was activated.
74# If the script exits with a zero return code then we
75# use it exclusively and will not do anything more.
76# If nsddevices does not exist, or if it returns with
77# a non-zero return code, then we will perform normal
78# GPFS disk discovery.
79########################################################
80if [[ -x $nsddevices ]]
81then
82  $nsddevices
83  [[ $? -eq 0 ]] && cleanupAndExit 0
84fi
85
86
87##################################################
88# Perform the normal GPFS disk discovery process.
89##################################################
90if [[ $osName = AIX ]]
91then
92  # Get the names of Virtual Shared Disks, if any.
93  if [[ -x $lsvsd ]]
94  then
95    $lsvsd 2>$STDERR | $awk '{ if (NF > 0) print $1 " vsd" }'
96  fi
97
98  # Get all defined and available vpaths, hdisks, etc.
99  LC_ALL=C $getlvodm -F 2>$STDERR |                   \
100    $awk '                                            \
101      /hdiskpower/  { print $1 " powerdisk" ; next }  \
102      /dlmfdrv/     { print $1 " dlmfdrv"   ; next }  \
103      /vpath/       { print $1 " vpath"     ; next }  \
104      /hdisk/       { print $1 " hdisk"     ; next }  \
105    '
106
107  # Get all logical volume names.
108  # LVs are supported in older file systems only.  Not allowed as a new device.
109  LC_ALL=C $lsvg -o 2>$STDERR | LC_ALL=C $lsvg -i -l 2>$STDERR | \
110    $awk '                                  \
111      /LV NAME/ || /:/  { next }            \
112                        { print $1 " lv" }  \
113    '
114
115elif [[ $osName = Linux ]]
116then
117  # Get the names of all disks, vpaths, etc.
118  $awk '                                                                 \
119    /emcpower/   { if (NF > 3 && $3 > 1) print $4 " powerdisk" ; next }  \
120    /vpath/      { if (NF > 3 && $3 > 1) print $4 " vpath"     ; next }  \
121    /[sh]d/      { if (NF > 3 && $3 > 1) print $4 " generic"   ; next }  \
122  ' /proc/partitions 2>$STDERR
123
124else
125  print -u2  " Unknown operating system $osName "
126  cleanupAndExit
127fi
128
129# Search for the disk type of "file" in the mmsdrfs file.
130# Note:  This is used for testing during development only.
131possiblefiles=$($awk -F: '                      \
132  /':$SG_DISKS:'/ {                             \
133    if ($'$NSD_SUBTYPE_Field' == "file") {      \
134      { print $'$NSD_SUBTYPE_DISKNAME_Field' }  \
135    }                                           \
136  }                                             \
137 ' $mmsdrfsFile)
138for testfile in $possiblefiles
139do
140  [[ -f $testfile ]] && print -- "$testfile file"
141done
142
143cleanupAndExit 0
144
Note: See TracBrowser for help on using the repository browser.