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 | |
---|
64 | sourceFile="mmdevdiscover.sh" |
---|
65 | [[ -n $DEBUG || -n $DEBUGmmdevdiscover ]] && set -x |
---|
66 | $mmTRACE_ENTER "$*" |
---|
67 | |
---|
68 | # Change this if you want stderr to go elsewhere. |
---|
69 | STDERR=/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 | ######################################################## |
---|
80 | if [[ -x $nsddevices ]] |
---|
81 | then |
---|
82 | $nsddevices |
---|
83 | [[ $? -eq 0 ]] && cleanupAndExit 0 |
---|
84 | fi |
---|
85 | |
---|
86 | |
---|
87 | ################################################## |
---|
88 | # Perform the normal GPFS disk discovery process. |
---|
89 | ################################################## |
---|
90 | if [[ $osName = AIX ]] |
---|
91 | then |
---|
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 | |
---|
115 | elif [[ $osName = Linux ]] |
---|
116 | then |
---|
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 | |
---|
124 | else |
---|
125 | print -u2 " Unknown operating system $osName " |
---|
126 | cleanupAndExit |
---|
127 | fi |
---|
128 | |
---|
129 | # Search for the disk type of "file" in the mmsdrfs file. |
---|
130 | # Note: This is used for testing during development only. |
---|
131 | possiblefiles=$($awk -F: ' \ |
---|
132 | /':$SG_DISKS:'/ { \ |
---|
133 | if ($'$NSD_SUBTYPE_Field' == "file") { \ |
---|
134 | { print $'$NSD_SUBTYPE_DISKNAME_Field' } \ |
---|
135 | } \ |
---|
136 | } \ |
---|
137 | ' $mmsdrfsFile) |
---|
138 | for testfile in $possiblefiles |
---|
139 | do |
---|
140 | [[ -f $testfile ]] && print -- "$testfile file" |
---|
141 | done |
---|
142 | |
---|
143 | cleanupAndExit 0 |
---|
144 | |
---|