| 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. 1999,2007 | 
|---|
| 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 | # @(#)84 1.473.1.23 src/avs/fs/mmfs/ts/admin/mmglobfuncs.sh, mmfs, avs_rgpfs24, rgpfs24s012a 4/18/07 15:05:42 | 
|---|
| 17 | ##################################################################### | 
|---|
| 18 | # | 
|---|
| 19 | #  This file contains declarations and functions that are | 
|---|
| 20 | #  common to most of the commands.  All mm commands must | 
|---|
| 21 | #  read this dot script before they do anything else. | 
|---|
| 22 | # | 
|---|
| 23 | #  If a command needs additional dot scripts, they must | 
|---|
| 24 | #  be read after this one. | 
|---|
| 25 | # | 
|---|
| 26 | ##################################################################### | 
|---|
| 27 |  | 
|---|
| 28 | sourceFile="mmglobfuncs.sh" | 
|---|
| 29 | PS4='${0##*/}:${sourceFile}[$LINENO]> ' | 
|---|
| 30 | [[ -n $DEBUGmmglobfuncs ]] && set -x | 
|---|
| 31 |  | 
|---|
| 32 | #----------------------------------------------------------- | 
|---|
| 33 | # Determine the operating system name. | 
|---|
| 34 | #----------------------------------------------------------- | 
|---|
| 35 | osName=$(/bin/uname -s) | 
|---|
| 36 |  | 
|---|
| 37 |  | 
|---|
| 38 | #----------------------------------------------------------- | 
|---|
| 39 | # Set environment and save input arguments. | 
|---|
| 40 | #----------------------------------------------------------- | 
|---|
| 41 | unset ENV | 
|---|
| 42 | umask 022 | 
|---|
| 43 | UMASK_sv=022 | 
|---|
| 44 | export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/lpp/mmfs/bin" | 
|---|
| 45 | export PERL_BADLANG=0 | 
|---|
| 46 | integer argc=$# | 
|---|
| 47 | cmdline=$* | 
|---|
| 48 | mmcmd=${0##*/} | 
|---|
| 49 | if [[ $mmcmd = mmremote && "$1" = mmrpc* ]] | 
|---|
| 50 | then | 
|---|
| 51 | mmrpc="$1" | 
|---|
| 52 | shift 1 | 
|---|
| 53 | fi | 
|---|
| 54 | arg1="$1" | 
|---|
| 55 | arg2="$2" | 
|---|
| 56 | arg3="$3" | 
|---|
| 57 | arg4="$4" | 
|---|
| 58 | arg5="$5" | 
|---|
| 59 | arg6="$6" | 
|---|
| 60 | arg7="$7" | 
|---|
| 61 | arg8="$8" | 
|---|
| 62 | arg9="$9" | 
|---|
| 63 |  | 
|---|
| 64 |  | 
|---|
| 65 | #----------------------------------------------------------- | 
|---|
| 66 | # Global variables and constants | 
|---|
| 67 | #----------------------------------------------------------- | 
|---|
| 68 | primaryServer=""                # primary server for cluster sdr files | 
|---|
| 69 | backupServer=""                 # backup server for cluster sdr files | 
|---|
| 70 | mmmode=""                       # mm mode (cluster type) | 
|---|
| 71 | environmentType=""              # environment type | 
|---|
| 72 | gpfsObjectInfo=""               # GPFS object info | 
|---|
| 73 | sdrLocked=no                    # If yes, the sdr is locked. | 
|---|
| 74 | gpfsLocked=no                   # If yes, the Gpfs object is locked. | 
|---|
| 75 | envLocked=no                    # If yes, the local env update lock is held. | 
|---|
| 76 | lockId=$$                       # identifier for sdr locking | 
|---|
| 77 | getCredCalled=no                # If yes, the getCred function was executed. | 
|---|
| 78 | new_krb5=""                     # newly-obtained DCE credentials | 
|---|
| 79 | old_krb5="$KRB5CCNAME"          # DCE credentials prior to entering this script | 
|---|
| 80 | new_KRBTKFILE="/tmp/tktmmfs$$"  # Kerberos ticket file for the command | 
|---|
| 81 | old_KRBTKFILE="$KRBTKFILE"      # Kerberos file prior to entering this script | 
|---|
| 82 | nodesetId=""                    # the nodeset to which the command applies | 
|---|
| 83 | nsId=""                         # the nodeset to which this node belongs | 
|---|
| 84 | preferredNode=0                 # the first node to try when shipping command | 
|---|
| 85 | noUsageMsg=0                    # suppress the usage statement | 
|---|
| 86 | integer newGenNumber=0          # generation number for the mmsdrfs file | 
|---|
| 87 | integer sdrGenNumber=0          # most recent mmsdrfs generation number | 
|---|
| 88 | integer sdrGenTimestamp=0       # timestamp of the mmsdrfs generation number | 
|---|
| 89 | sdrfsFormatLevel=0              # the format level of the mmsdrfs file | 
|---|
| 90 | IFS_sv="$IFS"                   # value of the IFS environment variable | 
|---|
| 91 | ourNodeNumber=""                # the node number of this node | 
|---|
| 92 | ourNodeName=""                  # the reliable node name of this node | 
|---|
| 93 | ourShortName=""                 # the unqualified node name of this node | 
|---|
| 94 | ourUid=$(/usr/bin/id -u)        # the uid of the process invoking the command | 
|---|
| 95 |  | 
|---|
| 96 | BLANKchar=" " | 
|---|
| 97 | TABchar=" " | 
|---|
| 98 | NO_MOUNT_CHECK="_NO_MOUNT_CHECK_" | 
|---|
| 99 | MOUNT_CHECK_ONLY="_MOUNT_CHECK_ONLY_" | 
|---|
| 100 | CHECK_ALL="_CHECK_ALL_" | 
|---|
| 101 | RESIGN_FSMGR="_RESIGN_FSMGR_" | 
|---|
| 102 | NO_FILE_COPY="_NO_FILE_COPY_" | 
|---|
| 103 | LINK="_LINK_" | 
|---|
| 104 | NO_LINK="_NO_LINK_" | 
|---|
| 105 | UNKNOWN="_UNKNOWN_" | 
|---|
| 106 | UNRESOLVED="-" | 
|---|
| 107 |  | 
|---|
| 108 |  | 
|---|
| 109 | #----------------------------------------------------------- | 
|---|
| 110 | # Return codes and constants for internal mm command use. | 
|---|
| 111 | #----------------------------------------------------------- | 
|---|
| 112 | # mm command unique values: | 
|---|
| 113 | MM_Version3=3              # node runs version 2.3 or later | 
|---|
| 114 | MM_IncompatibleCode=188    # installed GPFS code is not compatible | 
|---|
| 115 | MM_FsMounted=189           # file system mounted somewhere | 
|---|
| 116 | MM_KExtFailure=190         # kernel extension load/unload failure | 
|---|
| 117 |  | 
|---|
| 118 | # Values based on the AIX errno.h constants: | 
|---|
| 119 | MM_RemoteNotFound=2        # remote cluster not found (ENOENT) | 
|---|
| 120 | MM_QuorumWait=11           # daemon waits for quorum (EAGAIN) | 
|---|
| 121 | MM_AccessDenied=13         # access denied (EACCES) | 
|---|
| 122 | MM_NotJoined=16            # node has not joined the cluster (EBUSY) | 
|---|
| 123 | MM_FsExists=17             # device already exists (EEXIST) | 
|---|
| 124 | MM_FsNotFound=19           # device does not exist (ENODEV) | 
|---|
| 125 | MM_DeviceNotFound=19       # device does not exist (ENODEV) | 
|---|
| 126 | MM_InvalidName=22          # invalid (device) name (EINVAL) | 
|---|
| 127 | MM_DaemonDown=50           # daemon not running (ENOCONNECT) | 
|---|
| 128 | MM_UnknownCluster=70       # unknown cluster (ENETUNREACH) | 
|---|
| 129 | MM_ConnectionReset=73      # connection reset (ECONNRESET) | 
|---|
| 130 | MM_TimedOut=78             # connection timed out (ETIMEDOUT) | 
|---|
| 131 | MM_HostDown=80             # host is down (EHOSTDOWN) | 
|---|
| 132 | MM_Remotefs=93             # remote file system (EREMOTE) | 
|---|
| 133 |  | 
|---|
| 134 | # Values based on GPFS ShErrno.h constants modulo 256: | 
|---|
| 135 | MM_ConnectTimeout=107      # connection timeout or error (E_NOTCONN) | 
|---|
| 136 | MM_SecurityCfg=208         # failed to load security keys (E_SECURITY_CFG mod 256) | 
|---|
| 137 | MM_AuthorizationFailed=214 # authorization failed (E_AUTHORIZATION_FAILED mod 256) | 
|---|
| 138 |  | 
|---|
| 139 |  | 
|---|
| 140 | #----------------------------------------------------------- | 
|---|
| 141 | # Well-known directories | 
|---|
| 142 | #----------------------------------------------------------- | 
|---|
| 143 | # Set the directory with the mm commands. | 
|---|
| 144 | if [[ -n $MMFSDIR ]] | 
|---|
| 145 | then | 
|---|
| 146 | mmcmdDir="${MMFSDIR}/bin" | 
|---|
| 147 | elif [[ -z $mmcmdDir ]] | 
|---|
| 148 | then | 
|---|
| 149 | mmcmdDir="/usr/lpp/mmfs/bin" | 
|---|
| 150 | else | 
|---|
| 151 | : # mmcmdDir must have been set by the caller | 
|---|
| 152 | fi | 
|---|
| 153 |  | 
|---|
| 154 | tscmdDir="$mmcmdDir"                           # directory with ts commands | 
|---|
| 155 | mmdataDir="/usr/lpp/mmfs/data/"                # directory for various mm data files | 
|---|
| 156 | mmsdrfsDir="/var/mmfs/gen/"                    # directory for various mm system files | 
|---|
| 157 | mmfscfgDir="/var/mmfs/etc/"                    # directory for mmfs config files | 
|---|
| 158 | tmpDir="/var/mmfs/tmp/"                        # directory for temporary files | 
|---|
| 159 | mmbackupDir="/var/mmfs/mmbackup"               # directory for use by mmbackup | 
|---|
| 160 | lockdir="/var/mmfs/etc/mmlock"                 # common lock directory | 
|---|
| 161 | mmfsEnvLockDir="/var/mmfs/gen/mmfsEnvLockDir"  # local mmfsEnv lock directory | 
|---|
| 162 | links=".links"                                 # directory with links to ts commands | 
|---|
| 163 | rasDir="/var/adm/ras/"                         # directory for daemon log files | 
|---|
| 164 | sslDir="/var/mmfs/ssl/"                        # directory for cluster security files | 
|---|
| 165 | sslStageDir="/var/mmfs/ssl/stage/"             # directory for cluster security files | 
|---|
| 166 | defaultAutomountDir="/gpfs/automountdir"       # default directory for automounts | 
|---|
| 167 |  | 
|---|
| 168 | # Keep the following two items in sync with globcfg.C | 
|---|
| 169 | mmpmonDir="/var/mmfs/mmpmon/"                  # directory for use by mmpmon | 
|---|
| 170 | mmpmonSocket="mmpmonSocket"                    # name of mmpmon named socket | 
|---|
| 171 |  | 
|---|
| 172 | # The env lock location can be altered with an environment variable. | 
|---|
| 173 | [[ -n $mmfsEnvLockLocation ]] &&  \ | 
|---|
| 174 | mmfsEnvLockDir="$mmfsEnvLockLocation/mmfsEnvLockDir" | 
|---|
| 175 |  | 
|---|
| 176 | # If the user is not root, relocate files used by | 
|---|
| 177 | # mmls commands to /tmp instead of /var/mmfs/tmp. | 
|---|
| 178 | [[ $ourUid -ne 0 ]] && tmpDir="/tmp/" | 
|---|
| 179 |  | 
|---|
| 180 | #----------------------------------------------------------- | 
|---|
| 181 | # Well-known file names | 
|---|
| 182 | #----------------------------------------------------------- | 
|---|
| 183 | if [[ $ourUid -eq 0 ]] | 
|---|
| 184 | then | 
|---|
| 185 | MULTIPLE_KEYS_5="${mmsdrfsDir}MULTIPLE_KEYS_5"          #esjxx ifdef file | 
|---|
| 186 | # mkdir -p $mmsdrfsDir ; touch $MULTIPLE_KEYS_5           #esjxx ifdef file | 
|---|
| 187 | fi | 
|---|
| 188 |  | 
|---|
| 189 | ignoreStartupMount=${mmfscfgDir}ignoreStartupMount # node-override for -A yes mounting | 
|---|
| 190 | localMountOptions=${mmfscfgDir}localMountOptions   # node-specific mount options; | 
|---|
| 191 | #  the suffix is the file system name | 
|---|
| 192 | mmfscfgFile=${mmfscfgDir}mmfs.cfg              # mmfs.cfg file used by the daemon | 
|---|
| 193 | mmfscfg=${mmfscfgDir}mmfs.cfg                  # mmfs.cfg file used by the daemon | 
|---|
| 194 | haslock=${lockdir}/haslock                     # pid and node of command that has lock | 
|---|
| 195 | hasEnvLock=${mmfsEnvLockDir}/hasEnvLock        # pid of cmd that has the mmfsEnv lock | 
|---|
| 196 | mmsdrfsFile=${mmsdrfsDir}mmsdrfs               # cached copy of the mmsdrfs file | 
|---|
| 197 | mmsdrfsTmp=${mmsdrfsDir}mmsdrfs.tmp            # uncommitted copy of the mmsdrfs file | 
|---|
| 198 | mmsdrfsPrev=${mmsdrfsDir}mmsdrfs.prev          # previous version of the mmsdrfs file | 
|---|
| 199 | uncommitted=${mmsdrfsDir}uncommitted           # empty file signifying commit in progress | 
|---|
| 200 | mmfsNodeData=${mmsdrfsDir}mmfsNodeData         # local node data (hostname, ipa, etc.) | 
|---|
| 201 | mmfsEnvLevel=${mmsdrfsDir}mmfsEnvLevel         # the suffix is equal to the gen number | 
|---|
| 202 | # of the local mmsdrfs file | 
|---|
| 203 | mmfsVfsNumber=${mmsdrfsDir}mmfsVfsNumber       # the suffix is equal to the major number | 
|---|
| 204 | # assigned to /dev entries on this node | 
|---|
| 205 | exclDiskFile=${mmsdrfsDir}exclDiskFile         # the suffix is equal to the file system | 
|---|
| 206 | # device name to which the disks belong | 
|---|
| 207 | mmsdrfsGen=${tmpDir}mmsdrfsGen                 # the suffix is the file's gen number | 
|---|
| 208 | mmauthKeyGen=${sslStageDir}mmauthKeyGen        # mmauth genkey file (format 1) | 
|---|
| 209 | #   the suffix is the key gen number | 
|---|
| 210 | genkeyData=${sslStageDir}genkeyData            # mmauth genkey file (format 2) | 
|---|
| 211 | #   the suffix is the key gen number | 
|---|
| 212 | mmfsNewKeyLevel=${mmsdrfsDir}mmfsNewKeyLevel   # the suffix is equal to the gen number | 
|---|
| 213 | # of the uncommitted private key file | 
|---|
| 214 | mmfsCommittedKeyLevel=${mmsdrfsDir}mmfsCommittedKeyLevel # the suffix is the gen number | 
|---|
| 215 | # of the committed private key file | 
|---|
| 216 | newPrivateKey=${sslDir}id_rsa_new              # uncommitted private key file | 
|---|
| 217 | committedPrivateKey=${sslDir}id_rsa_committed  # committed private key file | 
|---|
| 218 | newPublicKey=${sslDir}id_rsa_new.pub           # uncommitted public key file | 
|---|
| 219 | committedPublicKey=${sslDir}id_rsa_committed.pub # committed public key file | 
|---|
| 220 | newCertificate=${sslDir}id_rsa_new.cert        # uncommitted self-signed certificate | 
|---|
| 221 | committedCertificate=${sslDir}id_rsa_committed.cert # committed self-signed certificate | 
|---|
| 222 | publicKey=${sslDir}id_rsa.pub                  # link to the current public key | 
|---|
| 223 | privateKey=${sslDir}id_rsa                     # private key file for the local cluster | 
|---|
| 224 | #   the suffix is the key gen number | 
|---|
| 225 |  | 
|---|
| 226 | mmSdrLockExp=${mmsdrfsDir}mmSdrLockExp         # contains gen number and exp. timestamp | 
|---|
| 227 | nsdmap=${mmsdrfsDir}nsdmap                     # local disk name to pvid hints file | 
|---|
| 228 | nsdpvol=${mmsdrfsDir}nsdpvol                   # local disk name to nsd name file | 
|---|
| 229 | mmDirectMap=${mmsdrfsDir}mmDirectMap           # list of automountable file systems | 
|---|
| 230 | startupMountFile=${mmsdrfsDir}automountFile    # fs to mount at startup time | 
|---|
| 231 | automountFile=${mmsdrfsDir}automountFile       # fs to mount at startup time | 
|---|
| 232 | authorizedKeys=${sslDir}authorized_keys        # list of autorized keys | 
|---|
| 233 | knownCluster=${sslDir}known_cluster            # public key file for a remote cluster; | 
|---|
| 234 | #   the suffix is the cluster name. | 
|---|
| 235 | authorizedCertificates=${sslDir}authorized_certificates # list of autorized certificates | 
|---|
| 236 | knownCertificate=${sslDir}known_certificate    # certificate file for a remote cluster; | 
|---|
| 237 | #   the suffix is the cluster name. | 
|---|
| 238 | certConfigFile=${sslDir}openssl.conf           # options for openssl certificate | 
|---|
| 239 | opensslConfFile=${mmdataDir}openssl.conf       # template for openssl certificate | 
|---|
| 240 | rerunmmfsFile=${mmsdrfsDir}rerunmmfsFile       # file telling runmmfs to respawn mmfsd | 
|---|
| 241 | respawnlog=${mmsdrfsDir}runmmfs.respawnlog     # controls the rate of mmfsd respawn | 
|---|
| 242 | respawnlog2=${mmsdrfsDir}runmmfs.respawnlog.$$ # controls the rate of mmfsd respawn | 
|---|
| 243 | mmpmonNamedSocketFile=${mmpmonDir}${mmpmonSocket} # mmpmon named socket | 
|---|
| 244 | mmsdrservPid=${mmsdrfsDir}mmsdrservPid         # contains pid of the mmsdrserv process | 
|---|
| 245 |  | 
|---|
| 246 | # To get error messages from mmsdrserv, specify a file name in the mmsdrservLog | 
|---|
| 247 | # variable.  If this variable is not defined, all error msgs will be discarded. | 
|---|
| 248 | #mmsdrservLog=${tmpDir}mmsdrservLog            # log records from the mmsdrserv daemon | 
|---|
| 249 | [[ -z $mmsdrservLog ]] && mmsdrservLog="/dev/null" | 
|---|
| 250 |  | 
|---|
| 251 |  | 
|---|
| 252 | #----------------------------------------------------------- | 
|---|
| 253 | # Global working files | 
|---|
| 254 | #----------------------------------------------------------- | 
|---|
| 255 | adfile=${tmpDir}adapterFile.${mmcmd}.$$         # list of all node adapters | 
|---|
| 256 | rnfile=${tmpDir}relNamesFile.${mmcmd}.$$        # list of all reliable hostnames | 
|---|
| 257 | lslvOutput=${tmpDir}lslvOutput.${mmcmd}.$$      # lslv output | 
|---|
| 258 | sdrNodeFile=${tmpDir}sdrNodeFile.${mmcmd}.$$    # node-related information | 
|---|
| 259 | vsdNamesFile=${tmpDir}vsdNamesFile.${mmcmd}.$$  # list of all VSDs | 
|---|
| 260 | volGroupFile=${tmpDir}volGroupFile.${mmcmd}.$$  # list of all global volume groups | 
|---|
| 261 | allClusterNodes=${tmpDir}allClusterNodes.${mmcmd}.$$  # list of nodes in the cluster | 
|---|
| 262 | allQuorumNodes=${tmpDir}allQuorumNodes.${mmcmd}.$$    # list of all quorum nodes | 
|---|
| 263 | nodefile=${tmpDir}nodefile.${mmcmd}.$$          # list of nodes in the cluster | 
|---|
| 264 | diskfile=${tmpDir}diskfile.${mmcmd}.$$          # list of disks in the cluster | 
|---|
| 265 | newsdrfs=${tmpDir}newsdrfs.${mmcmd}.$$          # new version of mmsdrfs file | 
|---|
| 266 | tmpsdrfs=${tmpDir}tmpsdrfs.${mmcmd}.$$          # temp file for building the mmsdrfs | 
|---|
| 267 | mmsdrfsShadow=${mmsdrfsFile}.$$                 # temp copy of the sdr version of mmsdrfs | 
|---|
| 268 | sdrfs=${tmpDir}sdrfs.${mmcmd}.$$                # local copy of the mmsdrfs file | 
|---|
| 269 | oldsdrfs=${tmpDir}oldsdrfs.${mmcmd}.$$          # local copy of the mmsdrfs file | 
|---|
| 270 | stanza=${tmpDir}stanza.${mmcmd}.$$              # /etc/filesystems stanza | 
|---|
| 271 | oldstanza=${tmpDir}oldstanza.${mmcmd}.$$        # old version of /etc/filesystems stanza | 
|---|
| 272 | newstanza=${tmpDir}newstanza.${mmcmd}.$$        # new version of /etc/filesystems stanza | 
|---|
| 273 | newcfg=${tmpDir}newcfg.${mmcmd}.$$              # new version of mmfs.cfg file | 
|---|
| 274 | remainingFs=${tmpDir}remainingFs.${mmcmd}.$$    # remaining file systems info | 
|---|
| 275 | tmpfile=${tmpDir}tmpfile.${mmcmd}.$$            # temp file for misc use | 
|---|
| 276 | tmpfile2=${tmpDir}tmpfile2.${mmcmd}.$$          # second temp file for misc use | 
|---|
| 277 | tmpCfg=${tmpDir}tmpCfg.${mmcmd}.$$              # temp mmfs.cfg file | 
|---|
| 278 | tmpNodes=${tmpDir}tmpNodes.${mmcmd}.$$          # temp file with node names | 
|---|
| 279 | tmpDirectMap=${mmsdrfsDir}tmpDirectMap          # list of automountable file systems | 
|---|
| 280 | tmpPublicKey=${sslStageDir}tmpPublicKey.${mmcmd}.$$      # temp public key file | 
|---|
| 281 | tmpPrivateKey=${sslStageDir}tmpPrivateKey.${mmcmd}.$$    # temp private key file | 
|---|
| 282 | tmpCertificate=${sslStageDir}tmpCertificate.${mmcmd}.$$  # temp certificate file | 
|---|
| 283 | localAuthKeys=${tmpDir}localAuthKeys.${mmcmd}.$$         # local public keys | 
|---|
| 284 | localCertificates=${tmpDir}localCertificates.${mmcmd}.$$ # local certificates | 
|---|
| 285 | tmpAuthKeys=${tmpDir}tmpAuthKeys.${mmcmd}.$$             # temp authorized keys file | 
|---|
| 286 | tmpKnownCluster="${tmpDir}knownCluster.$$_"              # temp known cluster key file | 
|---|
| 287 | #  (suffix is the cluster name) | 
|---|
| 288 | tmpAuthCertificates=${tmpDir}tmpAuthCertificates.${mmcmd}.$$ # authorized certificates | 
|---|
| 289 | tmpKnownCertificate="${tmpDir}knownCertificate.$$_"      # temp known certificate file | 
|---|
| 290 | #  (suffix is the cluster name) | 
|---|
| 291 | unreachedNodes=${tmpDir}unreachedNodes.${mmcmd}.$$       # unreached nodes file | 
|---|
| 292 | sgDiskLines=${tmpDir}sgDiskLines.${mmcmd}.$$             # disk lines file | 
|---|
| 293 | diskNamesFile=${tmpDir}diskNamesFile.${mmcmd}.$$         # disk names file | 
|---|
| 294 | nsdDataFile=${tmpDir}nsdDataFile.${mmcmd}.$$             # NSD data file | 
|---|
| 295 | lqueryvgResult=${tmpDir}lqueryvgResult.${mmcmd}.$$       # lqueryvg output file | 
|---|
| 296 | lspvOutputFile=${tmpDir}lspvOutputFile.${mmcmd}.$$       # lspv output file | 
|---|
| 297 | tsOutputFile=${tmpDir}tsOutputFile.${mmcmd}.$$  # output file for a ts command | 
|---|
| 298 | errMsg=${tmpDir}errMsg.${mmcmd}.$$              # temp file for error messages | 
|---|
| 299 | #  (erase as soon as not needed) | 
|---|
| 300 | errMsg2=${tmpDir}errMsg2.${mmcmd}.$$            # temp file for error messages | 
|---|
| 301 | #  (erase as soon as not needed) | 
|---|
| 302 |  | 
|---|
| 303 |  | 
|---|
| 304 | GLOBAL_FILES=" $adfile $rnfile $sdrNodeFile $sdrfs $newsdrfs $volGroupFile  \ | 
|---|
| 305 | $tmpfile $tmpfile2 $tmpsdrfs $vsdNamesFile $diskfile  \ | 
|---|
| 306 | $oldstanza $stanza $newstanza $newcfg $tmpCfg $tmpNodes  \ | 
|---|
| 307 | $oldsdrfs $nodefile $sgDiskLines $diskNamesFile $nsdDataFile \ | 
|---|
| 308 | $errMsg $errMsg2 $mmsdrfsShadow $lslvOutput $unreachedNodes  \ | 
|---|
| 309 | $remainingFs $allClusterNodes $allQuorumNodes $lqueryvgResult  \ | 
|---|
| 310 | $tmpAuthKeys ${tmpKnownCluster}* $tmpDirectMap $tmpPrivateKey \ | 
|---|
| 311 | $tmpPublicKey $tsOutputFile $lspvOutputFile \ | 
|---|
| 312 | $tmpCertificate $localCertificates  \ | 
|---|
| 313 | $localAuthKeys $tmpAuthCertificates ${tmpKnownCertificate}* " | 
|---|
| 314 |  | 
|---|
| 315 |  | 
|---|
| 316 | #----------------------------------------------------------- | 
|---|
| 317 | # Full path names for GPFS commands | 
|---|
| 318 | #----------------------------------------------------------- | 
|---|
| 319 | daemonize=${mmcmdDir}/daemonize | 
|---|
| 320 | lxtrace=${mmcmdDir}/lxtrace | 
|---|
| 321 | mmchconfig=${mmcmdDir}/mmchconfig | 
|---|
| 322 | mmchecksubsys=${mmcmdDir}/mmchecksubsys | 
|---|
| 323 | mmclearfence=${mmcmdDir}/mmclearfence | 
|---|
| 324 | mmcommon=${mmcmdDir}/mmcommon | 
|---|
| 325 | mmcrclusterid=${mmcmdDir}/mmcrclusterid | 
|---|
| 326 | mmcrfsc=${mmcmdDir}/mmcrfsc | 
|---|
| 327 | mmdf=${mmcmdDir}/mmdf | 
|---|
| 328 | mmdsh=${mmcmdDir}/mmdsh | 
|---|
| 329 | mmdspmsg=${mmcmdDir}/mmdspmsg | 
|---|
| 330 | mmdynamicmap=${mmcmdDir}/mmdynamicmap | 
|---|
| 331 | mmexectsmcmd=${mmcmdDir}/mmexectsmcmd | 
|---|
| 332 | mmexportfs=${mmcmdDir}/mmexportfs | 
|---|
| 333 | mmfixcfg=${mmcmdDir}/mmfixcfg | 
|---|
| 334 | mmfsadm=${mmcmdDir}/mmfsadm | 
|---|
| 335 | mmfsenv=${mmcmdDir}/mmfsenv | 
|---|
| 336 | mmfskxgetwpid=${mmcmdDir}/mmfskxgetwpid | 
|---|
| 337 | mmfskxload=${mmcmdDir}/mmfskxload | 
|---|
| 338 | mmfskxunload=${mmcmdDir}/mmfskxunload | 
|---|
| 339 | mmfsmknod=${mmcmdDir}/mmfsmknod | 
|---|
| 340 | mmimportfs=${mmcmdDir}/mmimportfs | 
|---|
| 341 | mmkerninfo=${mmcmdDir}/mmkerninfo | 
|---|
| 342 | mmlsnsd=${mmcmdDir}/mmlsnsd | 
|---|
| 343 | mmmvfs=${mmcmdDir}/mmmvfs | 
|---|
| 344 | mmremote=${mmcmdDir}/mmremote | 
|---|
| 345 | mmsdrcli=${mmcmdDir}/mmsdrcli | 
|---|
| 346 | mmsdrserv=${mmcmdDir}/mmsdrserv | 
|---|
| 347 | mmsetrcmd=${mmcmdDir}/mmsetrcmd | 
|---|
| 348 | mmssaclearfence=${mmcmdDir}/mmssaclearfence | 
|---|
| 349 | mmstartup=${mmcmdDir}/mmstartup | 
|---|
| 350 | mmsync=${mmcmdDir}/mmsync | 
|---|
| 351 | mmtrace=${mmcmdDir}/mmtrace | 
|---|
| 352 | runmmfs=${mmcmdDir}/runmmfs | 
|---|
| 353 | tsadddisk=${tscmdDir}/tsadddisk | 
|---|
| 354 | tsauth=${tscmdDir}/tsauth | 
|---|
| 355 | tsaddrmap=${tscmdDir}/tsaddrmap | 
|---|
| 356 | tsbackup=${tscmdDir}/tsbackup | 
|---|
| 357 | tschfileset=${tscmdDir}/tschfileset | 
|---|
| 358 | tschfs=${tscmdDir}/tschfs | 
|---|
| 359 | tschmgr=${tscmdDir}/tschmgr | 
|---|
| 360 | tschpolicy=${tscmdDir}/tschpolicy | 
|---|
| 361 | tschpool=${tscmdDir}/tschpool | 
|---|
| 362 | tscrefresh=${tscmdDir}/tscrefresh | 
|---|
| 363 | tscrfileset=${tscmdDir}/tscrfileset | 
|---|
| 364 | tscrfs=${tscmdDir}/tscrfs | 
|---|
| 365 | tsctl=${tscmdDir}/tsctl | 
|---|
| 366 | tsctlfs=${tscmdDir}/tsctlfs | 
|---|
| 367 | tsdeldisk=${tscmdDir}/tsdeldisk | 
|---|
| 368 | tsdelfileset=${tscmdDir}/tsdelfileset | 
|---|
| 369 | tsdelfs=${tscmdDir}/tsdelfs | 
|---|
| 370 | tsdsh=${tscmdDir}/tsdsh | 
|---|
| 371 | tsfileid=${tscmdDir}/tsfileid | 
|---|
| 372 | tsfindinode=${tscmdDir}/tsfindinode | 
|---|
| 373 | tslinkfileset=${tscmdDir}/tslinkfileset | 
|---|
| 374 | tslsfs=${tscmdDir}/tslsfs | 
|---|
| 375 | tslsfileset=${tscmdDir}/tslsfileset | 
|---|
| 376 | tslspolicy=${tscmdDir}/tslspolicy | 
|---|
| 377 | tsmigrate=${tscmdDir}/tsmigrate | 
|---|
| 378 | tsnsdaccess=${tscmdDir}/tsnsdaccess | 
|---|
| 379 | tsremount=${tscmdDir}/tsremount | 
|---|
| 380 | tsrestripefs=${tscmdDir}/tsrestripefs | 
|---|
| 381 | tsstatus=${tscmdDir}/tsstatus | 
|---|
| 382 | tsprclear=${tscmdDir}/tsprclear | 
|---|
| 383 | tspreparedisk=${tscmdDir}/tspreparedisk | 
|---|
| 384 | tsunlinkfileset=${tscmdDir}/tsunlinkfileset | 
|---|
| 385 | nss_setmap=${tscmdDir}/nss_setmap | 
|---|
| 386 |  | 
|---|
| 387 |  | 
|---|
| 388 | #----------------------------------------------------------- | 
|---|
| 389 | # User exits | 
|---|
| 390 | #----------------------------------------------------------- | 
|---|
| 391 | mmsdrbackup=${mmfscfgDir}mmsdrbackup | 
|---|
| 392 | nsddevices=${mmfscfgDir}nsddevices | 
|---|
| 393 | remoteclusternodes=${mmfscfgDir}remoteclusternodes | 
|---|
| 394 | sslrandfile=${mmfscfgDir}sslrandfile | 
|---|
| 395 | syncfsconfig=${mmfscfgDir}syncfsconfig | 
|---|
| 396 |  | 
|---|
| 397 |  | 
|---|
| 398 | #----------------------------------------------------------- | 
|---|
| 399 | # RSCT peer domain commands | 
|---|
| 400 | #----------------------------------------------------------- | 
|---|
| 401 | export CT_MANAGEMENT_SCOPE=2 | 
|---|
| 402 | lsclcfg=/usr/bin/lsclcfg | 
|---|
| 403 | lsnodeid=/usr/sbin/rsct/bin/lsnodeid | 
|---|
| 404 | lsrsrcapi=/usr/bin/lsrsrc-api | 
|---|
| 405 |  | 
|---|
| 406 |  | 
|---|
| 407 | #----------------------------------------------------------- | 
|---|
| 408 | # Full path names for the GPFS daemon and kernel extension. | 
|---|
| 409 | # The mmcmdSubdir and mmcmdSuffix components, if they are to | 
|---|
| 410 | # have non-null values, must be set by the invoking module. | 
|---|
| 411 | #----------------------------------------------------------- | 
|---|
| 412 | mmfs=${mmcmdDir}/${mmcmdSubdir}/mmfs${mmcmdSuffix} | 
|---|
| 413 | mmfsd=${mmcmdDir}/${mmcmdSubdir}/mmfsd${mmcmdSuffix} | 
|---|
| 414 |  | 
|---|
| 415 |  | 
|---|
| 416 | #----------------------------------------------------------- | 
|---|
| 417 | # Global declarations for parsing the mmsdrfs file | 
|---|
| 418 | #----------------------------------------------------------- | 
|---|
| 419 | # Line type identifiers and other constants. | 
|---|
| 420 | VERSION_LINE='00_VERSION_LINE' | 
|---|
| 421 | COMMENT_LINE='03_COMMENT' | 
|---|
| 422 | NODESET_HDR='10_NODESET_HDR' | 
|---|
| 423 | MEMBER_NODE='20_MEMBER_NODE' | 
|---|
| 424 | SG_HEADR='30_SG_HEADR' | 
|---|
| 425 | SG_ETCFS='40_SG_ETCFS' | 
|---|
| 426 | SG_MOUNT='50_SG_MOUNT' | 
|---|
| 427 | SG_DISKS='60_SG_DISKS' | 
|---|
| 428 | MMFSCFG='70_MMFSCFG' | 
|---|
| 429 | REM_CLUSTER='80_REM_CLUSTER' | 
|---|
| 430 | REM_CLUSTER_KEY='82_REM_CLUSTER_KEY' | 
|---|
| 431 | AUTHORIZED_CLUSTER='90_AUTHORIZED_CLUSTER' | 
|---|
| 432 | AUTHORIZED_KEY='92_AUTHORIZED_KEY' | 
|---|
| 433 | AUTHORIZED_FS='94_AUTHORIZED_FS' | 
|---|
| 434 | HSMDATA='910_HSMDATA' | 
|---|
| 435 | HSMVERSION='920_HSMVERSION' | 
|---|
| 436 |  | 
|---|
| 437 | CURRENT_SDRFS_FORMAT=1 | 
|---|
| 438 | CURRENT_SDRFS_VERSION=3 | 
|---|
| 439 | CURRENT_KEYFILE_FORMAT=2 | 
|---|
| 440 | COMPATIBLE_KEYFILE_FORMAT=2 | 
|---|
| 441 | GLOBAL_ID='%%9999%%' | 
|---|
| 442 | FREE_DISK='~%BBBB%%' | 
|---|
| 443 | DSM_DATA='~%DSM%%' | 
|---|
| 444 | NO_DEVICE='~/~' | 
|---|
| 445 | CHANGE_NSD='~/changeNsd/~' | 
|---|
| 446 | HOME_CLUSTER="%%home%%" | 
|---|
| 447 | availableField="" | 
|---|
| 448 | obsoleteField="" | 
|---|
| 449 | FREE_NODE='~%AAAA%%'            # obsolete | 
|---|
| 450 | HA_SERVICES='~%HAS%%'           # obsolete | 
|---|
| 451 | HA_CLUSTER_NAME='gpfs'          # obsolete | 
|---|
| 452 | PRIMARY_NETWORK='gpfs'          # obsolete | 
|---|
| 453 | SECONDARY_NETWORK='gpfs2'       # obsolete | 
|---|
| 454 |  | 
|---|
| 455 | # Global field definitions. | 
|---|
| 456 | NODESETID_Field=1 | 
|---|
| 457 | LINE_TYPE_Field=2 | 
|---|
| 458 | DEV_NAME_Field=3 | 
|---|
| 459 | LINE_NUMBER_Field=4 | 
|---|
| 460 |  | 
|---|
| 461 | # Definitions for the VERSION_LINE. | 
|---|
| 462 | SDRFS_FORMAT_Field=4 | 
|---|
| 463 | SDRFS_VERSION_Field=5 | 
|---|
| 464 | SDRFS_GENNUM_Field=6 | 
|---|
| 465 | RUNNING_CMD_Field=7 | 
|---|
| 466 | CLUSTER_TYPE_Field=8 | 
|---|
| 467 | PRIMARY_SERVER_Field=9 | 
|---|
| 468 | BACKUP_SERVER_Field=10 | 
|---|
| 469 | HIGHEST_GPFS_DISK_NBR_Field=11 | 
|---|
| 470 | RSH_PATH_Field=12 | 
|---|
| 471 | RCP_PATH_Field=13 | 
|---|
| 472 | CLUSTERID_Field=14 | 
|---|
| 473 | CLUSTER_SUBTYPE_Field=15 | 
|---|
| 474 | GENNUM_TSTAMP_Field=16 | 
|---|
| 475 | GETOBJECT_PORT_Field=17         # obsolete | 
|---|
| 476 | CLUSTER_NAME_Field=18 | 
|---|
| 477 | NEW_KEY_Field=19 | 
|---|
| 478 | SECLEVEL_Field=20 | 
|---|
| 479 | COMMITTED_KEY_Field=21 | 
|---|
| 480 | KEYFILE_FORMAT_Field=22 | 
|---|
| 481 | initialDiskNumber=1000 | 
|---|
| 482 |  | 
|---|
| 483 | # Definitions for COMMENT lines. | 
|---|
| 484 | COMMENT_TEXT_Field=5 | 
|---|
| 485 | warningText="   This is a machine generated file.  Do not edit!        " | 
|---|
| 486 |  | 
|---|
| 487 | # Definitions for NODESET_HDR lines. | 
|---|
| 488 | NODE_COUNT_Field=5 | 
|---|
| 489 | COMM_PROTOCOL_Field=6 | 
|---|
| 490 | CIPHER_LIST_Field=7 | 
|---|
| 491 | TCP_PORT_Field=8 | 
|---|
| 492 | # obsolete_Field=9           # old CONVERSION_STATE_Field | 
|---|
| 493 | # obsolete_Field=10          # old EVENTS_PORT_Field | 
|---|
| 494 | # available_Field=11 | 
|---|
| 495 | MIN_DAEMON_VERSION_Field=12  # same as the maxFeatureLevel | 
|---|
| 496 | MAX_DAEMON_VERSION_Field=13 | 
|---|
| 497 | OS_ENVIRONMENT_Field=14 | 
|---|
| 498 | # available_Field=15 | 
|---|
| 499 | EVENTS_PORT_Field=16 | 
|---|
| 500 | GETOBJECT_PORT_Field=17 | 
|---|
| 501 | defaultTcpPort=1191 | 
|---|
| 502 |  | 
|---|
| 503 | # Definitions for MEMBER_NODE lines. | 
|---|
| 504 | NODE_NUMBER_Field=5 | 
|---|
| 505 | NODE_NAME_Field=6 | 
|---|
| 506 | IPA_Field=7 | 
|---|
| 507 | REL_HOSTNAME_Field=8 | 
|---|
| 508 | DESIGNATION_Field=9 | 
|---|
| 509 | LAPI_ADAPTER_Field=10        # obsolete | 
|---|
| 510 | LAPI_WINDOW_Field=11         # obsolete | 
|---|
| 511 | SWITCH_NODE_NUMBER_Field=12  # obsolete | 
|---|
| 512 | ADDNODE_STATE_Field=13 | 
|---|
| 513 | ADAPTER_TYPE_Field=14 | 
|---|
| 514 | DAEMON_NODENAME_Field=15 | 
|---|
| 515 | ADMIN_SHORTNAME_Field=16 | 
|---|
| 516 | DAEMON_VERSION_Field=17 | 
|---|
| 517 | PRODUCT_VERSION_Field=18 | 
|---|
| 518 | OS_NAME_Field=19 | 
|---|
| 519 | CORE_QUORUM_Field=20 | 
|---|
| 520 | GS_NODE_NUMBER_Field=21      # obsolete | 
|---|
| 521 | noWindow="-1" | 
|---|
| 522 | noSwitch="-1" | 
|---|
| 523 | noNumber=0 | 
|---|
| 524 | DELETED_NODE="deleted"       # obsolete | 
|---|
| 525 | QUORUM="quorum" | 
|---|
| 526 | NONQUORUM="nonquorum" | 
|---|
| 527 | MANAGER="manager" | 
|---|
| 528 | CLIENT="client" | 
|---|
| 529 | NEW_NODE="new" | 
|---|
| 530 | OLD_NODE="" | 
|---|
| 531 | quorumNode="Q" | 
|---|
| 532 | nonQuorumNode="N" | 
|---|
| 533 | maxQuorumNodes=128 | 
|---|
| 534 | maxRecQuorumNodes=7 | 
|---|
| 535 |  | 
|---|
| 536 | # Definitions for SG_HEADR lines. | 
|---|
| 537 | DEV_MINOR_Field=5 | 
|---|
| 538 | ODD_STATE_Field=6 | 
|---|
| 539 | FS_TYPE_Field=7 | 
|---|
| 540 | REMOTE_DEV_NAME_Field=8 | 
|---|
| 541 | remotefs="R" | 
|---|
| 542 | localfs="" | 
|---|
| 543 |  | 
|---|
| 544 | # Definitions for SG_ETCFS lines. | 
|---|
| 545 | ETCFS_TEXT_Field=5 | 
|---|
| 546 | MOUNT_POINT_Line=1 | 
|---|
| 547 | DEV_Line=2 | 
|---|
| 548 | VFS_Line=3 | 
|---|
| 549 | NODENAME_Line=4 | 
|---|
| 550 | MOUNT_Line=5 | 
|---|
| 551 | TYPE_Line=6 | 
|---|
| 552 | ACCOUNT_Line=7 | 
|---|
| 553 | OPTIONS_Line=8 | 
|---|
| 554 | DEV_Line_Prefix=" dev   = " | 
|---|
| 555 | VFS_Line_Prefix=" vfs   = " | 
|---|
| 556 | NODENAME_Line_Prefix="  nodename  = " | 
|---|
| 557 | MOUNT_Line_Prefix=" mount   = " | 
|---|
| 558 | TYPE_Line_Prefix="  type    = " | 
|---|
| 559 | ACCOUNT_Line_Prefix=" account   = " | 
|---|
| 560 | OPTIONS_Line_Prefix=" options   = " | 
|---|
| 561 |  | 
|---|
| 562 | # Definitions for SG_MOUNT lines. | 
|---|
| 563 | RW_OPT_Field=5 | 
|---|
| 564 | MTIME_OPT_Field=6 | 
|---|
| 565 | ATIME_OPT_Field=7 | 
|---|
| 566 | QUOTA_OPT_Field=8 | 
|---|
| 567 | OTHER_OPT_Field=9 | 
|---|
| 568 | QUOTA_ACTIVATED="userquota;groupquota;filesetquota" | 
|---|
| 569 | QUOTA_DISACTIVATED="" | 
|---|
| 570 |  | 
|---|
| 571 | # Definitions for SG_DISKS lines. | 
|---|
| 572 | DISK_NAME_Field=5 | 
|---|
| 573 | DISK_SIZE_Field=6 | 
|---|
| 574 | FAILURE_GROUP_Field=7 | 
|---|
| 575 | DISK_USAGE_Field=8 | 
|---|
| 576 | PVID_Field=9 | 
|---|
| 577 | DISK_TYPE_Field=10         # disk type of the disk (e.g., vsd, lv, nsd-direct) | 
|---|
| 578 | NSD_PRIMARY_NODE_Field=11 | 
|---|
| 579 | NSD_BACKUP_NODE_Field=12 | 
|---|
| 580 | DISK_SUBTYPE_Field=13      # ssa, pr, other; used for fencing | 
|---|
| 581 | VPATH_FLAG_Field=14        # vpath or notvpath; used when deleting or importing | 
|---|
| 582 | #   disks; SDD utilities may or may not be needed | 
|---|
| 583 | NSD_SUBTYPE_Field=15       # disk type of the disk underlying the nsd | 
|---|
| 584 | #   (e.g., vsd, lv, hdisk, vpath, generic) | 
|---|
| 585 | NAME_SOURCE_Field=16       # disk name source (user-specified or cmd-generated) | 
|---|
| 586 | NSD_SUBTYPE_DISKNAME_Field=17  #  disk name of the disk underlying the nsd | 
|---|
| 587 | EXCLUDE_Field=18 | 
|---|
| 588 | PAXOS_Field=19 | 
|---|
| 589 | DISK_STATUS_Field=20 | 
|---|
| 590 | AIX_PVID_Field=21          # PVID of the underlying AIX disk (if applicable). | 
|---|
| 591 | STORAGE_POOL_Field=22 | 
|---|
| 592 | DAEMON_NSD_PRIMARY_Field=23 | 
|---|
| 593 | DAEMON_NSD_BACKUP_Field=24 | 
|---|
| 594 | userSpecified="user" | 
|---|
| 595 | cmdGenerated="cmd" | 
|---|
| 596 | excludedDisk="excl" | 
|---|
| 597 | includedDisk="" | 
|---|
| 598 | PaxosDisk="quorumDisk" | 
|---|
| 599 |  | 
|---|
| 600 | # Definitions for MMFSCFG lines. | 
|---|
| 601 | # | 
|---|
| 602 | # Since mmfs.cfg values can contain the ':' character, | 
|---|
| 603 | # everything past the first four fields, except trailing | 
|---|
| 604 | # null fields, is considered to be mmfs.cfg text. | 
|---|
| 605 |  | 
|---|
| 606 | # Definitions for REM_CLUSTER lines. | 
|---|
| 607 | CONTACT_NODES_Field=5 | 
|---|
| 608 |  | 
|---|
| 609 | # Definitions for REM_CLUSTER_KEY lines. | 
|---|
| 610 | # Definitions for AUTHORIZED_KEY lines. | 
|---|
| 611 | KEY_Field=5 | 
|---|
| 612 |  | 
|---|
| 613 | # Definitions for AUTHORIZED_CLUSTER lines. | 
|---|
| 614 | GRANT_Field=5 | 
|---|
| 615 | # available_Field=6 | 
|---|
| 616 | CIPHER_LIST_Field=7 | 
|---|
| 617 | accessGranted="all" | 
|---|
| 618 | accessDenied="" | 
|---|
| 619 |  | 
|---|
| 620 | # Definitions for AUTHORIZED_FS lines. | 
|---|
| 621 | ACCESS_TYPE_Field=5 | 
|---|
| 622 | ROOTSQUASH_UID_Field=6 | 
|---|
| 623 | ROOTSQUASH_GID_Field=7 | 
|---|
| 624 |  | 
|---|
| 625 | # Definitions for HSMDATA and HSMVERSION lines. | 
|---|
| 626 | HSM_NODESET_Field=3 | 
|---|
| 627 | # Since these lines can contain the ':' character, | 
|---|
| 628 | # everything past the first four fields, except trailing | 
|---|
| 629 | # null fields, is considered to be free format text. | 
|---|
| 630 |  | 
|---|
| 631 |  | 
|---|
| 632 | #----------------------------------------------------------------------- | 
|---|
| 633 | # | 
|---|
| 634 | # Set up the internal mm trace facility. | 
|---|
| 635 | # | 
|---|
| 636 | # Tracing is controlled through the mmScriptTrace environment variable. | 
|---|
| 637 | # | 
|---|
| 638 | # - If the variable is not set, tracing is disabled. | 
|---|
| 639 | # | 
|---|
| 640 | # - If the variable is set, and its value starts with a slash, | 
|---|
| 641 | #   it is assumed to be the full path name for the file which | 
|---|
| 642 | #   is to contain the trace results.  Otherwise, the trace results | 
|---|
| 643 | #   are send to file /tmp/mmfs/mmScriptTrace. | 
|---|
| 644 | # | 
|---|
| 645 | # Examples: | 
|---|
| 646 | # | 
|---|
| 647 | #   $mmTRACE_ENTER "$*" | 
|---|
| 648 | # | 
|---|
| 649 | #   $mmTRACE "lock held by $lockHolderHostname $lockHolderPid" | 
|---|
| 650 | # | 
|---|
| 651 | #   $mmTRACE_EXIT "rc=$rc" | 
|---|
| 652 | # | 
|---|
| 653 | #----------------------------------------------------------------------- | 
|---|
| 654 | if [[ -z $mmScriptTrace || $mmScriptTrace = "/dev/null" ]] | 
|---|
| 655 | then | 
|---|
| 656 | mmTRACE_ENTER=_mmTRACE_ENTER_disabled | 
|---|
| 657 | mmTRACE_EXIT=_mmTRACE_EXIT_disabled | 
|---|
| 658 | mmTRACE=_mmTRACE_disabled | 
|---|
| 659 | mmScriptTrace="/dev/null" | 
|---|
| 660 | else | 
|---|
| 661 | mmTRACE_ENTER=_mmTRACE_ENTER_enabled | 
|---|
| 662 | mmTRACE_EXIT=_mmTRACE_EXIT_enabled | 
|---|
| 663 | mmTRACE=_mmTRACE_enabled | 
|---|
| 664 | [[ $mmScriptTrace != /* ]] && \ | 
|---|
| 665 | mmScriptTrace=/tmp/mmfs/mmScriptTrace | 
|---|
| 666 | fi | 
|---|
| 667 |  | 
|---|
| 668 |  | 
|---|
| 669 | #----------------------------------------------------------- | 
|---|
| 670 | # Set release information. | 
|---|
| 671 | #----------------------------------------------------------- | 
|---|
| 672 | . /usr/lpp/mmfs/bin/mmprodname | 
|---|
| 673 | sourceFile="mmglobfuncs.sh" | 
|---|
| 674 |  | 
|---|
| 675 |  | 
|---|
| 676 | #------------------------------------------------------------------ | 
|---|
| 677 | #  Pull in operating system dependent declarations and functions. | 
|---|
| 678 | #------------------------------------------------------------------ | 
|---|
| 679 | [[ -e ${mmcmdDir}/mmglobfuncs.$osName ]] && \ | 
|---|
| 680 | . ${mmcmdDir}/mmglobfuncs.$osName | 
|---|
| 681 | sourceFile="mmglobfuncs.sh" | 
|---|
| 682 |  | 
|---|
| 683 |  | 
|---|
| 684 | #------------------------------------------------------------------ | 
|---|
| 685 | # Check whether site changed the mmfs.log location. | 
|---|
| 686 | #------------------------------------------------------------------ | 
|---|
| 687 | if [[ -f $mmfscfg ]] | 
|---|
| 688 | then | 
|---|
| 689 | logDir=$($awk '$1 == "logDir" {value = $2} END {print value}' $mmfscfg) | 
|---|
| 690 | [[ -n $logDir ]] && rasDir="${logDir}/" | 
|---|
| 691 | fi | 
|---|
| 692 |  | 
|---|
| 693 |  | 
|---|
| 694 | #------------------------------------------------------------------ | 
|---|
| 695 | # Make sure required directories exist. | 
|---|
| 696 | #------------------------------------------------------------------ | 
|---|
| 697 | if [[ $ourUid -eq 0 ]] | 
|---|
| 698 | then | 
|---|
| 699 | $mkdir -p $mmsdrfsDir $mmfscfgDir $tmpDir $rasDir $mmbackupDir | 
|---|
| 700 | $mkdir -m 0700 -p $sslDir $sslStageDir $mmpmonDir | 
|---|
| 701 | fi | 
|---|
| 702 |  | 
|---|
| 703 |  | 
|---|
| 704 | #----------------------------------------------------------- | 
|---|
| 705 | # Frequently-used functions | 
|---|
| 706 | #----------------------------------------------------------- | 
|---|
| 707 |  | 
|---|
| 708 |  | 
|---|
| 709 | ####################################################################### | 
|---|
| 710 | # | 
|---|
| 711 | # Internal tracing functions.  All of the functions interpret the | 
|---|
| 712 | # argument list with which they are invoked as being the trace record. | 
|---|
| 713 | # | 
|---|
| 714 | ####################################################################### | 
|---|
| 715 |  | 
|---|
| 716 | _mmTRACE_ENTER_enabled() | 
|---|
| 717 | { | 
|---|
| 718 | typeset timestamp=$($perl -e 'print time') | 
|---|
| 719 | printf  "%7s  %7s  %16s  %-14s  %-6s  %s\n" \ | 
|---|
| 720 | $$ $PPID $timestamp $mmcmd  "enter" "${0##*/}: $*" >> $mmScriptTrace | 
|---|
| 721 | } | 
|---|
| 722 |  | 
|---|
| 723 | _mmTRACE_EXIT_enabled() | 
|---|
| 724 | { | 
|---|
| 725 | typeset timestamp=$($perl -e 'print time') | 
|---|
| 726 | printf  "%7s  %7s  %16s  %-14s  %-6s  %s\n" \ | 
|---|
| 727 | $$ $PPID $timestamp $mmcmd  "EXIT " "${0##*/}: $*" >> $mmScriptTrace | 
|---|
| 728 | } | 
|---|
| 729 |  | 
|---|
| 730 | _mmTRACE_enabled() | 
|---|
| 731 | { | 
|---|
| 732 | typeset timestamp=$($perl -e 'print time') | 
|---|
| 733 | printf  "%7s  %7s  %16s  %-14s  %-6s  %s\n" \ | 
|---|
| 734 | $$ $PPID $timestamp $mmcmd  " " "${0##*/}: $*" >> $mmScriptTrace | 
|---|
| 735 | } | 
|---|
| 736 |  | 
|---|
| 737 | _mmTRACE_ENTER_disabled() | 
|---|
| 738 | { | 
|---|
| 739 | return 0 | 
|---|
| 740 | } | 
|---|
| 741 |  | 
|---|
| 742 | _mmTRACE_EXIT_disabled() | 
|---|
| 743 | { | 
|---|
| 744 | return 0 | 
|---|
| 745 | } | 
|---|
| 746 |  | 
|---|
| 747 | _mmTRACE_disabled() | 
|---|
| 748 | { | 
|---|
| 749 | return 0 | 
|---|
| 750 | } | 
|---|
| 751 |  | 
|---|
| 752 |  | 
|---|
| 753 | #################################################################### | 
|---|
| 754 | # | 
|---|
| 755 | # Function:  Prints the specified message to stdout | 
|---|
| 756 | # | 
|---|
| 757 | # Input:     $1 - number of the message to print | 
|---|
| 758 | #            $2, $3, ... - arguments to pass to dspmsg | 
|---|
| 759 | # | 
|---|
| 760 | #################################################################### | 
|---|
| 761 | function printInfoMsg  # <msgNo> [ <arg> ... ] | 
|---|
| 762 | { | 
|---|
| 763 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 764 | [[ -n $DEBUG || -n $DEBUGprintInfoMsg ]] && set -x | 
|---|
| 765 | msgNo=$1 | 
|---|
| 766 | typeset msgSet | 
|---|
| 767 | typeset printTimeStamp=no | 
|---|
| 768 |  | 
|---|
| 769 | # Based on the message number, find the message text. | 
|---|
| 770 | case $msgNo in | 
|---|
| 771 |  | 
|---|
| 772 | 12  ) msgTxt=\ | 
|---|
| 773 | "%s: %s nodes added to the cluster out of %s nodes specified." | 
|---|
| 774 | ;; | 
|---|
| 775 |  | 
|---|
| 776 | 94  ) msgTxt=\ | 
|---|
| 777 | "Deleting disks ..." | 
|---|
| 778 | ;; | 
|---|
| 779 |  | 
|---|
| 780 | 95  ) msgTxt=\ | 
|---|
| 781 | "Restriping %s ..." | 
|---|
| 782 | ;; | 
|---|
| 783 |  | 
|---|
| 784 | 96  ) msgTxt=\ | 
|---|
| 785 | "Replacing %s ..." | 
|---|
| 786 | ;; | 
|---|
| 787 |  | 
|---|
| 788 | 98  ) msgTxt=\ | 
|---|
| 789 | "%s: Processing disks that do not belong to any file system ..." | 
|---|
| 790 | ;; | 
|---|
| 791 |  | 
|---|
| 792 | 99  ) msgTxt=\ | 
|---|
| 793 | "Done" | 
|---|
| 794 | ;; | 
|---|
| 795 |  | 
|---|
| 796 | 143 ) msgTxt=\ | 
|---|
| 797 | "%s: %s: Processing user configuration file %s" | 
|---|
| 798 | ;; | 
|---|
| 799 |  | 
|---|
| 800 | 179 ) msgTxt=\ | 
|---|
| 801 | "flag value          description\n"\ | 
|---|
| 802 | "---- -------------- -----------------------------------------------------" | 
|---|
| 803 | ;; | 
|---|
| 804 |  | 
|---|
| 805 | 180 ) msgTxt=\ | 
|---|
| 806 | "root allowed" | 
|---|
| 807 | ;; | 
|---|
| 808 |  | 
|---|
| 809 | 181 ) msgTxt=\ | 
|---|
| 810 | "root remapped to" | 
|---|
| 811 | ;; | 
|---|
| 812 |  | 
|---|
| 813 | 182 ) msgTxt=\ | 
|---|
| 814 | "%s: Granting cluster %s access to file system %s:\n"\ | 
|---|
| 815 | "        access type %s; root credentials will not be remapped." | 
|---|
| 816 | ;; | 
|---|
| 817 |  | 
|---|
| 818 | 183 ) msgTxt=\ | 
|---|
| 819 | "%s: Granting cluster %s access to file system %s:\n"\ | 
|---|
| 820 | "        access type %s; root credentials will be remapped to %s:%s." | 
|---|
| 821 | ;; | 
|---|
| 822 |  | 
|---|
| 823 | 231 ) msgTxt=\ | 
|---|
| 824 | "%s: %s already belongs to volume group %s.\n" | 
|---|
| 825 | ;; | 
|---|
| 826 |  | 
|---|
| 827 | 241 ) msgTxt=\ | 
|---|
| 828 | "%s: %s: Starting force unmount of GPFS file systems" | 
|---|
| 829 | ;; | 
|---|
| 830 |  | 
|---|
| 831 | 242 ) msgTxt=\ | 
|---|
| 832 | "%s: %s: Unmount not finished after %s seconds.  Waiting %s more seconds" | 
|---|
| 833 | ;; | 
|---|
| 834 |  | 
|---|
| 835 | 243 ) msgTxt=\ | 
|---|
| 836 | "%s: %s: Unmount not finished after %s seconds" | 
|---|
| 837 | ;; | 
|---|
| 838 |  | 
|---|
| 839 | 244 ) msgTxt=\ | 
|---|
| 840 | "%s: %s: Shutting down GPFS daemons" | 
|---|
| 841 | ;; | 
|---|
| 842 |  | 
|---|
| 843 | 245 ) msgTxt=\ | 
|---|
| 844 | "%s: %s: Finished" | 
|---|
| 845 | ;; | 
|---|
| 846 |  | 
|---|
| 847 | 250 ) msgTxt=\ | 
|---|
| 848 | "%s: Processing file system %s ..." | 
|---|
| 849 | ;; | 
|---|
| 850 |  | 
|---|
| 851 | 251 ) msgTxt=\ | 
|---|
| 852 | "%s: Processing disk %s" | 
|---|
| 853 | ;; | 
|---|
| 854 |  | 
|---|
| 855 | 272 ) msgTxt=\ | 
|---|
| 856 | "%s: Command successfully completed" | 
|---|
| 857 | ;; | 
|---|
| 858 |  | 
|---|
| 859 | 331 ) msgTxt=\ | 
|---|
| 860 | "Automatic mount option" | 
|---|
| 861 | ;; | 
|---|
| 862 |  | 
|---|
| 863 | 332 ) msgTxt=\ | 
|---|
| 864 | "Exact mtime default mount option" | 
|---|
| 865 | ;; | 
|---|
| 866 |  | 
|---|
| 867 | 333 ) msgTxt=\ | 
|---|
| 868 | "Suppress atime default mount option" | 
|---|
| 869 | ;; | 
|---|
| 870 |  | 
|---|
| 871 | 339 ) msgTxt=\ | 
|---|
| 872 | "Verifying GPFS is stopped on all nodes ..." | 
|---|
| 873 | ;; | 
|---|
| 874 |  | 
|---|
| 875 | 373 ) msgTxt=\ | 
|---|
| 876 | "%s: %s: Mounting file systems ..." | 
|---|
| 877 | ;; | 
|---|
| 878 |  | 
|---|
| 879 | 392 ) msgTxt=\ | 
|---|
| 880 | "%s: %s: Starting GPFS ..." | 
|---|
| 881 | ;; | 
|---|
| 882 |  | 
|---|
| 883 | 400 ) msgTxt=\ | 
|---|
| 884 | "GPFS cluster information" | 
|---|
| 885 | ;; | 
|---|
| 886 |  | 
|---|
| 887 | 401 ) msgTxt=\ | 
|---|
| 888 | "GPFS cluster configuration servers:" | 
|---|
| 889 | ;; | 
|---|
| 890 |  | 
|---|
| 891 | 402 ) msgTxt=\ | 
|---|
| 892 | "  Primary server:    %s" | 
|---|
| 893 | ;; | 
|---|
| 894 |  | 
|---|
| 895 | 403 ) msgTxt=\ | 
|---|
| 896 | "  Secondary server:  %s" | 
|---|
| 897 | ;; | 
|---|
| 898 |  | 
|---|
| 899 | 404 ) msgTxt=\ | 
|---|
| 900 | " Node  Daemon node name            IP address       Admin node name             Designation    " | 
|---|
| 901 | ;; | 
|---|
| 902 |  | 
|---|
| 903 | 405 ) msgTxt=\ | 
|---|
| 904 | " Summary information " | 
|---|
| 905 | ;; | 
|---|
| 906 |  | 
|---|
| 907 | 406 ) msgTxt=\ | 
|---|
| 908 | "File system attributes for %s:" | 
|---|
| 909 | ;; | 
|---|
| 910 |  | 
|---|
| 911 | 407 ) msgTxt=\ | 
|---|
| 912 | "Configuration data for cluster %s:" | 
|---|
| 913 | ;; | 
|---|
| 914 |  | 
|---|
| 915 | 408 ) msgTxt=\ | 
|---|
| 916 | "File systems in cluster %s:" | 
|---|
| 917 | ;; | 
|---|
| 918 |  | 
|---|
| 919 | 409 ) msgTxt=\ | 
|---|
| 920 | "(none)" | 
|---|
| 921 | ;; | 
|---|
| 922 |  | 
|---|
| 923 | 414 ) msgTxt=\ | 
|---|
| 924 | "quorum-manager" | 
|---|
| 925 | ;; | 
|---|
| 926 |  | 
|---|
| 927 | 416 ) msgTxt=\ | 
|---|
| 928 | "%s: %s: Processing node %s" | 
|---|
| 929 | ;; | 
|---|
| 930 |  | 
|---|
| 931 | 426 ) msgTxt=\ | 
|---|
| 932 | "%s: %s: Unmounting file systems ..." | 
|---|
| 933 | ;; | 
|---|
| 934 |  | 
|---|
| 935 | 427 ) msgTxt=\ | 
|---|
| 936 | "SHA digest (new):" | 
|---|
| 937 | ;; | 
|---|
| 938 |  | 
|---|
| 939 | 430 ) msgTxt=\ | 
|---|
| 940 | "  GPFS cluster name:         %s" | 
|---|
| 941 | ;; | 
|---|
| 942 |  | 
|---|
| 943 | 431 ) msgTxt=\ | 
|---|
| 944 | "quorum node" | 
|---|
| 945 | ;; | 
|---|
| 946 |  | 
|---|
| 947 | 434 ) msgTxt=\ | 
|---|
| 948 | "  GPFS cluster id:           %s" | 
|---|
| 949 | ;; | 
|---|
| 950 |  | 
|---|
| 951 | 435 ) msgTxt=\ | 
|---|
| 952 | "  Remote shell command:      %s" | 
|---|
| 953 | ;; | 
|---|
| 954 |  | 
|---|
| 955 | 436 ) msgTxt=\ | 
|---|
| 956 | "  Remote file copy command:  %s" | 
|---|
| 957 | ;; | 
|---|
| 958 |  | 
|---|
| 959 | 442 ) msgTxt=\ | 
|---|
| 960 | "Cluster name:" | 
|---|
| 961 | ;; | 
|---|
| 962 |  | 
|---|
| 963 | 443 ) msgTxt=\ | 
|---|
| 964 | "Cipher list:" | 
|---|
| 965 | ;; | 
|---|
| 966 |  | 
|---|
| 967 | 444 ) msgTxt=\ | 
|---|
| 968 | "SHA digest:" | 
|---|
| 969 | ;; | 
|---|
| 970 |  | 
|---|
| 971 | 445 ) msgTxt=\ | 
|---|
| 972 | "File system access:" | 
|---|
| 973 | ;; | 
|---|
| 974 |  | 
|---|
| 975 | 446 ) msgTxt=\ | 
|---|
| 976 | "Contact nodes:" | 
|---|
| 977 | ;; | 
|---|
| 978 |  | 
|---|
| 979 | 447 ) msgTxt=\ | 
|---|
| 980 | "File systems:" | 
|---|
| 981 | ;; | 
|---|
| 982 |  | 
|---|
| 983 | 451 ) msgTxt=\ | 
|---|
| 984 | "  GPFS UID domain:           %s" | 
|---|
| 985 | ;; | 
|---|
| 986 |  | 
|---|
| 987 | 453 ) msgTxt=\ | 
|---|
| 988 | "Verifying GPFS is stopped on all affected nodes ..." | 
|---|
| 989 | ;; | 
|---|
| 990 |  | 
|---|
| 991 | 473 ) msgTxt=\ | 
|---|
| 992 | "Verifying file system configuration information ..." | 
|---|
| 993 | ;; | 
|---|
| 994 |  | 
|---|
| 995 | 475 ) msgTxt=\ | 
|---|
| 996 | "quorum" | 
|---|
| 997 | ;; | 
|---|
| 998 |  | 
|---|
| 999 | 477 ) msgTxt=\ | 
|---|
| 1000 | "File system %s %s is mounted on %s nodes in cluster %s:" | 
|---|
| 1001 | ;; | 
|---|
| 1002 |  | 
|---|
| 1003 | 478 ) msgTxt=\ | 
|---|
| 1004 | "File system %s is mounted on %s nodes in cluster %s:" | 
|---|
| 1005 | ;; | 
|---|
| 1006 |  | 
|---|
| 1007 | 479 ) msgTxt=\ | 
|---|
| 1008 | "File system %s %s is mounted on %s nodes in cluster %s." | 
|---|
| 1009 | ;; | 
|---|
| 1010 |  | 
|---|
| 1011 | 480 ) msgTxt=\ | 
|---|
| 1012 | "File system %s is mounted on %s nodes in cluster %s." | 
|---|
| 1013 | ;; | 
|---|
| 1014 |  | 
|---|
| 1015 | 482 ) msgTxt=\ | 
|---|
| 1016 | "manager" | 
|---|
| 1017 | ;; | 
|---|
| 1018 |  | 
|---|
| 1019 | 490 ) msgTxt=\ | 
|---|
| 1020 | "Local Name  Remote Name  Cluster name           Mount Point          Mount Options    Automount" | 
|---|
| 1021 | ;; | 
|---|
| 1022 |  | 
|---|
| 1023 | 496 ) msgTxt=\ | 
|---|
| 1024 | " Node number  Node name       Quorum  Nodes up  Total nodes  GPFS state  Remarks    " | 
|---|
| 1025 | ;; | 
|---|
| 1026 |  | 
|---|
| 1027 | 497 ) msgTxt=\ | 
|---|
| 1028 | " Node number  Node name        GPFS state " | 
|---|
| 1029 | ;; | 
|---|
| 1030 |  | 
|---|
| 1031 | 501 ) msgTxt=\ | 
|---|
| 1032 | " File system   Disk name    NSD volume ID      Primary node             Backup node          " | 
|---|
| 1033 | ;; | 
|---|
| 1034 |  | 
|---|
| 1035 | 502 ) msgTxt=\ | 
|---|
| 1036 | " Disk name    NSD volume ID      Device         Node name                Remarks       " | 
|---|
| 1037 | ;; | 
|---|
| 1038 |  | 
|---|
| 1039 | 503 ) msgTxt=\ | 
|---|
| 1040 | " File system   Disk name    Primary node             Backup node           " | 
|---|
| 1041 | ;; | 
|---|
| 1042 |  | 
|---|
| 1043 | 506 ) msgTxt=\ | 
|---|
| 1044 | "Disk name     IO performed on node     Device             Availability" | 
|---|
| 1045 | ;; | 
|---|
| 1046 |  | 
|---|
| 1047 | 512 ) msgTxt=\ | 
|---|
| 1048 | " Disk name    NSD volume ID      Device         Devtype  Node name                Remarks          " | 
|---|
| 1049 | ;; | 
|---|
| 1050 |  | 
|---|
| 1051 | 519 ) msgTxt=\ | 
|---|
| 1052 | "Additional mount options" | 
|---|
| 1053 | ;; | 
|---|
| 1054 |  | 
|---|
| 1055 | 521 ) msgTxt=\ | 
|---|
| 1056 | "File system %s %s is mounted on %s nodes:" | 
|---|
| 1057 | ;; | 
|---|
| 1058 |  | 
|---|
| 1059 | 522 ) msgTxt=\ | 
|---|
| 1060 | "File system %s is mounted on %s nodes:" | 
|---|
| 1061 | ;; | 
|---|
| 1062 |  | 
|---|
| 1063 | 527 ) msgTxt=\ | 
|---|
| 1064 | "%s still running . . .\n" | 
|---|
| 1065 | printTimeStamp=yes | 
|---|
| 1066 | ;; | 
|---|
| 1067 |  | 
|---|
| 1068 | 541 ) msgTxt=\ | 
|---|
| 1069 | "File system %s %s is not mounted." | 
|---|
| 1070 | ;; | 
|---|
| 1071 |  | 
|---|
| 1072 | 542 ) msgTxt=\ | 
|---|
| 1073 | "File system %s %s is not mounted on any remote cluster nodes." | 
|---|
| 1074 | ;; | 
|---|
| 1075 |  | 
|---|
| 1076 | 543 ) msgTxt=\ | 
|---|
| 1077 | "File system %s %s is not mounted on any node in cluster %s." | 
|---|
| 1078 | ;; | 
|---|
| 1079 |  | 
|---|
| 1080 | 544 ) msgTxt=\ | 
|---|
| 1081 | "File system %s is not mounted." | 
|---|
| 1082 | ;; | 
|---|
| 1083 |  | 
|---|
| 1084 | 545 ) msgTxt=\ | 
|---|
| 1085 | "File system %s is not mounted on any remote cluster nodes." | 
|---|
| 1086 | ;; | 
|---|
| 1087 |  | 
|---|
| 1088 | 546 ) msgTxt=\ | 
|---|
| 1089 | "File system %s is not mounted on any node in cluster %s." | 
|---|
| 1090 | ;; | 
|---|
| 1091 |  | 
|---|
| 1092 | 553 ) msgTxt=\ | 
|---|
| 1093 | "File system %s %s is mounted on %s nodes." | 
|---|
| 1094 | ;; | 
|---|
| 1095 |  | 
|---|
| 1096 | 554 ) msgTxt=\ | 
|---|
| 1097 | "File system %s is mounted on %s nodes." | 
|---|
| 1098 | ;; | 
|---|
| 1099 |  | 
|---|
| 1100 | 559 ) msgTxt=\ | 
|---|
| 1101 | "Default mount point" | 
|---|
| 1102 | ;; | 
|---|
| 1103 |  | 
|---|
| 1104 | 586 ) msgTxt=\ | 
|---|
| 1105 | "The %s subsystem is already active." | 
|---|
| 1106 | ;; | 
|---|
| 1107 |  | 
|---|
| 1108 | # Message numbers above 1000 are in message set 60 (ts/fencing/fencing.msg). | 
|---|
| 1109 |  | 
|---|
| 1110 | 1018 ) msgTxt=\ | 
|---|
| 1111 | "The disk specification must be in one of these formats:\n"\ | 
|---|
| 1112 | "   -l logicalVolumeName        (e.g., '-l lv00')\n"\ | 
|---|
| 1113 | "   -v volumeGroupName          (e.g., '-v vg00')\n"\ | 
|---|
| 1114 | "   -h physicalDiskName         (e.g., '-h hdisk0')\n"\ | 
|---|
| 1115 | "   -p physicalVolumeIdentifier (e.g., '-p 0003366423ba4d39')\n" | 
|---|
| 1116 | ;; | 
|---|
| 1117 |  | 
|---|
| 1118 | 1019 ) msgTxt=\ | 
|---|
| 1119 | "Usage:  %s <disk specification>\n" | 
|---|
| 1120 | ;; | 
|---|
| 1121 |  | 
|---|
| 1122 | 1020 ) msgTxt=\ | 
|---|
| 1123 | "Usage:  %s <disk specification> <node id list>" | 
|---|
| 1124 | ;; | 
|---|
| 1125 |  | 
|---|
| 1126 | 1021 ) msgTxt=\ | 
|---|
| 1127 | "Usage:  %s <disk specification> <node id>" | 
|---|
| 1128 | ;; | 
|---|
| 1129 |  | 
|---|
| 1130 | 1022 ) msgTxt=\ | 
|---|
| 1131 | "Usage:  %s <disk specification> <fence id>" | 
|---|
| 1132 | ;; | 
|---|
| 1133 |  | 
|---|
| 1134 | 1023 ) msgTxt=\ | 
|---|
| 1135 | "The node id list is a blank-separated list of one or more node ids." | 
|---|
| 1136 | ;; | 
|---|
| 1137 |  | 
|---|
| 1138 | *   )  # unknown message, ignore it. | 
|---|
| 1139 | return 0 | 
|---|
| 1140 | ;; | 
|---|
| 1141 |  | 
|---|
| 1142 | esac | 
|---|
| 1143 |  | 
|---|
| 1144 | # Message numbers below 1000 are in message set 32 (ts/admin/admin.msg). | 
|---|
| 1145 | # Message numbers above 1000 are in message set 60 (ts/fencing/fencing.msg). | 
|---|
| 1146 | if [[ $msgNo -lt 1000 ]] | 
|---|
| 1147 | then | 
|---|
| 1148 | msgSet=32 | 
|---|
| 1149 | else | 
|---|
| 1150 | msgSet=60 | 
|---|
| 1151 | fi | 
|---|
| 1152 |  | 
|---|
| 1153 | if [[ $osName = AIX ]] | 
|---|
| 1154 | then | 
|---|
| 1155 | # Print the message - extra arguments are ignored. | 
|---|
| 1156 | if [[ $printTimeStamp = yes ]] | 
|---|
| 1157 | then | 
|---|
| 1158 | print -- "$(date) $($dspmsg -s $msgSet mmfs.cat \ | 
|---|
| 1159 | $msgNo "$msgTxt" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9")" | 
|---|
| 1160 | else | 
|---|
| 1161 | print -- "$($dspmsg -s $msgSet mmfs.cat \ | 
|---|
| 1162 | $msgNo "$msgTxt" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9")" | 
|---|
| 1163 | fi | 
|---|
| 1164 |  | 
|---|
| 1165 | elif [[ $osName = Linux ]] | 
|---|
| 1166 | then | 
|---|
| 1167 | # Print the message - extra arguments are ignored. | 
|---|
| 1168 | if [[ $printTimeStamp = yes ]] | 
|---|
| 1169 | then | 
|---|
| 1170 | print -- "$(date) $($mmdspmsg -s $msgSet mmfs.cat \ | 
|---|
| 1171 | $msgNo "$msgTxt" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9")" | 
|---|
| 1172 | else | 
|---|
| 1173 | print -- "$($mmdspmsg -s $msgSet mmfs.cat \ | 
|---|
| 1174 | $msgNo "$msgTxt" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9")" | 
|---|
| 1175 | fi | 
|---|
| 1176 | else | 
|---|
| 1177 | checkForErrors "Unknown operating system $osName" 1 | 
|---|
| 1178 | fi | 
|---|
| 1179 |  | 
|---|
| 1180 | }  #----- end of function printInfoMsg --------------------------- | 
|---|
| 1181 |  | 
|---|
| 1182 |  | 
|---|
| 1183 | #################################################################### | 
|---|
| 1184 | # | 
|---|
| 1185 | # Function:  Prints the specified message to stderr | 
|---|
| 1186 | # | 
|---|
| 1187 | # Input:     $1 - number of the message to print | 
|---|
| 1188 | #            $2, $3, ... - arguments to pass to dspmsg | 
|---|
| 1189 | # | 
|---|
| 1190 | #################################################################### | 
|---|
| 1191 | function printErrorMsg  # <msgNo> [ <arg> ... ] | 
|---|
| 1192 | { | 
|---|
| 1193 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 1194 | [[ -n $DEBUG || -n $DEBUGprintErrorMsg ]] && set -x | 
|---|
| 1195 | msgNo=$1 | 
|---|
| 1196 | typeset msgSet | 
|---|
| 1197 | typeset printTimeStamp=no | 
|---|
| 1198 |  | 
|---|
| 1199 | # Based on the message number, find the message text | 
|---|
| 1200 | case $msgNo in | 
|---|
| 1201 |  | 
|---|
| 1202 | 13  ) msgTxt=\ | 
|---|
| 1203 | "%s: Incorrect option: %s" | 
|---|
| 1204 | ;; | 
|---|
| 1205 |  | 
|---|
| 1206 | 19  ) msgTxt=\ | 
|---|
| 1207 | "%s: Obsolete option: %s" | 
|---|
| 1208 | ;; | 
|---|
| 1209 |  | 
|---|
| 1210 | 20  ) msgTxt=\ | 
|---|
| 1211 | "%s: Interrupt received: No changes made." | 
|---|
| 1212 | ;; | 
|---|
| 1213 |  | 
|---|
| 1214 | 23  ) msgTxt=\ | 
|---|
| 1215 | "%s: Disk name must be specified in disk descriptor." | 
|---|
| 1216 | ;; | 
|---|
| 1217 |  | 
|---|
| 1218 | 24  ) msgTxt=\ | 
|---|
| 1219 | "%s: Disk usage must be dataOnly, metadataOnly, descOnly, or dataAndMetadata." | 
|---|
| 1220 | ;; | 
|---|
| 1221 |  | 
|---|
| 1222 | 30  ) msgTxt=\ | 
|---|
| 1223 | "%s: User specified failure group must be in the range from -1 to 4000." | 
|---|
| 1224 | ;; | 
|---|
| 1225 |  | 
|---|
| 1226 | 32  ) msgTxt=\ | 
|---|
| 1227 | "%s: Interrupt received: changes not propagated." | 
|---|
| 1228 | ;; | 
|---|
| 1229 |  | 
|---|
| 1230 | 33  ) msgTxt=\ | 
|---|
| 1231 | "%s: Interrupt received. Only -A, -Q, and -T were changed." | 
|---|
| 1232 | ;; | 
|---|
| 1233 |  | 
|---|
| 1234 | 34  ) msgTxt=\ | 
|---|
| 1235 | "Usage:  %s Device" | 
|---|
| 1236 | ;; | 
|---|
| 1237 |  | 
|---|
| 1238 | 35  ) msgTxt=\ | 
|---|
| 1239 | "%s: Restriping may not have finished." | 
|---|
| 1240 | ;; | 
|---|
| 1241 |  | 
|---|
| 1242 | 36  ) msgTxt=\ | 
|---|
| 1243 | "%s: %s option specified twice." | 
|---|
| 1244 | ;; | 
|---|
| 1245 |  | 
|---|
| 1246 | 37  ) msgTxt=\ | 
|---|
| 1247 | "%s: %s value must be yes or no." | 
|---|
| 1248 | ;; | 
|---|
| 1249 |  | 
|---|
| 1250 | 38  ) msgTxt=\ | 
|---|
| 1251 | "%s: Incorrect extra argument: %s" | 
|---|
| 1252 | ;; | 
|---|
| 1253 |  | 
|---|
| 1254 | 39 ) msgTxt=\ | 
|---|
| 1255 | "Usage: %s QueryType ItemList [Scope [norefresh]]" | 
|---|
| 1256 | ;; | 
|---|
| 1257 |  | 
|---|
| 1258 | 40  ) msgTxt=\ | 
|---|
| 1259 | "%s: Incorrect integer for %s: %s" | 
|---|
| 1260 | ;; | 
|---|
| 1261 |  | 
|---|
| 1262 | 41  ) msgTxt=\ | 
|---|
| 1263 | "%s: No disk descriptor file specified" | 
|---|
| 1264 | ;; | 
|---|
| 1265 |  | 
|---|
| 1266 | 42  ) msgTxt=\ | 
|---|
| 1267 | "%s: File %s already exists." | 
|---|
| 1268 | ;; | 
|---|
| 1269 |  | 
|---|
| 1270 | 43  ) msgTxt=\ | 
|---|
| 1271 | "%s: Cannot open %s" | 
|---|
| 1272 | ;; | 
|---|
| 1273 |  | 
|---|
| 1274 | 44  ) msgTxt=\ | 
|---|
| 1275 | "%s: Incompatible cluster types.  You cannot move file systems that were\n"\ | 
|---|
| 1276 | "created by GPFS cluster type %s into GPFS cluster type %s." | 
|---|
| 1277 | ;; | 
|---|
| 1278 |  | 
|---|
| 1279 | 45  ) msgTxt=\ | 
|---|
| 1280 | "%s: %s must be greater than 0: %s" | 
|---|
| 1281 | ;; | 
|---|
| 1282 |  | 
|---|
| 1283 | 47  ) msgTxt=\ | 
|---|
| 1284 | "%s: Error converting %s into an NSD." | 
|---|
| 1285 | ;; | 
|---|
| 1286 |  | 
|---|
| 1287 | 48  ) msgTxt=\ | 
|---|
| 1288 | "%s: File system %s already exists in the cluster.\n"\ | 
|---|
| 1289 | "    Use mmchfs -W to assign a new device name for the existing file system." | 
|---|
| 1290 | ;; | 
|---|
| 1291 |  | 
|---|
| 1292 | 49  ) msgTxt=\ | 
|---|
| 1293 | "%s: %s is defined to have mount point %s.\n"\ | 
|---|
| 1294 | "    There is already such a mount point in the cluster.\n"\ | 
|---|
| 1295 | "    Use mmchfs -T to assign a new mount point to the existing file system." | 
|---|
| 1296 | ;; | 
|---|
| 1297 |  | 
|---|
| 1298 | 50  ) msgTxt=\ | 
|---|
| 1299 | "%s: Error encountered while importing disk %s." | 
|---|
| 1300 | ;; | 
|---|
| 1301 |  | 
|---|
| 1302 | 51  ) msgTxt=\ | 
|---|
| 1303 | "%s: Disk %s already exists in the cluster." | 
|---|
| 1304 | ;; | 
|---|
| 1305 |  | 
|---|
| 1306 | 53  ) msgTxt=\ | 
|---|
| 1307 | "%s: At least one node in the cluster must be defined as a quorum node." | 
|---|
| 1308 | ;; | 
|---|
| 1309 |  | 
|---|
| 1310 | 54  ) msgTxt=\ | 
|---|
| 1311 | "%s: Incorrect node %s specified for command." | 
|---|
| 1312 | ;; | 
|---|
| 1313 |  | 
|---|
| 1314 | 61  ) msgTxt=\ | 
|---|
| 1315 | "%s: Use the dash character (-) to separate multiple node designations." | 
|---|
| 1316 | ;; | 
|---|
| 1317 |  | 
|---|
| 1318 | 62  ) msgTxt=\ | 
|---|
| 1319 | "%s: Use the semi-colon character (;) to separate the disk names." | 
|---|
| 1320 | ;; | 
|---|
| 1321 |  | 
|---|
| 1322 | 63  ) msgTxt=\ | 
|---|
| 1323 | "%s: GPFS is still active on %s" | 
|---|
| 1324 | ;; | 
|---|
| 1325 |  | 
|---|
| 1326 | 78  ) msgTxt=\ | 
|---|
| 1327 | "%s: %s must be from %s to %s: %s" | 
|---|
| 1328 | ;; | 
|---|
| 1329 |  | 
|---|
| 1330 | 79  ) msgTxt=\ | 
|---|
| 1331 | "%s: mmfixcfg failed while changing %s" | 
|---|
| 1332 | ;; | 
|---|
| 1333 |  | 
|---|
| 1334 | 88  ) msgTxt=\ | 
|---|
| 1335 | "%s: Duplicate disk specified: %s" | 
|---|
| 1336 | ;; | 
|---|
| 1337 |  | 
|---|
| 1338 | 89  ) msgTxt=\ | 
|---|
| 1339 | "%s: You cannot delete all disks" | 
|---|
| 1340 | ;; | 
|---|
| 1341 |  | 
|---|
| 1342 | 97  ) msgTxt=\ | 
|---|
| 1343 | "%s: %s must be greater than %s: %s" | 
|---|
| 1344 | ;; | 
|---|
| 1345 |  | 
|---|
| 1346 | 100 ) msgTxt=\ | 
|---|
| 1347 | "%s: tscrfs failed.  Cannot create %s" | 
|---|
| 1348 | ;; | 
|---|
| 1349 |  | 
|---|
| 1350 | 101 ) msgTxt=\ | 
|---|
| 1351 | "%s: Disk %s does not belong to file system %s." | 
|---|
| 1352 | ;; | 
|---|
| 1353 |  | 
|---|
| 1354 | 102 ) msgTxt=\ | 
|---|
| 1355 | "%s: Active disks are missing from the GPFS configuration data:" | 
|---|
| 1356 | ;; | 
|---|
| 1357 |  | 
|---|
| 1358 | 103 ) msgTxt=\ | 
|---|
| 1359 | "%s: Attention: File system %s may have some disks\n"\ | 
|---|
| 1360 | "that are in a non-ready state.  Issue the command:\n"\ | 
|---|
| 1361 | "  mmcommon recoverfs %s" | 
|---|
| 1362 | ;; | 
|---|
| 1363 |  | 
|---|
| 1364 | 104 ) msgTxt=\ | 
|---|
| 1365 | "%s: %s failed." | 
|---|
| 1366 | ;; | 
|---|
| 1367 |  | 
|---|
| 1368 | 105 ) msgTxt=\ | 
|---|
| 1369 | "%s: Failed to connect to remote cluster %s" | 
|---|
| 1370 | ;; | 
|---|
| 1371 |  | 
|---|
| 1372 | 106 ) msgTxt=\ | 
|---|
| 1373 | "%s: File system %s belongs to cluster %s.\n"\ | 
|---|
| 1374 | "    Command is not allowed for remote file systems." | 
|---|
| 1375 | ;; | 
|---|
| 1376 |  | 
|---|
| 1377 | 107 ) msgTxt=\ | 
|---|
| 1378 | "%s: There is already an existing file system using %s" | 
|---|
| 1379 | ;; | 
|---|
| 1380 |  | 
|---|
| 1381 | 108 ) msgTxt=\ | 
|---|
| 1382 | "%s: File system %s not found in cluster %s" | 
|---|
| 1383 | ;; | 
|---|
| 1384 |  | 
|---|
| 1385 | 109 ) msgTxt=\ | 
|---|
| 1386 | "%s: GPFS is down on this node." | 
|---|
| 1387 | ;; | 
|---|
| 1388 |  | 
|---|
| 1389 | 110 ) msgTxt=\ | 
|---|
| 1390 | "%s: GPFS is not ready to handle commands yet." | 
|---|
| 1391 | ;; | 
|---|
| 1392 |  | 
|---|
| 1393 | 111 ) msgTxt=\ | 
|---|
| 1394 | "%s: %s refers to file system %s in cluster %s" | 
|---|
| 1395 | ;; | 
|---|
| 1396 |  | 
|---|
| 1397 | 112 ) msgTxt=\ | 
|---|
| 1398 | "%s: File system %s does not belong to cluster %s" | 
|---|
| 1399 | ;; | 
|---|
| 1400 |  | 
|---|
| 1401 | 113 ) msgTxt=\ | 
|---|
| 1402 | "%s: %s failed. Error code %s." | 
|---|
| 1403 | ;; | 
|---|
| 1404 |  | 
|---|
| 1405 | 127 ) msgTxt=\ | 
|---|
| 1406 | "%s: The main GPFS cluster configuration file is locked.  Retrying..." | 
|---|
| 1407 | ;; | 
|---|
| 1408 |  | 
|---|
| 1409 | 128 ) msgTxt=\ | 
|---|
| 1410 | "%s: Lock creation successful." | 
|---|
| 1411 | ;; | 
|---|
| 1412 |  | 
|---|
| 1413 | 129 ) msgTxt=\ | 
|---|
| 1414 | "%s: Timed out waiting for lock.  Try again later." | 
|---|
| 1415 | ;; | 
|---|
| 1416 |  | 
|---|
| 1417 | 130 ) msgTxt=\ | 
|---|
| 1418 | "%s: Disk %s is a tiebreaker disk and cannot be deleted." | 
|---|
| 1419 | ;; | 
|---|
| 1420 |  | 
|---|
| 1421 | 131 ) msgTxt=\ | 
|---|
| 1422 | "%s: GPFS detected more than eight quorum nodes while\n"\ | 
|---|
| 1423 | "node quorum with tiebreaker disks is in use." | 
|---|
| 1424 | ;; | 
|---|
| 1425 |  | 
|---|
| 1426 | 132 ) msgTxt=\ | 
|---|
| 1427 | "%s: GPFS failed to initialize the tiebreaker disks." | 
|---|
| 1428 | ;; | 
|---|
| 1429 |  | 
|---|
| 1430 | 133 ) msgTxt=\ | 
|---|
| 1431 | "%s: Incorrect keyword: %s" | 
|---|
| 1432 | ;; | 
|---|
| 1433 |  | 
|---|
| 1434 | 134 ) msgTxt=\ | 
|---|
| 1435 | "%s: Adding node %s to the cluster will exceed\n"\ | 
|---|
| 1436 | "the quorum node limit." | 
|---|
| 1437 | ;; | 
|---|
| 1438 |  | 
|---|
| 1439 | 135 ) msgTxt=\ | 
|---|
| 1440 | "%s: The %s kernel extension does not exist." | 
|---|
| 1441 | ;; | 
|---|
| 1442 |  | 
|---|
| 1443 | 136 ) msgTxt=\ | 
|---|
| 1444 | "%s: Unable to verify kernel/module configuration." | 
|---|
| 1445 | ;; | 
|---|
| 1446 |  | 
|---|
| 1447 | 137 ) msgTxt=\ | 
|---|
| 1448 | "%s: The GPFS daemon is still running; use the mmshutdown command." | 
|---|
| 1449 | ;; | 
|---|
| 1450 |  | 
|---|
| 1451 | 138 ) msgTxt=\ | 
|---|
| 1452 | "%s: Module %s is still in use.\n"\ | 
|---|
| 1453 | "Unmount all GPFS file systems and issue the command:\n"\ | 
|---|
| 1454 | "  mmfsadm cleanup" | 
|---|
| 1455 | ;; | 
|---|
| 1456 |  | 
|---|
| 1457 | 139 ) msgTxt=\ | 
|---|
| 1458 | "%s: Error unloading module %s." | 
|---|
| 1459 | ;; | 
|---|
| 1460 |  | 
|---|
| 1461 | 140 ) msgTxt=\ | 
|---|
| 1462 | "%s: Module %s is already loaded." | 
|---|
| 1463 | ;; | 
|---|
| 1464 |  | 
|---|
| 1465 | 141 ) msgTxt=\ | 
|---|
| 1466 | "%s: %s was not found in /proc/partitions." | 
|---|
| 1467 | ;; | 
|---|
| 1468 |  | 
|---|
| 1469 | 142 ) msgTxt=\ | 
|---|
| 1470 | "%s: GPFS is waiting for %s" | 
|---|
| 1471 | printTimeStamp=yes | 
|---|
| 1472 | ;; | 
|---|
| 1473 |  | 
|---|
| 1474 | 144 ) msgTxt=\ | 
|---|
| 1475 | "%s: \"%s\" is set by the mmcrcluster processing.\n"\ | 
|---|
| 1476 | "    Line in error: %s\n"\ | 
|---|
| 1477 | "    The line is ignored; processing continues." | 
|---|
| 1478 | ;; | 
|---|
| 1479 |  | 
|---|
| 1480 | 145 ) msgTxt=\ | 
|---|
| 1481 | "%s: \"%s\" must be set with the %s command.\n"\ | 
|---|
| 1482 | "    Line in error: %s\n"\ | 
|---|
| 1483 | "    The line is ignored; processing continues." | 
|---|
| 1484 | ;; | 
|---|
| 1485 |  | 
|---|
| 1486 | 146 ) msgTxt=\ | 
|---|
| 1487 | "%s: \"%s\" is an obsolete parameter.\n"\ | 
|---|
| 1488 | "    Line in error: %s\n"\ | 
|---|
| 1489 | "    The line is ignored; processing continues." | 
|---|
| 1490 | ;; | 
|---|
| 1491 |  | 
|---|
| 1492 | 147 ) msgTxt=\ | 
|---|
| 1493 | "%s: \"%s\" cannot appear in a node-override section.\n"\ | 
|---|
| 1494 | "    Line in error: %s\n"\ | 
|---|
| 1495 | "    The line is ignored; processing continues." | 
|---|
| 1496 | ;; | 
|---|
| 1497 |  | 
|---|
| 1498 | 148 ) msgTxt=\ | 
|---|
| 1499 | "%s: Mount point can not be a relative path name: %s" | 
|---|
| 1500 | ;; | 
|---|
| 1501 |  | 
|---|
| 1502 | 149 ) msgTxt=\ | 
|---|
| 1503 | "%s: %s can not be a relative path name: %s" | 
|---|
| 1504 | ;; | 
|---|
| 1505 |  | 
|---|
| 1506 | 150 ) msgTxt=\ | 
|---|
| 1507 | "%s: Key file is not valid." | 
|---|
| 1508 | ;; | 
|---|
| 1509 |  | 
|---|
| 1510 | 151 ) msgTxt=\ | 
|---|
| 1511 | "%s: Key file mismatch." | 
|---|
| 1512 | ;; | 
|---|
| 1513 |  | 
|---|
| 1514 | 152 ) msgTxt=\ | 
|---|
| 1515 | "%s: Node %s already belongs to the GPFS cluster." | 
|---|
| 1516 | ;; | 
|---|
| 1517 |  | 
|---|
| 1518 | 153 ) msgTxt=\ | 
|---|
| 1519 | "%s: Incorrect value for %s option" | 
|---|
| 1520 | ;; | 
|---|
| 1521 |  | 
|---|
| 1522 | 154 ) msgTxt=\ | 
|---|
| 1523 | "%s: Adapter port name %s is not known on node %s." | 
|---|
| 1524 | ;; | 
|---|
| 1525 |  | 
|---|
| 1526 | 155 ) msgTxt=\ | 
|---|
| 1527 | "%s: There is nothing to commit.  You must first run:\n    %s" | 
|---|
| 1528 | ;; | 
|---|
| 1529 |  | 
|---|
| 1530 | 156 ) msgTxt=\ | 
|---|
| 1531 | "%s: The current authentication files are already committed." | 
|---|
| 1532 | ;; | 
|---|
| 1533 |  | 
|---|
| 1534 | 157 ) msgTxt=\ | 
|---|
| 1535 | "%s: There are uncommitted authentication files.  You must first run:\n    %s" | 
|---|
| 1536 | ;; | 
|---|
| 1537 |  | 
|---|
| 1538 | 158 ) msgTxt=\ | 
|---|
| 1539 | "%s: You must establish a cipher list first.  Run:\n    %s" | 
|---|
| 1540 | ;; | 
|---|
| 1541 |  | 
|---|
| 1542 | 159 ) msgTxt=\ | 
|---|
| 1543 | "%s: %s not found.  Ensure the OpenSSL code is properly installed." | 
|---|
| 1544 | ;; | 
|---|
| 1545 |  | 
|---|
| 1546 | 160 ) msgTxt=\ | 
|---|
| 1547 | "%s: For the logical volume specification \"-l %s\" to be valid\n"\ | 
|---|
| 1548 | "%s must be the only logical volume in the volume group.\n"\ | 
|---|
| 1549 | "However, volume group %s contains the following logical volumes:" | 
|---|
| 1550 | ;; | 
|---|
| 1551 |  | 
|---|
| 1552 | 161 ) msgTxt=\ | 
|---|
| 1553 | "%s: %s is not a valid logical volume." | 
|---|
| 1554 | ;; | 
|---|
| 1555 |  | 
|---|
| 1556 | 162 ) msgTxt=\ | 
|---|
| 1557 | "%s: %s is not a valid volume group name." | 
|---|
| 1558 | ;; | 
|---|
| 1559 |  | 
|---|
| 1560 | 163 ) msgTxt=\ | 
|---|
| 1561 | "%s: For the hdisk specification \"-h %s\" to be valid\n"\ | 
|---|
| 1562 | "%s must be the only disk in the volume group.\n"\ | 
|---|
| 1563 | "However, volume group %s contains the following disks:" | 
|---|
| 1564 | ;; | 
|---|
| 1565 |  | 
|---|
| 1566 | 164 ) msgTxt=\ | 
|---|
| 1567 | "%s: %s is not a valid physical volume name." | 
|---|
| 1568 | ;; | 
|---|
| 1569 |  | 
|---|
| 1570 | 165 ) msgTxt=\ | 
|---|
| 1571 | "%s: %s is not a valid physical volume id." | 
|---|
| 1572 | ;; | 
|---|
| 1573 |  | 
|---|
| 1574 | 166 ) msgTxt=\ | 
|---|
| 1575 | "Usage:  %s <disk specification>\n" | 
|---|
| 1576 | ;; | 
|---|
| 1577 |  | 
|---|
| 1578 | 167 ) msgTxt=\ | 
|---|
| 1579 | "The disk specification must be in one of these formats:\n"\ | 
|---|
| 1580 | "   -l logicalVolumeName        (e.g., '-l lv00')\n"\ | 
|---|
| 1581 | "   -v volumeGroupName          (e.g., '-v vg00')\n"\ | 
|---|
| 1582 | "   -h physicalDiskName         (e.g., '-h hdisk0')\n"\ | 
|---|
| 1583 | "   -p physicalVolumeIdentifier (e.g., '-p 0003366423ba4d39')\n" | 
|---|
| 1584 | ;; | 
|---|
| 1585 |  | 
|---|
| 1586 | 168 ) msgTxt=\ | 
|---|
| 1587 | "%s: Missing arguments" | 
|---|
| 1588 | ;; | 
|---|
| 1589 |  | 
|---|
| 1590 | 169 ) msgTxt=\ | 
|---|
| 1591 | "%s: The device name %s starts with a slash, but not /dev/." | 
|---|
| 1592 | ;; | 
|---|
| 1593 |  | 
|---|
| 1594 | 170 ) msgTxt=\ | 
|---|
| 1595 | "%s: The device name %s contains a slash, but not as its first character." | 
|---|
| 1596 | ;; | 
|---|
| 1597 |  | 
|---|
| 1598 | 171 ) msgTxt=\ | 
|---|
| 1599 | "%s: Unexpected error from %s.  Return code: %s" | 
|---|
| 1600 | ;; | 
|---|
| 1601 |  | 
|---|
| 1602 | 172 ) msgTxt=\ | 
|---|
| 1603 | "%s: Unknown user name %s" | 
|---|
| 1604 | ;; | 
|---|
| 1605 |  | 
|---|
| 1606 | 173 ) msgTxt=\ | 
|---|
| 1607 | "%s: Unknown group name %s" | 
|---|
| 1608 | ;; | 
|---|
| 1609 |  | 
|---|
| 1610 | 174 ) msgTxt=\ | 
|---|
| 1611 | "%s: The administrative adapter port name was not defined\n"\ | 
|---|
| 1612 | "for nodes:\n\t %s\n"\ | 
|---|
| 1613 | "Correct the problems and run mmchcluster -N again." | 
|---|
| 1614 | ;; | 
|---|
| 1615 |  | 
|---|
| 1616 | 175 ) msgTxt=\ | 
|---|
| 1617 | "%s: Daemon node adapter %s was not found on admin node %s." | 
|---|
| 1618 | ;; | 
|---|
| 1619 |  | 
|---|
| 1620 | 176 ) msgTxt=\ | 
|---|
| 1621 | "%s: Command failed for disks: %s" | 
|---|
| 1622 | ;; | 
|---|
| 1623 |  | 
|---|
| 1624 | 177 ) msgTxt=\ | 
|---|
| 1625 | "%s: No contact nodes were provided for cluster %s" | 
|---|
| 1626 | ;; | 
|---|
| 1627 |  | 
|---|
| 1628 | 178 ) msgTxt=\ | 
|---|
| 1629 | "%s: None of the contact nodes in cluster %s can be reached." | 
|---|
| 1630 | ;; | 
|---|
| 1631 |  | 
|---|
| 1632 | 184 ) msgTxt=\ | 
|---|
| 1633 | "Usage: %s [-a | -n NodeName]" | 
|---|
| 1634 | ;; | 
|---|
| 1635 |  | 
|---|
| 1636 | 185 ) msgTxt=\ | 
|---|
| 1637 | "Usage: %s Device [-W NewDeviceName]" | 
|---|
| 1638 | ;; | 
|---|
| 1639 |  | 
|---|
| 1640 | 186 ) msgTxt=\ | 
|---|
| 1641 | "Usage: %s [-d IntegerDelayValue] [-i CommandFile] [-p]\n"\ | 
|---|
| 1642 | "        [-r IntegerRepeatValue] [-s] [-t IntegerTimeoutValue]" | 
|---|
| 1643 | ;; | 
|---|
| 1644 |  | 
|---|
| 1645 | 187 ) msgTxt=\ | 
|---|
| 1646 | "%s: Node %s returned ENODEV for disk %s." | 
|---|
| 1647 | ;; | 
|---|
| 1648 |  | 
|---|
| 1649 | 188 ) msgTxt=\ | 
|---|
| 1650 | "%s: Remote cluster %s was not found." | 
|---|
| 1651 | ;; | 
|---|
| 1652 |  | 
|---|
| 1653 | 189 ) msgTxt=\ | 
|---|
| 1654 | "%s: Name %s is not allowed.\n"\ | 
|---|
| 1655 | "It contains the following invalid special character:  %s" | 
|---|
| 1656 | ;; | 
|---|
| 1657 |  | 
|---|
| 1658 | 190 ) msgTxt=\ | 
|---|
| 1659 | "%s: GPFS configuration data for file system %s\n"\ | 
|---|
| 1660 | "may not be in agreement with the on-disk data for the file system.\n"\ | 
|---|
| 1661 | "Issue the command:\n"\ | 
|---|
| 1662 | "  mmcommon recoverfs %s" | 
|---|
| 1663 | ;; | 
|---|
| 1664 |  | 
|---|
| 1665 | 191 ) msgTxt=\ | 
|---|
| 1666 | "%s: Options %s and %s cannot be specified at the same time." | 
|---|
| 1667 | ;; | 
|---|
| 1668 |  | 
|---|
| 1669 | 192 ) msgTxt=\ | 
|---|
| 1670 | "%s: <nodelist> cannot be used with attribute %s" | 
|---|
| 1671 | ;; | 
|---|
| 1672 |  | 
|---|
| 1673 | 193 ) msgTxt=\ | 
|---|
| 1674 | "%s: There are no remote file systems." | 
|---|
| 1675 | ;; | 
|---|
| 1676 |  | 
|---|
| 1677 | 194 ) msgTxt=\ | 
|---|
| 1678 | "%s: Remote file system %s is not defined." | 
|---|
| 1679 | ;; | 
|---|
| 1680 |  | 
|---|
| 1681 | 195 ) msgTxt=\ | 
|---|
| 1682 | "%s: The GPFS configuration information is incorrect or not available." | 
|---|
| 1683 | ;; | 
|---|
| 1684 |  | 
|---|
| 1685 | 196 ) msgTxt=\ | 
|---|
| 1686 | "%s: Device name cannot be 'all'." | 
|---|
| 1687 | ;; | 
|---|
| 1688 |  | 
|---|
| 1689 | 197 ) msgTxt=\ | 
|---|
| 1690 | "%s: Each device specifies metadataOnly for disk usage.\n"\ | 
|---|
| 1691 | "This file system could not store data." | 
|---|
| 1692 | ;; | 
|---|
| 1693 |  | 
|---|
| 1694 | 198 ) msgTxt=\ | 
|---|
| 1695 | "%s: Each device specifies dataOnly for disk usage.\n"\ | 
|---|
| 1696 | "This file system could not store metadata." | 
|---|
| 1697 | ;; | 
|---|
| 1698 |  | 
|---|
| 1699 | 199 ) msgTxt=\ | 
|---|
| 1700 | "%s: Incorrect integer %s specified for failure group." | 
|---|
| 1701 | ;; | 
|---|
| 1702 |  | 
|---|
| 1703 | 200 ) msgTxt=\ | 
|---|
| 1704 | "%s: No file systems were found." | 
|---|
| 1705 | ;; | 
|---|
| 1706 |  | 
|---|
| 1707 | 201 ) msgTxt=\ | 
|---|
| 1708 | "%s: Incorrect server node %s in disk descriptor." | 
|---|
| 1709 | ;; | 
|---|
| 1710 |  | 
|---|
| 1711 | 202 ) msgTxt=\ | 
|---|
| 1712 | "%s: %s is the name of the local cluster." | 
|---|
| 1713 | ;; | 
|---|
| 1714 |  | 
|---|
| 1715 | 204 ) msgTxt=\ | 
|---|
| 1716 | "%s: Missing argument after %s option" | 
|---|
| 1717 | ;; | 
|---|
| 1718 |  | 
|---|
| 1719 | 229 ) msgTxt=\ | 
|---|
| 1720 | "Usage: %s [-CIVOSPDH] [-c] [-u] [-d disk] [-g volumeGroup]\n"\ | 
|---|
| 1721 | "        [-l logicalVolume] [-G globalVolumeGroup] [-L globalLogicalVolume]\n"\ | 
|---|
| 1722 | "        [-p physicalVolumeID ]\n" | 
|---|
| 1723 | ;; | 
|---|
| 1724 |  | 
|---|
| 1725 | 230 ) msgTxt=\ | 
|---|
| 1726 | "%s: %s is already in volume group %s and cannot be added to %s.\n" | 
|---|
| 1727 | ;; | 
|---|
| 1728 |  | 
|---|
| 1729 | 232 ) msgTxt=\ | 
|---|
| 1730 | "%s: Cannot find %s with %s.\n" | 
|---|
| 1731 | ;; | 
|---|
| 1732 |  | 
|---|
| 1733 | 233 ) msgTxt=\ | 
|---|
| 1734 | "%s: %s requires a value.\n" | 
|---|
| 1735 | ;; | 
|---|
| 1736 |  | 
|---|
| 1737 | 234 ) msgTxt=\ | 
|---|
| 1738 | "%s: Incorrect option: %s\n" | 
|---|
| 1739 | ;; | 
|---|
| 1740 |  | 
|---|
| 1741 | 235 ) msgTxt=\ | 
|---|
| 1742 | "%s: Interrupt received.\n" | 
|---|
| 1743 | ;; | 
|---|
| 1744 |  | 
|---|
| 1745 | 236 ) msgTxt=\ | 
|---|
| 1746 | "%s: Volume group %s cannot be imported on node\n"\ | 
|---|
| 1747 | "%s because the disk with physical volume ID %s\n"\ | 
|---|
| 1748 | "cannot be found." | 
|---|
| 1749 | ;; | 
|---|
| 1750 |  | 
|---|
| 1751 | 237 ) msgTxt=\ | 
|---|
| 1752 | "%s: Failed to obtain DCE credentials; dsrvtgt %s command rc=%s. Continuing." | 
|---|
| 1753 | ;; | 
|---|
| 1754 |  | 
|---|
| 1755 | 238 ) msgTxt=\ | 
|---|
| 1756 | "%s: Command is not allowed for remote file systems." | 
|---|
| 1757 | ;; | 
|---|
| 1758 |  | 
|---|
| 1759 | 239 ) msgTxt=\ | 
|---|
| 1760 | "%s: Disk usage %s is incompatible with storage pool %s." | 
|---|
| 1761 | ;; | 
|---|
| 1762 |  | 
|---|
| 1763 | 240 ) msgTxt=\ | 
|---|
| 1764 | "%s: File %s not found.  Recover the file or run mmauth genkey." | 
|---|
| 1765 | ;; | 
|---|
| 1766 |  | 
|---|
| 1767 | 246 ) msgTxt=\ | 
|---|
| 1768 | "Usage:\n"\ | 
|---|
| 1769 | "  %s [-t UnmountTimeout]\n"\ | 
|---|
| 1770 | "             [-a | -N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 1771 | ;; | 
|---|
| 1772 |  | 
|---|
| 1773 | 247 ) msgTxt=\ | 
|---|
| 1774 | "%s: Disk with NSD volume id %s no longer\n"\ | 
|---|
| 1775 | "          exists in the GPFS cluster configuration data but the NSD volume id\n"\ | 
|---|
| 1776 | "          was not erased from the disk.  To remove the NSD volume id, issue\n"\ | 
|---|
| 1777 | "             mmdelnsd -p %s" | 
|---|
| 1778 | ;; | 
|---|
| 1779 |  | 
|---|
| 1780 | 248 ) msgTxt=\ | 
|---|
| 1781 | "%s: Disk with NSD volume id %s no longer\n"\ | 
|---|
| 1782 | "          exists in the GPFS cluster configuration data but the NSD volume id\n"\ | 
|---|
| 1783 | "          was not erased from the disk.  To remove the NSD volume id, issue\n"\ | 
|---|
| 1784 | "             mmdelnsd -p %s -N %s" | 
|---|
| 1785 | ;; | 
|---|
| 1786 |  | 
|---|
| 1787 | 249 ) msgTxt=\ | 
|---|
| 1788 | "Usage:\n"\ | 
|---|
| 1789 | "   %s genkey {new | commit}\n"\ | 
|---|
| 1790 | "      or\n"\ | 
|---|
| 1791 | "   %s add    RemoteClusterName -k KeyFile [-l CipherList]\n"\ | 
|---|
| 1792 | "      or\n"\ | 
|---|
| 1793 | "   %s update RemoteClusterName {[-C NewClusterName] [-k KeyFile] [-l CipherList]}\n"\ | 
|---|
| 1794 | "      or\n"\ | 
|---|
| 1795 | "   %s delete {RemoteClusterName | all}\n"\ | 
|---|
| 1796 | "      or\n"\ | 
|---|
| 1797 | "   %s grant  {RemoteClusterName | all} -f {Device | all} [-a {rw | ro}] [-r {uid:gid | no}]\n"\ | 
|---|
| 1798 | "      or\n"\ | 
|---|
| 1799 | "   %s deny   {RemoteClusterName | all} -f {Device | all}\n"\ | 
|---|
| 1800 | "      or\n"\ | 
|---|
| 1801 | "   %s show   [RemoteClusterName | all]\n" | 
|---|
| 1802 | ;; | 
|---|
| 1803 |  | 
|---|
| 1804 | 252 ) msgTxt=\ | 
|---|
| 1805 | "%s: %s is not a remote file system known to GPFS." | 
|---|
| 1806 | ;; | 
|---|
| 1807 |  | 
|---|
| 1808 | 257 ) msgTxt=\ | 
|---|
| 1809 | "%s: An internode connection between GPFS nodes was disrupted." | 
|---|
| 1810 | ;; | 
|---|
| 1811 |  | 
|---|
| 1812 | 258 ) msgTxt=\ | 
|---|
| 1813 | "%s: No clusters are authorized to access this cluster." | 
|---|
| 1814 | ;; | 
|---|
| 1815 |  | 
|---|
| 1816 | 259 ) msgTxt=\ | 
|---|
| 1817 | "%s: Cluster %s is not authorized to access this cluster." | 
|---|
| 1818 | ;; | 
|---|
| 1819 |  | 
|---|
| 1820 | 260 ) msgTxt=\ | 
|---|
| 1821 | "Usage: %s %s %s" | 
|---|
| 1822 | ;; | 
|---|
| 1823 |  | 
|---|
| 1824 | 261 ) msgTxt=\ | 
|---|
| 1825 | "%s: Attention: There are no available valid VFS type values for mmfs in /etc/vfs." | 
|---|
| 1826 | ;; | 
|---|
| 1827 |  | 
|---|
| 1828 | 262 ) msgTxt=\ | 
|---|
| 1829 | "%s: There are no remote cluster definitions." | 
|---|
| 1830 | ;; | 
|---|
| 1831 |  | 
|---|
| 1832 | 263 ) msgTxt=\ | 
|---|
| 1833 | "%s: Remote cluster %s is not defined." | 
|---|
| 1834 | ;; | 
|---|
| 1835 |  | 
|---|
| 1836 | 264 ) msgTxt=\ | 
|---|
| 1837 | "%s: No disks specified" | 
|---|
| 1838 | ;; | 
|---|
| 1839 |  | 
|---|
| 1840 | 265 ) msgTxt=\ | 
|---|
| 1841 | "%s: Disk %s already belongs to file system %s." | 
|---|
| 1842 | ;; | 
|---|
| 1843 |  | 
|---|
| 1844 | 266 ) msgTxt=\ | 
|---|
| 1845 | "%s: File system %s has some disks that are in a non-ready state." | 
|---|
| 1846 | ;; | 
|---|
| 1847 |  | 
|---|
| 1848 | 267 ) msgTxt=\ | 
|---|
| 1849 | "%s: Attention: Not all disks were marked as available." | 
|---|
| 1850 | ;; | 
|---|
| 1851 |  | 
|---|
| 1852 | 268 ) msgTxt=\ | 
|---|
| 1853 | "%s: This GPFS cluster contains declarations for remote file systems and clusters.\n"\ | 
|---|
| 1854 | "    You cannot delete the last node." | 
|---|
| 1855 | ;; | 
|---|
| 1856 |  | 
|---|
| 1857 | 270 ) msgTxt=\ | 
|---|
| 1858 | "%s: The following nodes could not be reached:\n" | 
|---|
| 1859 | ;; | 
|---|
| 1860 |  | 
|---|
| 1861 | 271 ) msgTxt=\ | 
|---|
| 1862 | "%s: Propagating the cluster configuration data to all\n"\ | 
|---|
| 1863 | "  affected nodes.  This is an asynchronous process." | 
|---|
| 1864 | ;; | 
|---|
| 1865 |  | 
|---|
| 1866 | 272 ) msgTxt=\ | 
|---|
| 1867 | "%s: Command successfully completed" | 
|---|
| 1868 | ;; | 
|---|
| 1869 |  | 
|---|
| 1870 | 273 ) msgTxt=\ | 
|---|
| 1871 | "%s: There is no file system information in input file %s." | 
|---|
| 1872 | ;; | 
|---|
| 1873 |  | 
|---|
| 1874 | 274 ) msgTxt=\ | 
|---|
| 1875 | "%s: File system %s was not found in input file %s." | 
|---|
| 1876 | ;; | 
|---|
| 1877 |  | 
|---|
| 1878 | 275 ) msgTxt=\ | 
|---|
| 1879 | "%s: The following file systems were not imported:%s" | 
|---|
| 1880 | ;; | 
|---|
| 1881 |  | 
|---|
| 1882 | 277 ) msgTxt=\ | 
|---|
| 1883 | "%s: Attention: Unknown attribute specified: %s.  Press the ENTER key to continue." | 
|---|
| 1884 | ;; | 
|---|
| 1885 |  | 
|---|
| 1886 | 278 ) msgTxt=\ | 
|---|
| 1887 | "%s: Incorrect record found in the mmsdrfs file (code %s):" | 
|---|
| 1888 | ;; | 
|---|
| 1889 |  | 
|---|
| 1890 | 279 ) msgTxt=\ | 
|---|
| 1891 | "%s: There is no file system with mount point %s." | 
|---|
| 1892 | ;; | 
|---|
| 1893 |  | 
|---|
| 1894 | 280 ) msgTxt=\ | 
|---|
| 1895 | "%s: File system %s is already mounted at %s." | 
|---|
| 1896 | ;; | 
|---|
| 1897 |  | 
|---|
| 1898 | 281 ) msgTxt=\ | 
|---|
| 1899 | "%s: Mount point cannot be specified when mounting all file systems." | 
|---|
| 1900 | ;; | 
|---|
| 1901 |  | 
|---|
| 1902 | 282 ) msgTxt=\ | 
|---|
| 1903 | "%s: This node does not belong to a GPFS cluster." | 
|---|
| 1904 | ;; | 
|---|
| 1905 |  | 
|---|
| 1906 | 283 ) msgTxt=\ | 
|---|
| 1907 | "%s:  There is no record for this node in file %s.\n"\ | 
|---|
| 1908 | "  Either the node is not part of the cluster, or the file is for a different cluster,\n"\ | 
|---|
| 1909 | "  or not all of the node's adapter interfaces have been activated yet." | 
|---|
| 1910 | ;; | 
|---|
| 1911 |  | 
|---|
| 1912 | 284 ) msgTxt=\ | 
|---|
| 1913 | "Usage:\n"\ | 
|---|
| 1914 | "  %s [-p NodeName] [-F mmsdrfsFile] [-R RemoteFileCopyCommand]" | 
|---|
| 1915 | ;; | 
|---|
| 1916 |  | 
|---|
| 1917 | 285 ) msgTxt=\ | 
|---|
| 1918 | "%s:  Node %s successfully restored." | 
|---|
| 1919 | ;; | 
|---|
| 1920 |  | 
|---|
| 1921 | 286 ) msgTxt=\ | 
|---|
| 1922 | "%s: Unexpected value for Gpfs object: %s" | 
|---|
| 1923 | ;; | 
|---|
| 1924 |  | 
|---|
| 1925 | 287 ) msgTxt=\ | 
|---|
| 1926 | "Usage:\n"\ | 
|---|
| 1927 | "  %s Device {resume | start} -a\n"\ | 
|---|
| 1928 | "             [-N {Node[,Node...] | NodeFile | NodeClass}]\n"\ | 
|---|
| 1929 | "    or\n"\ | 
|---|
| 1930 | "  %s Device {suspend | resume | stop | start | change}\n"\ | 
|---|
| 1931 | "             -d \"DiskDesc[;DiskDesc...]\"\n"\ | 
|---|
| 1932 | "             [-N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 1933 | ;; | 
|---|
| 1934 |  | 
|---|
| 1935 | 288 ) msgTxt=\ | 
|---|
| 1936 | "%s: File system %s is not known to the GPFS cluster." | 
|---|
| 1937 | ;; | 
|---|
| 1938 |  | 
|---|
| 1939 | 289 ) msgTxt=\ | 
|---|
| 1940 | "Usage:\n"\ | 
|---|
| 1941 | "  %s Attribute=value[,Attribute=value...] [-i | -I]\n"\ | 
|---|
| 1942 | "               [-N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 1943 | ;; | 
|---|
| 1944 |  | 
|---|
| 1945 | 290 ) msgTxt=\ | 
|---|
| 1946 | "%s: Node %s does not belong to the GPFS cluster,\n"\ | 
|---|
| 1947 | "  or is represented multiple times on the command line." | 
|---|
| 1948 | ;; | 
|---|
| 1949 |  | 
|---|
| 1950 | 291 ) msgTxt=\ | 
|---|
| 1951 | "Usage:\n"\ | 
|---|
| 1952 | "  %s Device {\"DiskDesc[;DiskDesc...]\" | -F DescFile} [-a] [-c]\n"\ | 
|---|
| 1953 | "            [-r] [-N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 1954 | ;; | 
|---|
| 1955 |  | 
|---|
| 1956 | 292 ) msgTxt=\ | 
|---|
| 1957 | "Usage: %s Device [-p]" | 
|---|
| 1958 | ;; | 
|---|
| 1959 |  | 
|---|
| 1960 | 293 ) msgTxt=\ | 
|---|
| 1961 | "%s: Invalid node designation specified: %s" | 
|---|
| 1962 | ;; | 
|---|
| 1963 |  | 
|---|
| 1964 | 294 ) msgTxt=\ | 
|---|
| 1965 | "%s: Operation not allowed for the local cluster." | 
|---|
| 1966 | ;; | 
|---|
| 1967 |  | 
|---|
| 1968 | 295 ) msgTxt=\ | 
|---|
| 1969 | "Usage:\n"\ | 
|---|
| 1970 | "  %s Device DiskName {DiskDesc | -F DescFile} [-v {yes | no}]\n"\ | 
|---|
| 1971 | "                   [-N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 1972 | ;; | 
|---|
| 1973 |  | 
|---|
| 1974 | 296 ) msgTxt=\ | 
|---|
| 1975 | "Usage:\n"\ | 
|---|
| 1976 | "  %s Device {\"DiskDesc[;DiskDesc...]\" | -F DescFile} [-a] [-r]\n"\ | 
|---|
| 1977 | "    [-v {yes | no}] [-N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 1978 | ;; | 
|---|
| 1979 |  | 
|---|
| 1980 | 298 ) msgTxt=\ | 
|---|
| 1981 | "Usage: %s Device [-d | -F | -m] [-P PoolName] [-q]" | 
|---|
| 1982 | ;; | 
|---|
| 1983 |  | 
|---|
| 1984 | 299 ) msgTxt=\ | 
|---|
| 1985 | "Usage: %s Device [-i] [-u BlkUtilPct] [-v]" | 
|---|
| 1986 | ;; | 
|---|
| 1987 |  | 
|---|
| 1988 | 300 ) msgTxt=\ | 
|---|
| 1989 | "Usage:\n"\ | 
|---|
| 1990 | "  %s Device [-n | -y] [-v | -V] [-c | -o] [-t Directory]\n"\ | 
|---|
| 1991 | "    [-N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 1992 | ;; | 
|---|
| 1993 |  | 
|---|
| 1994 | 301 ) msgTxt=\ | 
|---|
| 1995 | "Usage:\n"\ | 
|---|
| 1996 | "   %s Device [-d \"DiskName[;DiskName...]\"] [-e] [-L]\n"\ | 
|---|
| 1997 | "      or\n"\ | 
|---|
| 1998 | "   %s Device [-d \"DiskName[;DiskName...]\"] {-m | -M}" | 
|---|
| 1999 | ;; | 
|---|
| 2000 |  | 
|---|
| 2001 | 302 ) msgTxt=\ | 
|---|
| 2002 | "Usage:\n"\ | 
|---|
| 2003 | "  %s Device {-m | -r | -b | -p | -R} [-P PoolName]\n"\ | 
|---|
| 2004 | "    [-N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 2005 | ;; | 
|---|
| 2006 |  | 
|---|
| 2007 | 303 ) msgTxt=\ | 
|---|
| 2008 | "Usage: %s [Device[ Device...]] | [-C ClusterName]" | 
|---|
| 2009 | ;; | 
|---|
| 2010 |  | 
|---|
| 2011 | 304 ) msgTxt=\ | 
|---|
| 2012 | "Usage: %s Device [Node]" | 
|---|
| 2013 | ;; | 
|---|
| 2014 |  | 
|---|
| 2015 | 305 ) msgTxt=\ | 
|---|
| 2016 | "%s: Mount point and device name cannot be equal: %s" | 
|---|
| 2017 | ;; | 
|---|
| 2018 |  | 
|---|
| 2019 | 306 ) msgTxt=\ | 
|---|
| 2020 | "%s: Interrupt received." | 
|---|
| 2021 | ;; | 
|---|
| 2022 |  | 
|---|
| 2023 | 307 ) msgTxt=\ | 
|---|
| 2024 | "%s: You must first generate an authentication key file. Run:\n"\ | 
|---|
| 2025 | "   mmauth genkey new" | 
|---|
| 2026 | ;; | 
|---|
| 2027 |  | 
|---|
| 2028 | 309 ) msgTxt=\ | 
|---|
| 2029 | "%s: The -i option failed. Changes will take effect after GPFS is restarted." | 
|---|
| 2030 | ;; | 
|---|
| 2031 |  | 
|---|
| 2032 | 310 ) msgTxt=\ | 
|---|
| 2033 | "%s: This GPFS cluster contains file systems. You cannot delete the last node." | 
|---|
| 2034 | ;; | 
|---|
| 2035 |  | 
|---|
| 2036 | 311 ) msgTxt=\ | 
|---|
| 2037 | "%s: Attention: Failed to remove node-specific changes." | 
|---|
| 2038 | ;; | 
|---|
| 2039 |  | 
|---|
| 2040 | 312 ) msgTxt=\ | 
|---|
| 2041 | "%s: %s command cannot be executed.  Either none of the\n"\ | 
|---|
| 2042 | "  nodes in the cluster are reachable, or GPFS is down on all of the nodes." | 
|---|
| 2043 | ;; | 
|---|
| 2044 |  | 
|---|
| 2045 | 313 ) msgTxt=\ | 
|---|
| 2046 | "%s: Attention: The file system may no longer be properly balanced" | 
|---|
| 2047 | ;; | 
|---|
| 2048 |  | 
|---|
| 2049 | 314 ) msgTxt=\ | 
|---|
| 2050 | "%s: To change the authentication key for the local cluster, run:\n"\ | 
|---|
| 2051 | "   mmauth genkey" | 
|---|
| 2052 | ;; | 
|---|
| 2053 |  | 
|---|
| 2054 | 315 ) msgTxt=\ | 
|---|
| 2055 | "%s: %s not found in file system %s" | 
|---|
| 2056 | ;; | 
|---|
| 2057 |  | 
|---|
| 2058 | 316 ) msgTxt=\ | 
|---|
| 2059 | "%s: Remote cluster %s is already defined." | 
|---|
| 2060 | ;; | 
|---|
| 2061 |  | 
|---|
| 2062 | 317 ) msgTxt=\ | 
|---|
| 2063 | "%s: File system %s from cluster %s is already defined." | 
|---|
| 2064 | ;; | 
|---|
| 2065 |  | 
|---|
| 2066 | 318 ) msgTxt=\ | 
|---|
| 2067 | "%s: %s command failed.  Only %s changed." | 
|---|
| 2068 | ;; | 
|---|
| 2069 |  | 
|---|
| 2070 | 319 ) msgTxt=\ | 
|---|
| 2071 | " The volume group %s exists, but partition\n"\ | 
|---|
| 2072 | "information cannot be determined.  Perhaps it needs to be varied on?\n" | 
|---|
| 2073 | ;; | 
|---|
| 2074 |  | 
|---|
| 2075 | 321 ) msgTxt=\ | 
|---|
| 2076 | "%s: %s does not exist or failed; automount mounting may not work." | 
|---|
| 2077 | ;; | 
|---|
| 2078 |  | 
|---|
| 2079 | 322 ) msgTxt=\ | 
|---|
| 2080 | "%s: The command must run on a node that is part of the cluster." | 
|---|
| 2081 | ;; | 
|---|
| 2082 |  | 
|---|
| 2083 | 323 ) msgTxt=\ | 
|---|
| 2084 | "%s: Command completed: No changes made" | 
|---|
| 2085 | ;; | 
|---|
| 2086 |  | 
|---|
| 2087 | 324 ) msgTxt=\ | 
|---|
| 2088 | "%s: Permission failure.  The command requires root authority to execute." | 
|---|
| 2089 | ;; | 
|---|
| 2090 |  | 
|---|
| 2091 | 328 ) msgTxt=\ | 
|---|
| 2092 | "%s: File %s does not contain node names." | 
|---|
| 2093 | ;; | 
|---|
| 2094 |  | 
|---|
| 2095 | 329 ) msgTxt=\ | 
|---|
| 2096 | "%s: File %s does not contain data." | 
|---|
| 2097 | ;; | 
|---|
| 2098 |  | 
|---|
| 2099 | 330 ) msgTxt=\ | 
|---|
| 2100 | "%s: Failed to obtain Kerberos credentials; ksrvtgt %s command rc=%s. Continuing." | 
|---|
| 2101 | ;; | 
|---|
| 2102 |  | 
|---|
| 2103 | 334 ) msgTxt=\ | 
|---|
| 2104 | "Usage:\n"\ | 
|---|
| 2105 | "   %s {Device | all} [-a] [-A] [-B] [-d] [-D] [-E] [-f] [-F] [-i]\n"\ | 
|---|
| 2106 | "                         [-I] [-j] [-k] [-K] [-m] [-M] [-n] [-o] [-P]\n"\ | 
|---|
| 2107 | "                         [-Q] [-r] [-R] [-s] [-S] [-T] [-u] [-V] [-z]\n" | 
|---|
| 2108 | ;; | 
|---|
| 2109 |  | 
|---|
| 2110 | 337 ) msgTxt=\ | 
|---|
| 2111 | "%s:  Unable to determine the local device name for disk %s on node %s." | 
|---|
| 2112 | ;; | 
|---|
| 2113 |  | 
|---|
| 2114 | 338 ) msgTxt=\ | 
|---|
| 2115 | "%s:  Unknown GPFS execution environment %s" | 
|---|
| 2116 | ;; | 
|---|
| 2117 |  | 
|---|
| 2118 | 340 ) msgTxt=\ | 
|---|
| 2119 | "%s:  %s cannot be reached." | 
|---|
| 2120 | ;; | 
|---|
| 2121 |  | 
|---|
| 2122 | 341 ) msgTxt=\ | 
|---|
| 2123 | "%s:  Attention:  Unable to retrieve GPFS cluster files from node %s" | 
|---|
| 2124 | ;; | 
|---|
| 2125 |  | 
|---|
| 2126 | 342 ) msgTxt=\ | 
|---|
| 2127 | "%s:  Unable to retrieve GPFS cluster files from node %s" | 
|---|
| 2128 | ;; | 
|---|
| 2129 |  | 
|---|
| 2130 | 343 ) msgTxt=\ | 
|---|
| 2131 | "Usage:\n"\ | 
|---|
| 2132 | "  %s -N {NodeDesc[,NodeDesc...] | NodeFile}\n"\ | 
|---|
| 2133 | "              -p PrimaryServer [-s SecondaryServer]\n"\ | 
|---|
| 2134 | "              [-r RemoteShellCommand] [-R RemoteFileCopyCommand]\n"\ | 
|---|
| 2135 | "              [-C ClusterName] [-U DomainName] [-A] [-c ConfigFile]" | 
|---|
| 2136 | ;; | 
|---|
| 2137 |  | 
|---|
| 2138 | 344 ) msgTxt=\ | 
|---|
| 2139 | "%s:  Run the %s command until successful." | 
|---|
| 2140 | ;; | 
|---|
| 2141 |  | 
|---|
| 2142 | 345 ) msgTxt=\ | 
|---|
| 2143 | "%s: No nodes were found that matched the input specification." | 
|---|
| 2144 | ;; | 
|---|
| 2145 |  | 
|---|
| 2146 | 346 ) msgTxt=\ | 
|---|
| 2147 | "%s:  The same node was specified for both the primary and the secondary server." | 
|---|
| 2148 | ;; | 
|---|
| 2149 |  | 
|---|
| 2150 | 347 ) msgTxt=\ | 
|---|
| 2151 | "%s:  Node %s is specified more than once." | 
|---|
| 2152 | ;; | 
|---|
| 2153 |  | 
|---|
| 2154 | 348 ) msgTxt=\ | 
|---|
| 2155 | "%s:  Node %s was not added to the cluster.\n"\ | 
|---|
| 2156 | "   The node appears to already belong to a GPFS cluster." | 
|---|
| 2157 | ;; | 
|---|
| 2158 |  | 
|---|
| 2159 | 349 ) msgTxt=\ | 
|---|
| 2160 | "%s:  The level of GPFS on node %s does not support the requested action." | 
|---|
| 2161 | ;; | 
|---|
| 2162 |  | 
|---|
| 2163 | 350 ) msgTxt=\ | 
|---|
| 2164 | "%s:  Make sure that the following nodes are available: %s" | 
|---|
| 2165 | ;; | 
|---|
| 2166 |  | 
|---|
| 2167 | 351 ) msgTxt=\ | 
|---|
| 2168 | "%s:  Removing GPFS cluster files from the nodes in the cluster . . . " | 
|---|
| 2169 | ;; | 
|---|
| 2170 |  | 
|---|
| 2171 | 352 ) msgTxt=\ | 
|---|
| 2172 | "%s:  %s is not a member of this cluster." | 
|---|
| 2173 | ;; | 
|---|
| 2174 |  | 
|---|
| 2175 | 353 ) msgTxt=\ | 
|---|
| 2176 | "%s:  The following nodes could not be added to the GPFS cluster:%s\n"\ | 
|---|
| 2177 | "   Correct the problems and use the mmaddnode command to add these nodes\n"\ | 
|---|
| 2178 | "   to the cluster." | 
|---|
| 2179 | ;; | 
|---|
| 2180 |  | 
|---|
| 2181 | 354 ) msgTxt=\ | 
|---|
| 2182 | "%s:  Information cannot be displayed.  Either none of the\n"\ | 
|---|
| 2183 | "  nodes in the cluster are reachable, or GPFS is down on all of the nodes." | 
|---|
| 2184 | ;; | 
|---|
| 2185 |  | 
|---|
| 2186 | 355 ) msgTxt=\ | 
|---|
| 2187 | "Usage:\n"\ | 
|---|
| 2188 | "  %s -N {NodeDesc[,NodeDesc...] | NodeFile}" | 
|---|
| 2189 | ;; | 
|---|
| 2190 |  | 
|---|
| 2191 | 356 ) msgTxt=\ | 
|---|
| 2192 | "Usage:\n"\ | 
|---|
| 2193 | "  %s {-a | -N {Node[,Node...] | NodeFile | NodeClass}}" | 
|---|
| 2194 | ;; | 
|---|
| 2195 |  | 
|---|
| 2196 | 357 ) msgTxt=\ | 
|---|
| 2197 | "Usage:  %s " | 
|---|
| 2198 | ;; | 
|---|
| 2199 |  | 
|---|
| 2200 | 358 ) msgTxt=\ | 
|---|
| 2201 | "Usage:  %s Device [-L]" | 
|---|
| 2202 | ;; | 
|---|
| 2203 |  | 
|---|
| 2204 | 359 ) msgTxt=\ | 
|---|
| 2205 | "Usage:  %s {[-p PrimaryServer] [-s SecondaryServer]}\n"\ | 
|---|
| 2206 | "           or\n"\ | 
|---|
| 2207 | "         %s -p LATEST\n"\ | 
|---|
| 2208 | "           or\n"\ | 
|---|
| 2209 | "         %s {[-r RemoteShellCommand] [-R RemoteFileCopyCommand]}\n"\ | 
|---|
| 2210 | "           or\n"\ | 
|---|
| 2211 | "         %s -C ClusterName\n"\ | 
|---|
| 2212 | "           or\n"\ | 
|---|
| 2213 | "         %s -N {NodeDesc[,NodeDesc...] | NodeFile}" | 
|---|
| 2214 | ;; | 
|---|
| 2215 |  | 
|---|
| 2216 | 360 ) msgTxt=\ | 
|---|
| 2217 | "%s: Disk %s is the only disk in file system %s.\n"\ | 
|---|
| 2218 | "You cannot replace a disk when it is the only remaining disk in the file system." | 
|---|
| 2219 | ;; | 
|---|
| 2220 |  | 
|---|
| 2221 | 361 ) msgTxt=\ | 
|---|
| 2222 | "Usage:  %s Device PolicyFilename [-t DescriptiveName] [-I {yes|test}]" | 
|---|
| 2223 | ;; | 
|---|
| 2224 |  | 
|---|
| 2225 | 367 ) msgTxt=\ | 
|---|
| 2226 | "%s: There are no available nodes on which to run the command." | 
|---|
| 2227 | ;; | 
|---|
| 2228 |  | 
|---|
| 2229 | 370 ) msgTxt=\ | 
|---|
| 2230 | "Usage:  %s" | 
|---|
| 2231 | ;; | 
|---|
| 2232 |  | 
|---|
| 2233 | 371 ) msgTxt=\ | 
|---|
| 2234 | "Usage:  %s Device Directory" | 
|---|
| 2235 | ;; | 
|---|
| 2236 |  | 
|---|
| 2237 | 372 ) msgTxt=\ | 
|---|
| 2238 | "Usage:  %s Device Directory" | 
|---|
| 2239 | ;; | 
|---|
| 2240 |  | 
|---|
| 2241 | 374 ) msgTxt=\ | 
|---|
| 2242 | "Usage:\n"\ | 
|---|
| 2243 | "  %s [-f] [-a | -N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 2244 | ;; | 
|---|
| 2245 |  | 
|---|
| 2246 | 375 ) msgTxt=\ | 
|---|
| 2247 | "%s:  %s cannot be used with attribute %s" | 
|---|
| 2248 | ;; | 
|---|
| 2249 |  | 
|---|
| 2250 | 376 ) msgTxt=\ | 
|---|
| 2251 | "%s:  Command is not supported in the %s environment." | 
|---|
| 2252 | ;; | 
|---|
| 2253 |  | 
|---|
| 2254 | 377 ) msgTxt=\ | 
|---|
| 2255 | "%s:  Command failed on nodes: %s" | 
|---|
| 2256 | ;; | 
|---|
| 2257 |  | 
|---|
| 2258 | 378 ) msgTxt=\ | 
|---|
| 2259 | "%s:  Cannot determine basic environment information.\n"\ | 
|---|
| 2260 | "   Not enough nodes are available." | 
|---|
| 2261 | ;; | 
|---|
| 2262 |  | 
|---|
| 2263 | 379 ) msgTxt=\ | 
|---|
| 2264 | "%s:  Error retrieving data from %s to %s." | 
|---|
| 2265 | ;; | 
|---|
| 2266 |  | 
|---|
| 2267 | 380 ) msgTxt=\ | 
|---|
| 2268 | "%s:  The GPFS cluster data on %s is back level." | 
|---|
| 2269 | ;; | 
|---|
| 2270 |  | 
|---|
| 2271 | 381 ) msgTxt=\ | 
|---|
| 2272 | "%s:  The commit process failed." | 
|---|
| 2273 | ;; | 
|---|
| 2274 |  | 
|---|
| 2275 | 382 ) msgTxt=\ | 
|---|
| 2276 | "%s:  The GPFS cluster configuration data on %s\n"\ | 
|---|
| 2277 | "is different from the data on %s." | 
|---|
| 2278 | ;; | 
|---|
| 2279 |  | 
|---|
| 2280 | 383 ) msgTxt=\ | 
|---|
| 2281 | "%s:  Failed to create a backup copy of the GPFS cluster data on %s." | 
|---|
| 2282 | ;; | 
|---|
| 2283 |  | 
|---|
| 2284 | 384 ) msgTxt=\ | 
|---|
| 2285 | "%s: GPFS cluster configuration server node %s cannot be removed." | 
|---|
| 2286 | ;; | 
|---|
| 2287 |  | 
|---|
| 2288 | 385 ) msgTxt=\ | 
|---|
| 2289 | "Usage:\n"\ | 
|---|
| 2290 | "   %s add Device -f RemoteDevice -C RemoteClusterName\n"\ | 
|---|
| 2291 | "                 -T Mountpoint [-o MountOptions] [-A {yes | no | automount}]\n"\ | 
|---|
| 2292 | "      or\n"\ | 
|---|
| 2293 | "   %s update Device [-f RemoteDevice] [-C RemoteClusterName]\n"\ | 
|---|
| 2294 | "                [-T Mountpoint] [-o MountOptions] [-A {yes | no | automount}]\n"\ | 
|---|
| 2295 | "      or\n"\ | 
|---|
| 2296 | "   %s delete {Device | all | -C RemoteClusterName}\n"\ | 
|---|
| 2297 | "      or\n"\ | 
|---|
| 2298 | "   %s show   [Device | all | -C RemoteClusterName]\n" | 
|---|
| 2299 | ;; | 
|---|
| 2300 |  | 
|---|
| 2301 | 386 ) msgTxt=\ | 
|---|
| 2302 | "%s:  Error found while checking disk descriptor %s" | 
|---|
| 2303 | ;; | 
|---|
| 2304 |  | 
|---|
| 2305 | 387 ) msgTxt=\ | 
|---|
| 2306 | "%s: %s quitting.  None of the specified nodes are valid." | 
|---|
| 2307 | ;; | 
|---|
| 2308 |  | 
|---|
| 2309 | 388 ) msgTxt=\ | 
|---|
| 2310 | "Usage:\n"\ | 
|---|
| 2311 | "   %s add RemoteClusterName -k KeyFile -n ContactNodes\n"\ | 
|---|
| 2312 | "      or\n"\ | 
|---|
| 2313 | "   %s update RemoteClusterName {[-C NewClusterName] [-k KeyFile] [-n ContactNodes]}\n"\ | 
|---|
| 2314 | "      or\n"\ | 
|---|
| 2315 | "   %s delete {RemoteClusterName | all}\n"\ | 
|---|
| 2316 | "      or\n"\ | 
|---|
| 2317 | "   %s show [RemoteClusterName | all]\n" | 
|---|
| 2318 | ;; | 
|---|
| 2319 |  | 
|---|
| 2320 | 389 ) msgTxt=\ | 
|---|
| 2321 | "%s: Command failed.  Examine previous error messages to determine cause." | 
|---|
| 2322 | ;; | 
|---|
| 2323 |  | 
|---|
| 2324 | 390 ) msgTxt=\ | 
|---|
| 2325 | "Usage:\n"\ | 
|---|
| 2326 | "  %s {Device | DefaultMountPoint | all | all_local | all_remote} [-o MountOptions]\n"\ | 
|---|
| 2327 | "          [-a | -N {Node[,Node...] | NodeFile | NodeClass}]\n"\ | 
|---|
| 2328 | "      or\n"\ | 
|---|
| 2329 | "  %s Device MountPoint [-o MountOptions]\n"\ | 
|---|
| 2330 | "          [-a | -N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 2331 | ;; | 
|---|
| 2332 |  | 
|---|
| 2333 | 391 ) msgTxt=\ | 
|---|
| 2334 | "Usage:\n"\ | 
|---|
| 2335 | "  %s [-a | -N {Node[,Node...] | NodeFile | NodeClass}]\n"\ | 
|---|
| 2336 | "            [-E EnvVar=value...]" | 
|---|
| 2337 | ;; | 
|---|
| 2338 |  | 
|---|
| 2339 | 393 ) msgTxt=\ | 
|---|
| 2340 | "%s: The number of quorum nodes exceeds the maximum (%s) allowed." | 
|---|
| 2341 | ;; | 
|---|
| 2342 |  | 
|---|
| 2343 | 394 ) msgTxt=\ | 
|---|
| 2344 | "%s: Warning: The number of quorum nodes exceeds the suggested maximum (%s)." | 
|---|
| 2345 | ;; | 
|---|
| 2346 |  | 
|---|
| 2347 | 395 ) msgTxt=\ | 
|---|
| 2348 | "%s: Node %s is fenced out from disk %s." | 
|---|
| 2349 | ;; | 
|---|
| 2350 |  | 
|---|
| 2351 | 396 ) msgTxt=\ | 
|---|
| 2352 | "Usage:\n"\ | 
|---|
| 2353 | "  %s {Device | MountPoint | all | all_local | all_remote} [-f]\n"\ | 
|---|
| 2354 | "           [-a | -N {Node[,Node...] | NodeFile | NodeClass}]\n"\ | 
|---|
| 2355 | "      or\n"\ | 
|---|
| 2356 | "  %s Device -f -C {all_remote | ClusterName} [-N Node[,Node...]]" | 
|---|
| 2357 | ;; | 
|---|
| 2358 |  | 
|---|
| 2359 | 397 ) msgTxt=\ | 
|---|
| 2360 | "%s: Unable to find disk with NSD volume id %s." | 
|---|
| 2361 | ;; | 
|---|
| 2362 |  | 
|---|
| 2363 | 398 ) msgTxt=\ | 
|---|
| 2364 | "%s: GPFS was unable to obtain a lock from node %s." | 
|---|
| 2365 | ;; | 
|---|
| 2366 |  | 
|---|
| 2367 | 399 ) msgTxt=\ | 
|---|
| 2368 | "%s: Remount failed for file system %s. Error code %s." | 
|---|
| 2369 | ;; | 
|---|
| 2370 |  | 
|---|
| 2371 | 410 ) msgTxt=\ | 
|---|
| 2372 | "Usage:  %s -F DescFile [-v {yes | no}]\n" | 
|---|
| 2373 | ;; | 
|---|
| 2374 |  | 
|---|
| 2375 | 411 ) msgTxt=\ | 
|---|
| 2376 | "%s:  Failed while processing disk descriptor %s on node %s." | 
|---|
| 2377 | ;; | 
|---|
| 2378 |  | 
|---|
| 2379 | 412 ) msgTxt=\ | 
|---|
| 2380 | "%s:  Disk descriptor %s refers to an existing NSD %s" | 
|---|
| 2381 | ;; | 
|---|
| 2382 |  | 
|---|
| 2383 | 413 ) msgTxt=\ | 
|---|
| 2384 | "Usage:\n"\ | 
|---|
| 2385 | "   %s {\"DiskName[;DiskName...]\" | -F DiskFile}\n"\ | 
|---|
| 2386 | "      or\n"\ | 
|---|
| 2387 | "   %s -p NSDId [-N Node[,Node]]" | 
|---|
| 2388 | ;; | 
|---|
| 2389 |  | 
|---|
| 2390 | 415 ) msgTxt=\ | 
|---|
| 2391 | "%s:  Disk descriptor %s should refer to an existing NSD.\n"\ | 
|---|
| 2392 | "Use mmcrnsd to create the NSD." | 
|---|
| 2393 | ;; | 
|---|
| 2394 |  | 
|---|
| 2395 | 417 ) msgTxt=\ | 
|---|
| 2396 | "%s: Issue the command from a node that remains in the cluster." | 
|---|
| 2397 | ;; | 
|---|
| 2398 |  | 
|---|
| 2399 | 418 ) msgTxt=\ | 
|---|
| 2400 | "%s: No disks were found." | 
|---|
| 2401 | ;; | 
|---|
| 2402 |  | 
|---|
| 2403 | 419 ) msgTxt=\ | 
|---|
| 2404 | "Usage:  %s Device Directory [-c]" | 
|---|
| 2405 | ;; | 
|---|
| 2406 |  | 
|---|
| 2407 | 420 ) msgTxt=\ | 
|---|
| 2408 | "Usage:\n"\ | 
|---|
| 2409 | "   %s Mountpoint Device {\"DiskDesc[;DiskDesc...]\" | -F DescFile}\n"\ | 
|---|
| 2410 | "          [-A {yes | no | automount}] [-B BlockSize] [-D {posix | nfs4}]\n"\ | 
|---|
| 2411 | "          [-E {yes | no}] [-j {cluster | scatter}]\n"\ | 
|---|
| 2412 | "          [-k {posix | nfs4 | all}] [-K {no | whenpossible | always}]\n"\ | 
|---|
| 2413 | "          [-m DefaultMetadataReplicas] [-M MaxMetadataReplicas]\n"\ | 
|---|
| 2414 | "          [-n NumNodes] [-N NumInodes[:NumInodesToPreallocate]] [-Q {yes | no}]\n"\ | 
|---|
| 2415 | "          [-r DefaultDataReplicas] [-R MaxDataReplicas]\n"\ | 
|---|
| 2416 | "          [-S {yes | no}] [-v {yes | no}] [-z {yes | no}]\n" | 
|---|
| 2417 | ;; | 
|---|
| 2418 |  | 
|---|
| 2419 | 421 ) msgTxt=\ | 
|---|
| 2420 | "Usage:\n"\ | 
|---|
| 2421 | "   %s Device [-A {yes | no | automount}] [-D {posix | nfs4}] [-E {yes | no}]\n"\ | 
|---|
| 2422 | "                 [-F MaxNumInodes[:NumInodesToPreallocate]]\n"\ | 
|---|
| 2423 | "                 [-k {posix | nfs4 | all}] [-K {no | whenpossible | always}]\n"\ | 
|---|
| 2424 | "                 [-m DefaultMetadataReplicas] [-o MountOptions]\n"\ | 
|---|
| 2425 | "                 [-Q {yes | no}] [-r DefaultDataReplicas] [-S {yes | no}]\n"\ | 
|---|
| 2426 | "                 [-T Mountpoint] [-V] [-z {yes | no}]\n"\ | 
|---|
| 2427 | "      or\n"\ | 
|---|
| 2428 | "   %s Device [-W NewDeviceName]" | 
|---|
| 2429 | ;; | 
|---|
| 2430 |  | 
|---|
| 2431 | 422 ) msgTxt=\ | 
|---|
| 2432 | "%s:  Incorrect or missing remote shell command:  %s" | 
|---|
| 2433 | ;; | 
|---|
| 2434 |  | 
|---|
| 2435 | 423 ) msgTxt=\ | 
|---|
| 2436 | "%s:  Incorrect or missing remote file copy command:  %s" | 
|---|
| 2437 | ;; | 
|---|
| 2438 |  | 
|---|
| 2439 | 424 ) msgTxt=\ | 
|---|
| 2440 | "%s:  %s %s parameter must be an absolute pathname." | 
|---|
| 2441 | ;; | 
|---|
| 2442 |  | 
|---|
| 2443 | 425 ) msgTxt=\ | 
|---|
| 2444 | "Usage:\n"\ | 
|---|
| 2445 | "   %s {[-r RemoteShellCommand] [-R RemoteFileCopyCommand]} [-f]\n"\ | 
|---|
| 2446 | "      or\n"\ | 
|---|
| 2447 | "   %s -C ClusterName" | 
|---|
| 2448 | ;; | 
|---|
| 2449 |  | 
|---|
| 2450 | 428 ) msgTxt=\ | 
|---|
| 2451 | "Usage:\n"\ | 
|---|
| 2452 | "   %s [-a | -F | -f Device | -d \"DiskName[;DiskName...]\"]\n"\ | 
|---|
| 2453 | "           [-L | -m | -M | -X] [-v]" | 
|---|
| 2454 | ;; | 
|---|
| 2455 |  | 
|---|
| 2456 | 429 ) msgTxt=\ | 
|---|
| 2457 | "%s: Disk %s is of an unknown type." | 
|---|
| 2458 | ;; | 
|---|
| 2459 |  | 
|---|
| 2460 | 432 ) msgTxt=\ | 
|---|
| 2461 | "%s: Disk name %s is already registered for use by GPFS." | 
|---|
| 2462 | ;; | 
|---|
| 2463 |  | 
|---|
| 2464 | 433 ) msgTxt=\ | 
|---|
| 2465 | "%s:  Node %s is being used as a primary or backup NSD server." | 
|---|
| 2466 | ;; | 
|---|
| 2467 |  | 
|---|
| 2468 | 437 ) msgTxt=\ | 
|---|
| 2469 | "%s:  Processing continues without lock protection." | 
|---|
| 2470 | ;; | 
|---|
| 2471 |  | 
|---|
| 2472 | 438 ) msgTxt=\ | 
|---|
| 2473 | "Usage:  %s {\"DiskDesc[;DiskDesc...]\" | -F DescFile}\n" | 
|---|
| 2474 | ;; | 
|---|
| 2475 |  | 
|---|
| 2476 | 439 ) msgTxt=\ | 
|---|
| 2477 | "Usage: %s Device [-d] [-Q]" | 
|---|
| 2478 | ;; | 
|---|
| 2479 |  | 
|---|
| 2480 | 440 ) msgTxt=\ | 
|---|
| 2481 | "%s: Command was unable to obtain the lock for the GPFS system data.\n"\ | 
|---|
| 2482 | "    Unable to reach the holder of the lock %s.\n"\ | 
|---|
| 2483 | "    Check the preceding messages, if any.  Follow the procedure outlined\n"\ | 
|---|
| 2484 | "    in the GPFS Problem Determination Guide." | 
|---|
| 2485 | ;; | 
|---|
| 2486 |  | 
|---|
| 2487 | 441 ) msgTxt=\ | 
|---|
| 2488 | "vpath disk %s is not recognized as an IBM SDD device.\n" | 
|---|
| 2489 | ;; | 
|---|
| 2490 |  | 
|---|
| 2491 | 448 ) msgTxt=\ | 
|---|
| 2492 | "Usage:  %s " | 
|---|
| 2493 | ;; | 
|---|
| 2494 |  | 
|---|
| 2495 | 449 ) msgTxt=\ | 
|---|
| 2496 | "Usage:\n"\ | 
|---|
| 2497 | "  %s [-L] [-s] [-v] [-a | -N {Node[,Node...] | NodeFile | NodeClass}]" | 
|---|
| 2498 | ;; | 
|---|
| 2499 |  | 
|---|
| 2500 | 450 ) msgTxt=\ | 
|---|
| 2501 | "%s: Disk %s belongs to vpath %s.\n" | 
|---|
| 2502 | ;; | 
|---|
| 2503 |  | 
|---|
| 2504 | 452 ) msgTxt=\ | 
|---|
| 2505 | "Usage:\n"\ | 
|---|
| 2506 | "  %s [-u User | -g Group | -j Fileset] [-v | -q] [-e]\n"\ | 
|---|
| 2507 | "              [-C ClusterName] [Device1 Device2 ...]\n"\ | 
|---|
| 2508 | "    or\n"\ | 
|---|
| 2509 | "  %s -d {-u | -g | -j} [-C ClusterName] [Device1 Device2 ...]\n" | 
|---|
| 2510 | ;; | 
|---|
| 2511 |  | 
|---|
| 2512 | 454 ) msgTxt=\ | 
|---|
| 2513 | "%s: Failed to stat %s." | 
|---|
| 2514 | ;; | 
|---|
| 2515 |  | 
|---|
| 2516 | 455 ) msgTxt=\ | 
|---|
| 2517 | "%s: %s is not a GPFS file system object." | 
|---|
| 2518 | ;; | 
|---|
| 2519 |  | 
|---|
| 2520 | 456 ) msgTxt=\ | 
|---|
| 2521 | "%s: The policy file cannot be determined." | 
|---|
| 2522 | ;; | 
|---|
| 2523 |  | 
|---|
| 2524 | 457 ) msgTxt=\ | 
|---|
| 2525 | "Usage:\n"\ | 
|---|
| 2526 | "   %s {Device|Directory} [-P PolicyFile] [-I {yes|defer|test}]\n"\ | 
|---|
| 2527 | "                 [-L n] [-D yyyy-mm-dd[@hh:mm[:ss]]] [-s WorkDirectory]\n" | 
|---|
| 2528 | ;; | 
|---|
| 2529 |  | 
|---|
| 2530 | 458 ) msgTxt=\ | 
|---|
| 2531 | "Usage:\n"\ | 
|---|
| 2532 | "   %s Device -n ControlFile [-t {full | incremental}] [-s SortDir]\n"\ | 
|---|
| 2533 | "      or\n"\ | 
|---|
| 2534 | "   %s Device -R [-s SortDir]\n" | 
|---|
| 2535 | ;; | 
|---|
| 2536 |  | 
|---|
| 2537 | 459 ) msgTxt=\ | 
|---|
| 2538 | "Usage:  %s Device {\"FileName[,FileName...]\" | -f FileNameFile}\n" | 
|---|
| 2539 | ;; | 
|---|
| 2540 |  | 
|---|
| 2541 | 460 ) msgTxt=\ | 
|---|
| 2542 | "%s:  \"%s\" must be a absolute path name." | 
|---|
| 2543 | ;; | 
|---|
| 2544 |  | 
|---|
| 2545 | 461 ) msgTxt=\ | 
|---|
| 2546 | "%s: Device with major/minor numbers %s and %s already exists." | 
|---|
| 2547 | ;; | 
|---|
| 2548 |  | 
|---|
| 2549 | 462 ) msgTxt=\ | 
|---|
| 2550 | "%s:  %s was not created by GPFS or could not be refreshed." | 
|---|
| 2551 | ;; | 
|---|
| 2552 |  | 
|---|
| 2553 | 469 ) msgTxt=\ | 
|---|
| 2554 | "%s:  The %s option is not allowed for remote file systems." | 
|---|
| 2555 | ;; | 
|---|
| 2556 |  | 
|---|
| 2557 | 470 ) msgTxt=\ | 
|---|
| 2558 | "%s:  There are no available free disks.\n"\ | 
|---|
| 2559 | "Disks must be prepared prior to invoking %s.\n"\ | 
|---|
| 2560 | "Define the disks using the %s command." | 
|---|
| 2561 | ;; | 
|---|
| 2562 |  | 
|---|
| 2563 | 472 ) msgTxt=\ | 
|---|
| 2564 | "%s:  File system %s belongs to cluster %s.\n"\ | 
|---|
| 2565 | "    The %s option is not allowed for remote file systems." | 
|---|
| 2566 | ;; | 
|---|
| 2567 |  | 
|---|
| 2568 | 474 ) msgTxt=\ | 
|---|
| 2569 | "%s:  %s not active on nodes: %s" | 
|---|
| 2570 | ;; | 
|---|
| 2571 |  | 
|---|
| 2572 | 476 ) msgTxt=\ | 
|---|
| 2573 | "%s: IP aliasing is not supported (%s).  Specify the main device." | 
|---|
| 2574 | ;; | 
|---|
| 2575 |  | 
|---|
| 2576 | 481 ) msgTxt=\ | 
|---|
| 2577 | "%s: The requested disks are not known to GPFS." | 
|---|
| 2578 | ;; | 
|---|
| 2579 |  | 
|---|
| 2580 | 483 ) msgTxt=\ | 
|---|
| 2581 | "%s:  %s is not a valid cipher list." | 
|---|
| 2582 | ;; | 
|---|
| 2583 |  | 
|---|
| 2584 | 484 ) msgTxt=\ | 
|---|
| 2585 | "Usage:\n"\ | 
|---|
| 2586 | "   %s Device {suspend | resume}\n"\ | 
|---|
| 2587 | "      or\n"\ | 
|---|
| 2588 | "   %s Device {exclude | include}\n"\ | 
|---|
| 2589 | "                  {-d \"DiskName[;DiskName...]\" | -F DiskFile | -G FailureGroup}\n"\ | 
|---|
| 2590 | "      or\n"\ | 
|---|
| 2591 | "   %s Device syncFSconfig\n"\ | 
|---|
| 2592 | "                  {-n RemoteNodesFile | -C RemoteCluster} [-S SpecFile]\n" | 
|---|
| 2593 | ;; | 
|---|
| 2594 |  | 
|---|
| 2595 | 485 ) msgTxt=\ | 
|---|
| 2596 | "%s: Disk %s belongs to file system %s." | 
|---|
| 2597 | ;; | 
|---|
| 2598 |  | 
|---|
| 2599 | 486 ) msgTxt=\ | 
|---|
| 2600 | "%s: The following disks are not known to GPFS:\n%s" | 
|---|
| 2601 | ;; | 
|---|
| 2602 |  | 
|---|
| 2603 | 487 ) msgTxt=\ | 
|---|
| 2604 | "%s: No disks were specified that could be deleted." | 
|---|
| 2605 | ;; | 
|---|
| 2606 |  | 
|---|
| 2607 | 488 ) msgTxt=\ | 
|---|
| 2608 | "%s: Disk %s has been removed from the GPFS cluster\n"\ | 
|---|
| 2609 | "          configuration data but the NSD volume id was not erased from\n"\ | 
|---|
| 2610 | "          the disk.  To remove the NSD volume id, issue\n"\ | 
|---|
| 2611 | "             mmdelnsd -p %s" | 
|---|
| 2612 | ;; | 
|---|
| 2613 |  | 
|---|
| 2614 | 489 ) msgTxt=\ | 
|---|
| 2615 | "%s:  Disk %s has been removed from the GPFS cluster data\n"\ | 
|---|
| 2616 | "          configuration data but the NSD volume id was not erased from\n"\ | 
|---|
| 2617 | "          the disk.  To remove the NSD volume id, issue\n"\ | 
|---|
| 2618 | "             mmdelnsd -p %s -N %s" | 
|---|
| 2619 | ;; | 
|---|
| 2620 |  | 
|---|
| 2621 | 491 ) msgTxt=\ | 
|---|
| 2622 | "%s: Disk %s is not assigned a primary NSD server node." | 
|---|
| 2623 | ;; | 
|---|
| 2624 |  | 
|---|
| 2625 | 492 ) msgTxt=\ | 
|---|
| 2626 | "%s: The primary and backup NSD servers must be different nodes." | 
|---|
| 2627 | ;; | 
|---|
| 2628 |  | 
|---|
| 2629 | 498 ) msgTxt=\ | 
|---|
| 2630 | "%s: Cannot handle multiple interfaces for host %s." | 
|---|
| 2631 | ;; | 
|---|
| 2632 |  | 
|---|
| 2633 | 499 ) msgTxt=\ | 
|---|
| 2634 | "%s: Unexpected output from the 'host -t a %s' command:" | 
|---|
| 2635 | ;; | 
|---|
| 2636 |  | 
|---|
| 2637 | 500 ) msgTxt=\ | 
|---|
| 2638 | "%s: Host %s not found." | 
|---|
| 2639 | ;; | 
|---|
| 2640 |  | 
|---|
| 2641 | 505 ) msgTxt=\ | 
|---|
| 2642 | "%s: Disk name %s is not allowed.\n"\ | 
|---|
| 2643 | "Names beginning with gpfs are reserved for use by GPFS." | 
|---|
| 2644 | ;; | 
|---|
| 2645 |  | 
|---|
| 2646 | 507 ) msgTxt=\ | 
|---|
| 2647 | "%s: File %s not found.\n"\ | 
|---|
| 2648 | "   Recover the file, or generate and commit a new key using mmauth genkey." | 
|---|
| 2649 | ;; | 
|---|
| 2650 |  | 
|---|
| 2651 | 508 ) msgTxt=\ | 
|---|
| 2652 | "%s: Disk %s is too large." | 
|---|
| 2653 | ;; | 
|---|
| 2654 |  | 
|---|
| 2655 | 509 ) msgTxt=\ | 
|---|
| 2656 | "%s: Unexpected error obtaining the local environment update lock." | 
|---|
| 2657 | ;; | 
|---|
| 2658 |  | 
|---|
| 2659 | 510 ) msgTxt=\ | 
|---|
| 2660 | "%s: Local update lock is busy." | 
|---|
| 2661 | ;; | 
|---|
| 2662 |  | 
|---|
| 2663 | 511 ) msgTxt=\ | 
|---|
| 2664 | "%s: Failed to obtain the local environment update lock." | 
|---|
| 2665 | ;; | 
|---|
| 2666 |  | 
|---|
| 2667 | 513 ) msgTxt=\ | 
|---|
| 2668 | "Usage:\n"\ | 
|---|
| 2669 | "   %s Device FilesetName [-t Comment]\n" | 
|---|
| 2670 | ;; | 
|---|
| 2671 |  | 
|---|
| 2672 | 514 ) msgTxt=\ | 
|---|
| 2673 | "Usage:\n"\ | 
|---|
| 2674 | "   %s Device {FilesetName | -J JunctionPath}\n"\ | 
|---|
| 2675 | "                      {[-j NewFileSetName] [-t Comment]}\n" | 
|---|
| 2676 | ;; | 
|---|
| 2677 |  | 
|---|
| 2678 | 515 ) msgTxt=\ | 
|---|
| 2679 | "Usage:\n"\ | 
|---|
| 2680 | "   %s Device FilesetName [-J JunctionPath]\n" | 
|---|
| 2681 | ;; | 
|---|
| 2682 |  | 
|---|
| 2683 | 516 ) msgTxt=\ | 
|---|
| 2684 | "Usage:\n"\ | 
|---|
| 2685 | "   %s Device {FilesetName | -J JunctionPath} [-f]\n" | 
|---|
| 2686 | ;; | 
|---|
| 2687 |  | 
|---|
| 2688 | 517 ) msgTxt=\ | 
|---|
| 2689 | "Usage:\n"\ | 
|---|
| 2690 | "   %s Device FilesetName [-f]\n" | 
|---|
| 2691 | ;; | 
|---|
| 2692 |  | 
|---|
| 2693 | 518 ) msgTxt=\ | 
|---|
| 2694 | "Usage:\n"\ | 
|---|
| 2695 | "   %s Device\n"\ | 
|---|
| 2696 | "         [[Fileset[,Fileset...]] [-J Junction[,Junction...]] | -F FileName]\n"\ | 
|---|
| 2697 | "         [-L] [-d] [-i]\n" | 
|---|
| 2698 | ;; | 
|---|
| 2699 |  | 
|---|
| 2700 | 520 ) msgTxt=\ | 
|---|
| 2701 | "%s: %s: Volume group %s has been varied on." | 
|---|
| 2702 | ;; | 
|---|
| 2703 |  | 
|---|
| 2704 | 523 ) msgTxt=\ | 
|---|
| 2705 | "%s: Permission denied for disk %s" | 
|---|
| 2706 | ;; | 
|---|
| 2707 |  | 
|---|
| 2708 | 524 ) msgTxt=\ | 
|---|
| 2709 | "%s: Disk %s was not found." | 
|---|
| 2710 | ;; | 
|---|
| 2711 |  | 
|---|
| 2712 | 525 ) msgTxt=\ | 
|---|
| 2713 | "%s: I/O error on %s" | 
|---|
| 2714 | ;; | 
|---|
| 2715 |  | 
|---|
| 2716 | 526 ) msgTxt=\ | 
|---|
| 2717 | "%s: %s is not a valid logical volume." | 
|---|
| 2718 | ;; | 
|---|
| 2719 |  | 
|---|
| 2720 | 528 ) msgTxt=\ | 
|---|
| 2721 | "%s: Disk %s belongs to back-level file system %s\n"\ | 
|---|
| 2722 | "    or the state of the disk is not ready.\n"\ | 
|---|
| 2723 | "    Use mmchfs -V to convert the file system to the latest format.\n"\ | 
|---|
| 2724 | "    Use mmchdisk to change the state of a disk." | 
|---|
| 2725 | ;; | 
|---|
| 2726 |  | 
|---|
| 2727 | 529 ) msgTxt=\ | 
|---|
| 2728 | "%s: Failed while processing disk %s" | 
|---|
| 2729 | ;; | 
|---|
| 2730 |  | 
|---|
| 2731 | 530 ) msgTxt=\ | 
|---|
| 2732 | "%s: Device %s already exists on node %s" | 
|---|
| 2733 | ;; | 
|---|
| 2734 |  | 
|---|
| 2735 | 531 ) msgTxt=\ | 
|---|
| 2736 | "%s: Disk %s has no space for the quorum data structures.\n"\ | 
|---|
| 2737 | "    Specify a different disk as tiebreaker disk." | 
|---|
| 2738 | ;; | 
|---|
| 2739 |  | 
|---|
| 2740 | 532 ) msgTxt=\ | 
|---|
| 2741 | "%s: Disk %s (pvid %s) is not known on node %s" | 
|---|
| 2742 | ;; | 
|---|
| 2743 |  | 
|---|
| 2744 | 533 ) msgTxt=\ | 
|---|
| 2745 | "%s: Import of volume group %s on node %s failed." | 
|---|
| 2746 | ;; | 
|---|
| 2747 |  | 
|---|
| 2748 | 534 ) msgTxt=\ | 
|---|
| 2749 | "%s: Volume group %s is not known on node %s." | 
|---|
| 2750 | ;; | 
|---|
| 2751 |  | 
|---|
| 2752 | 535 ) msgTxt=\ | 
|---|
| 2753 | "%s: %s: Unable to varyon volume group %s." | 
|---|
| 2754 | ;; | 
|---|
| 2755 |  | 
|---|
| 2756 | 536 ) msgTxt=\ | 
|---|
| 2757 | "%s: None of the quorum nodes can be reached." | 
|---|
| 2758 | ;; | 
|---|
| 2759 |  | 
|---|
| 2760 | 537 ) msgTxt=\ | 
|---|
| 2761 | "%s: The descriptor file contains more than one descriptor." | 
|---|
| 2762 | ;; | 
|---|
| 2763 |  | 
|---|
| 2764 | 538 ) msgTxt=\ | 
|---|
| 2765 | "%s: The descriptor file contains no descriptor." | 
|---|
| 2766 | ;; | 
|---|
| 2767 |  | 
|---|
| 2768 | 539 ) msgTxt=\ | 
|---|
| 2769 | "%s: Failed validating disk %s. Error code %s." | 
|---|
| 2770 | ;; | 
|---|
| 2771 |  | 
|---|
| 2772 | 540 ) msgTxt=\ | 
|---|
| 2773 | "Usage:\n"\ | 
|---|
| 2774 | "   %s {Device | all | all_local | all_remote} [-L]\n"\ | 
|---|
| 2775 | "                [-C {all | all_remote | ClusterName[,ClusterName...]}]" | 
|---|
| 2776 | ;; | 
|---|
| 2777 |  | 
|---|
| 2778 | 547 ) msgTxt=\ | 
|---|
| 2779 | "%s: Skipping disk %s on node %s." | 
|---|
| 2780 | ;; | 
|---|
| 2781 |  | 
|---|
| 2782 | 548 ) msgTxt=\ | 
|---|
| 2783 | "%s: Name %s is not allowed.\n"\ | 
|---|
| 2784 | "It is longer than the maximum allowable length (%s)." | 
|---|
| 2785 | ;; | 
|---|
| 2786 |  | 
|---|
| 2787 | 549 ) msgTxt=\ | 
|---|
| 2788 | "%s: mmfskxload:  The format of the GPFS kernel extension\n"\ | 
|---|
| 2789 | "is not correct for this version of AIX." | 
|---|
| 2790 | ;; | 
|---|
| 2791 |  | 
|---|
| 2792 | 550 ) msgTxt=\ | 
|---|
| 2793 | "%s: %s does not resolve to a directory in %s.\n"\ | 
|---|
| 2794 | "    The junction must be within the specified file system." | 
|---|
| 2795 | ;; | 
|---|
| 2796 |  | 
|---|
| 2797 | 551 ) msgTxt=\ | 
|---|
| 2798 | "%s: Name %s is not allowed." | 
|---|
| 2799 | ;; | 
|---|
| 2800 |  | 
|---|
| 2801 | 552 ) msgTxt=\ | 
|---|
| 2802 | "%s: File system %s is not mounted." | 
|---|
| 2803 | ;; | 
|---|
| 2804 |  | 
|---|
| 2805 | 555 ) msgTxt=\ | 
|---|
| 2806 | "Usage: %s Device [-q | -d | -s SnapLatestName]" | 
|---|
| 2807 | ;; | 
|---|
| 2808 |  | 
|---|
| 2809 | 556 ) msgTxt=\ | 
|---|
| 2810 | "Usage: %s Device [-n | -f]" | 
|---|
| 2811 | ;; | 
|---|
| 2812 |  | 
|---|
| 2813 | 558 ) msgTxt=\ | 
|---|
| 2814 | "%s: Vpath disk %s has an underlying hdisk that already belongs to a volume group." | 
|---|
| 2815 | ;; | 
|---|
| 2816 |  | 
|---|
| 2817 | 560 ) msgTxt=\ | 
|---|
| 2818 | "Usage:\n"\ | 
|---|
| 2819 | "  %s Device\n"\ | 
|---|
| 2820 | "   {-d [NodeName]:{DiskName|DiskNum|BROKEN}:[PhysAddr1[PhysAddr2]] | -F DescFile}\n"\ | 
|---|
| 2821 | "   [-o OutputFile] [-f NumThreads] [-t Directory]" | 
|---|
| 2822 | ;; | 
|---|
| 2823 |  | 
|---|
| 2824 | 561 ) msgTxt=\ | 
|---|
| 2825 | "%s: File %s either does not exist or has an incorrect format." | 
|---|
| 2826 | ;; | 
|---|
| 2827 |  | 
|---|
| 2828 | 562 ) msgTxt=\ | 
|---|
| 2829 | "%s: did not find any match with the input disk address." | 
|---|
| 2830 | ;; | 
|---|
| 2831 |  | 
|---|
| 2832 | 563 ) msgTxt=\ | 
|---|
| 2833 | "%s: Device %s is not mounted on node %s." | 
|---|
| 2834 | ;; | 
|---|
| 2835 |  | 
|---|
| 2836 | 564 ) msgTxt=\ | 
|---|
| 2837 | "%s: Command was unable to determine whether file system %s is mounted." | 
|---|
| 2838 | ;; | 
|---|
| 2839 |  | 
|---|
| 2840 | 565 ) msgTxt=\ | 
|---|
| 2841 | "%s: Backup control file %s from a previous backup does not exist." | 
|---|
| 2842 | ;; | 
|---|
| 2843 |  | 
|---|
| 2844 | 566 ) msgTxt=\ | 
|---|
| 2845 | "Usage:\n"\ | 
|---|
| 2846 | "   %s Device {[-r | -a] [-s SnapDirName]} \n"\ | 
|---|
| 2847 | "      or\n"\ | 
|---|
| 2848 | "   %s Device [-q]" | 
|---|
| 2849 | ;; | 
|---|
| 2850 |  | 
|---|
| 2851 | 567 ) msgTxt=\ | 
|---|
| 2852 | "%s: Line %d of file %s is incorrect:" | 
|---|
| 2853 | ;; | 
|---|
| 2854 |  | 
|---|
| 2855 | 568 ) msgTxt=\ | 
|---|
| 2856 | "%s: Syntax error. The correct syntax is:\n  %s" | 
|---|
| 2857 | ;; | 
|---|
| 2858 |  | 
|---|
| 2859 | 569 ) msgTxt=\ | 
|---|
| 2860 | "%s: Incorrect range %s-%s specified." | 
|---|
| 2861 | ;; | 
|---|
| 2862 |  | 
|---|
| 2863 | 570 ) msgTxt=\ | 
|---|
| 2864 | "Usage:  %s {Device | all} -o ExportfsFile" | 
|---|
| 2865 | ;; | 
|---|
| 2866 |  | 
|---|
| 2867 | 571 ) msgTxt=\ | 
|---|
| 2868 | "Usage:\n"\ | 
|---|
| 2869 | "   %s {Device | all} -i ImportfsFile [-S ChangeSpecFile]" | 
|---|
| 2870 | ;; | 
|---|
| 2871 |  | 
|---|
| 2872 | 572 ) msgTxt=\ | 
|---|
| 2873 | "%s: Insufficient free space in %s (%s minimum required)." | 
|---|
| 2874 | ;; | 
|---|
| 2875 |  | 
|---|
| 2876 | 574 ) msgTxt=\ | 
|---|
| 2877 | "%s: Directory %s does not exist." | 
|---|
| 2878 | ;; | 
|---|
| 2879 |  | 
|---|
| 2880 | 575 ) msgTxt=\ | 
|---|
| 2881 | "%s: The GPFS release level could not be determined on nodes:\n%s" | 
|---|
| 2882 | ;; | 
|---|
| 2883 |  | 
|---|
| 2884 | 576 ) msgTxt=\ | 
|---|
| 2885 | "%s: The GPFS release level could not be determined on any of the nodes." | 
|---|
| 2886 | ;; | 
|---|
| 2887 |  | 
|---|
| 2888 | 577 ) msgTxt=\ | 
|---|
| 2889 | "%s: Ensure the nodes are available and run:\n%s" | 
|---|
| 2890 | ;; | 
|---|
| 2891 |  | 
|---|
| 2892 | 578 ) msgTxt=\ | 
|---|
| 2893 | "%s: Upgrade the lower release level nodes and run:\n%s" | 
|---|
| 2894 | ;; | 
|---|
| 2895 |  | 
|---|
| 2896 | 579 ) msgTxt=\ | 
|---|
| 2897 | "%s: The GPFS release level in effect for the cluster remains unchanged.\n"\ | 
|---|
| 2898 | "     Old level: %s (Release %s)" | 
|---|
| 2899 | ;; | 
|---|
| 2900 |  | 
|---|
| 2901 | 580 ) msgTxt=\ | 
|---|
| 2902 | "%s: The GPFS release level in effect for the cluster cannot be determined.\n"\ | 
|---|
| 2903 | "     Assumed: %s (Release %s)" | 
|---|
| 2904 | ;; | 
|---|
| 2905 |  | 
|---|
| 2906 | 581 ) msgTxt=\ | 
|---|
| 2907 | "%s: The GPFS release level in effect for the cluster will be changed.\n"\ | 
|---|
| 2908 | "     Old level: %s (Release %s)   New level: %s (Release %s)" | 
|---|
| 2909 | ;; | 
|---|
| 2910 |  | 
|---|
| 2911 | 582 ) msgTxt=\ | 
|---|
| 2912 | "%s: The cluster contains nodes that are at different GPFS release levels.\n"\ | 
|---|
| 2913 | "     Lowest level: %s (Release %s)  Highest level: %s (Release %s)" | 
|---|
| 2914 | ;; | 
|---|
| 2915 |  | 
|---|
| 2916 | 583 ) msgTxt=\ | 
|---|
| 2917 | "%s: -V option requires all nodes in the cluster to be at the same GPFS release level." | 
|---|
| 2918 | ;; | 
|---|
| 2919 |  | 
|---|
| 2920 | 585 ) msgTxt=\ | 
|---|
| 2921 | "%s: Not able to associate %s on node %s with any known GPFS disk." | 
|---|
| 2922 | ;; | 
|---|
| 2923 |  | 
|---|
| 2924 | 587 ) msgTxt=\ | 
|---|
| 2925 | "%s: Unable to resolve address range for disk %s on node %s." | 
|---|
| 2926 | ;; | 
|---|
| 2927 |  | 
|---|
| 2928 |  | 
|---|
| 2929 | # Message numbers above 1000 are in message set 60 (ts/fencing/fencing.msg). | 
|---|
| 2930 |  | 
|---|
| 2931 | 1000 ) msgTxt=\ | 
|---|
| 2932 | "%s: Could not clear fencing for disk %s." | 
|---|
| 2933 | ;; | 
|---|
| 2934 |  | 
|---|
| 2935 | 1001 ) msgTxt=\ | 
|---|
| 2936 | "%s: tspreemptabort of disk %s for nodes %s failed." | 
|---|
| 2937 | ;; | 
|---|
| 2938 |  | 
|---|
| 2939 | 1002 ) msgTxt=\ | 
|---|
| 2940 | "%s: Disk %s of type %s is not supported for fencing." | 
|---|
| 2941 | ;; | 
|---|
| 2942 |  | 
|---|
| 2943 | 1003 ) msgTxt=\ | 
|---|
| 2944 | "%s: Unable to fence in node %s for disk %s." | 
|---|
| 2945 | ;; | 
|---|
| 2946 |  | 
|---|
| 2947 | 1004 ) msgTxt=\ | 
|---|
| 2948 | "%s: None of the specified nodes belong to this GPFS cluster." | 
|---|
| 2949 | ;; | 
|---|
| 2950 |  | 
|---|
| 2951 | 1005 ) msgTxt=\ | 
|---|
| 2952 | "%s: A node cannot fence itself in." | 
|---|
| 2953 | ;; | 
|---|
| 2954 |  | 
|---|
| 2955 | 1006 ) msgTxt=\ | 
|---|
| 2956 | "%s: varyonLocalVolume:  tsprregister was unable to unfence disk %s." | 
|---|
| 2957 | ;; | 
|---|
| 2958 |  | 
|---|
| 2959 | 1007 ) msgTxt=\ | 
|---|
| 2960 | "%s: Unable to display fencing for disk %s." | 
|---|
| 2961 | ;; | 
|---|
| 2962 |  | 
|---|
| 2963 | 1008 ) msgTxt=\ | 
|---|
| 2964 | "%s: For the logical volume specification \"-l %s\" to be valid\n"\ | 
|---|
| 2965 | "%s must be the only logical volume in the volume group.\n"\ | 
|---|
| 2966 | "However, volume group %s contains logical volumes." | 
|---|
| 2967 | ;; | 
|---|
| 2968 |  | 
|---|
| 2969 | 1009 ) msgTxt=\ | 
|---|
| 2970 | "%s: %s is not a valid logical volume." | 
|---|
| 2971 | ;; | 
|---|
| 2972 |  | 
|---|
| 2973 | 1010 ) msgTxt=\ | 
|---|
| 2974 | "%s: %s is not a valid volume group name." | 
|---|
| 2975 | ;; | 
|---|
| 2976 |  | 
|---|
| 2977 | 1011 ) msgTxt=\ | 
|---|
| 2978 | "%s: For the hdisk specification \"-h %s\" to be valid\n"\ | 
|---|
| 2979 | "%s must be the only disk in the volume group.\n"\ | 
|---|
| 2980 | "However, volume group %s contains disks" | 
|---|
| 2981 | ;; | 
|---|
| 2982 |  | 
|---|
| 2983 | 1012 ) msgTxt=\ | 
|---|
| 2984 | "%s: %s is not a valid physical volume name." | 
|---|
| 2985 | ;; | 
|---|
| 2986 |  | 
|---|
| 2987 | 1013 ) msgTxt=\ | 
|---|
| 2988 | "%s: %s is not a valid physical volume id." | 
|---|
| 2989 | ;; | 
|---|
| 2990 |  | 
|---|
| 2991 | 1014 ) msgTxt=\ | 
|---|
| 2992 | "%s: Node %s does not have access to disk %s." | 
|---|
| 2993 | ;; | 
|---|
| 2994 |  | 
|---|
| 2995 | 1015 ) msgTxt=\ | 
|---|
| 2996 | "%s: Node %s does not hold a reservation for disk %s." | 
|---|
| 2997 | ;; | 
|---|
| 2998 |  | 
|---|
| 2999 | 1016 ) msgTxt=\ | 
|---|
| 3000 | "%s: SSA fencing support is not present on this node." | 
|---|
| 3001 | ;; | 
|---|
| 3002 |  | 
|---|
| 3003 | 1017 ) msgTxt=\ | 
|---|
| 3004 | "%s: Node ID %s is not a valid SSA node ID.\n"\ | 
|---|
| 3005 | "SSA node IDs must be a number in the range of 1 to 128." | 
|---|
| 3006 | ;; | 
|---|
| 3007 |  | 
|---|
| 3008 | 1024 ) msgTxt=\ | 
|---|
| 3009 | "%s: The SSA node id is not set." | 
|---|
| 3010 | ;; | 
|---|
| 3011 |  | 
|---|
| 3012 | 1025 ) msgTxt=\ | 
|---|
| 3013 | "%s: Unable to retrieve the SSA node id." | 
|---|
| 3014 | ;; | 
|---|
| 3015 |  | 
|---|
| 3016 | 1026 ) msgTxt=\ | 
|---|
| 3017 | "%s: Unable to set fencing for disk %s." | 
|---|
| 3018 | ;; | 
|---|
| 3019 |  | 
|---|
| 3020 | 1027 ) msgTxt=\ | 
|---|
| 3021 | "%s: Unable to clear PR reservations for disk %s." | 
|---|
| 3022 | ;; | 
|---|
| 3023 |  | 
|---|
| 3024 | *   )  # unknown message, ignore it. | 
|---|
| 3025 | return 0 | 
|---|
| 3026 | ;; | 
|---|
| 3027 |  | 
|---|
| 3028 | esac | 
|---|
| 3029 |  | 
|---|
| 3030 | # Message numbers below 1000 are in message set 32 (ts/admin/admin.msg). | 
|---|
| 3031 | # Message numbers above 1000 are in message set 60 (ts/fencing/fencing.msg). | 
|---|
| 3032 | if [[ $msgNo -lt 1000 ]] | 
|---|
| 3033 | then | 
|---|
| 3034 | msgSet=32 | 
|---|
| 3035 | else | 
|---|
| 3036 | msgSet=60 | 
|---|
| 3037 | fi | 
|---|
| 3038 |  | 
|---|
| 3039 | if [[ $osName = AIX ]] | 
|---|
| 3040 | then | 
|---|
| 3041 | # Print the message - extra arguments are ignored. | 
|---|
| 3042 | if [[ $printTimeStamp = yes ]] | 
|---|
| 3043 | then | 
|---|
| 3044 | print -u2 -- "$(date) $($dspmsg -s $msgSet mmfs.cat \ | 
|---|
| 3045 | $msgNo "$msgTxt" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9")" | 
|---|
| 3046 | else | 
|---|
| 3047 | print -u2 -- "$($dspmsg -s $msgSet mmfs.cat \ | 
|---|
| 3048 | $msgNo "$msgTxt" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9")" | 
|---|
| 3049 | fi | 
|---|
| 3050 |  | 
|---|
| 3051 | elif [[ $osName = Linux ]] | 
|---|
| 3052 | then | 
|---|
| 3053 | # Print the message - extra arguments are ignored. | 
|---|
| 3054 | if [[ $printTimeStamp = yes ]] | 
|---|
| 3055 | then | 
|---|
| 3056 | print -u2 -- "$(date) $($mmdspmsg -s $msgSet mmfs.cat \ | 
|---|
| 3057 | $msgNo "$msgTxt" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9")" | 
|---|
| 3058 | else | 
|---|
| 3059 | print -u2 -- "$($mmdspmsg -s $msgSet mmfs.cat \ | 
|---|
| 3060 | $msgNo "$msgTxt" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9")" | 
|---|
| 3061 | fi | 
|---|
| 3062 | else | 
|---|
| 3063 | checkForErrors "Unknown operating system $osName" 1 | 
|---|
| 3064 | fi | 
|---|
| 3065 |  | 
|---|
| 3066 | }  #----- end of function printErrorMsg -------------------------- | 
|---|
| 3067 |  | 
|---|
| 3068 |  | 
|---|
| 3069 | ########################################################################## | 
|---|
| 3070 | # | 
|---|
| 3071 | # Function:  Prints a syntax-related message, optionally followed | 
|---|
| 3072 | #            by usage message, and terminates the command | 
|---|
| 3073 | # | 
|---|
| 3074 | # Input:     $1 - indicator for the type of error | 
|---|
| 3075 | #            $2 - number of the usage message to issue; | 
|---|
| 3076 | #                 if 0, usage message is not printed | 
|---|
| 3077 | #            $3, $4, etc. - substitute parameters for the message | 
|---|
| 3078 | # | 
|---|
| 3079 | # Output:    Syntax-related message | 
|---|
| 3080 | # | 
|---|
| 3081 | # Returns:   No return.  The function invokes the cleanupAndExit routine. | 
|---|
| 3082 | # | 
|---|
| 3083 | # Note:      The usage message is assumed to have only one substitute | 
|---|
| 3084 | #            parameter, the command name.  The command name is allowed | 
|---|
| 3085 | #            to appear more than once in the usage statement. | 
|---|
| 3086 | # | 
|---|
| 3087 | ########################################################################## | 
|---|
| 3088 | function syntaxError  # <reason> <usageMsg> [<sub1> [<sub2>...]] | 
|---|
| 3089 | { | 
|---|
| 3090 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3091 | [[ -n $DEBUG || -n $DEBUGsyntaxError ]] && set -x | 
|---|
| 3092 | $mmTRACE_ENTER "$*" | 
|---|
| 3093 | typeset reason=$1 | 
|---|
| 3094 | typeset usageMsg=$2 | 
|---|
| 3095 | typeset sub1="$3" | 
|---|
| 3096 | typeset sub2="$4" | 
|---|
| 3097 | typeset sub3="$5" | 
|---|
| 3098 | typeset sub4="$6" | 
|---|
| 3099 | typeset sub5="$7" | 
|---|
| 3100 |  | 
|---|
| 3101 | # Print the appropriate message. | 
|---|
| 3102 | case "$reason" | 
|---|
| 3103 | in | 
|---|
| 3104 | "multiple")        # Parameter specified more than once. | 
|---|
| 3105 | printErrorMsg 36 "$mmcmd" "$sub1" | 
|---|
| 3106 | ;; | 
|---|
| 3107 |  | 
|---|
| 3108 | "missingArgs")     # Missing arguments. | 
|---|
| 3109 | printErrorMsg 168 "$mmcmd" | 
|---|
| 3110 | ;; | 
|---|
| 3111 |  | 
|---|
| 3112 | "missingValue")    # Missing required value after flag. | 
|---|
| 3113 | printErrorMsg 204 "$mmcmd" "$sub1" | 
|---|
| 3114 | ;; | 
|---|
| 3115 |  | 
|---|
| 3116 | "missingFile")     # Missing disk descriptor file. | 
|---|
| 3117 | printErrorMsg 41 "$mmcmd" | 
|---|
| 3118 | ;; | 
|---|
| 3119 |  | 
|---|
| 3120 | "extraArg")        # Unexpected extra argument. | 
|---|
| 3121 | printErrorMsg 38 "$mmcmd" "$sub1" | 
|---|
| 3122 | ;; | 
|---|
| 3123 |  | 
|---|
| 3124 | "invalidOption")   # Incorrect option. | 
|---|
| 3125 | printErrorMsg 13 "$mmcmd" "$sub1" | 
|---|
| 3126 | ;; | 
|---|
| 3127 |  | 
|---|
| 3128 | "invalidCombination")  # Invalid combination of options. | 
|---|
| 3129 | printErrorMsg 191 "$mmcmd" "$sub1" "$sub2" | 
|---|
| 3130 | ;; | 
|---|
| 3131 |  | 
|---|
| 3132 | "YesNoValue")      # Invalid yes|no parameter. | 
|---|
| 3133 | printErrorMsg 37 "$mmcmd" "$sub1" | 
|---|
| 3134 | ;; | 
|---|
| 3135 |  | 
|---|
| 3136 | "keyword")         # Invalid keyword specified. | 
|---|
| 3137 | printErrorMsg 133 "$mmcmd" "$sub1" | 
|---|
| 3138 | ;; | 
|---|
| 3139 |  | 
|---|
| 3140 | "invalidInt")      # Invalid parameter - must be an integer. | 
|---|
| 3141 | printErrorMsg 40 "$mmcmd" "$sub1" "$sub2" | 
|---|
| 3142 | ;; | 
|---|
| 3143 |  | 
|---|
| 3144 | "cannotOpenFile")  # unable to open file. | 
|---|
| 3145 | printErrorMsg 43 "$mmcmd" "$sub1" | 
|---|
| 3146 | ;; | 
|---|
| 3147 |  | 
|---|
| 3148 | "negativeInt" )    # Invalid parameter - must be positive integer. | 
|---|
| 3149 | printErrorMsg 45 "$mmcmd" "$sub1" "$sub2" | 
|---|
| 3150 | ;; | 
|---|
| 3151 |  | 
|---|
| 3152 | "invalidRange")    # Invalid range. | 
|---|
| 3153 | printErrorMsg 78 "$mmcmd" "$sub1" "$sub2" "$sub3" "$sub4" | 
|---|
| 3154 | ;; | 
|---|
| 3155 |  | 
|---|
| 3156 | "absolutePath")    # Parameter must be an absolute path name. | 
|---|
| 3157 | printErrorMsg 148 "$mmcmd" "$sub1" | 
|---|
| 3158 | ;; | 
|---|
| 3159 |  | 
|---|
| 3160 | "absolutePath_2")  # Parameter must be an absolute path name. | 
|---|
| 3161 | printErrorMsg 424 "$mmcmd" "$sub1" "$sub2" | 
|---|
| 3162 | ;; | 
|---|
| 3163 |  | 
|---|
| 3164 | "device1")         # Device name starts with a slash, but not /dev/. | 
|---|
| 3165 | printErrorMsg 169 "$mmcmd" "$sub1" | 
|---|
| 3166 | ;; | 
|---|
| 3167 |  | 
|---|
| 3168 | "device2")         # Device name contains a slash, but not in column 1. | 
|---|
| 3169 | printErrorMsg 170 "$mmcmd" "$sub1" | 
|---|
| 3170 | ;; | 
|---|
| 3171 |  | 
|---|
| 3172 | "invalidAttrValuePair")  # Invalid attribute on mmchconfig. | 
|---|
| 3173 | : # No special message, usage will be printed shortly. | 
|---|
| 3174 | ;; | 
|---|
| 3175 |  | 
|---|
| 3176 | "incorrectSyntax")  # Incorrect syntax. | 
|---|
| 3177 | printErrorMsg 568 "$mmcmd" "$sub1" | 
|---|
| 3178 | ;; | 
|---|
| 3179 |  | 
|---|
| 3180 | "incorrectRange")  # Incorrect range. | 
|---|
| 3181 | printErrorMsg 569 "$mmcmd" "$sub1" "$sub2" | 
|---|
| 3182 | ;; | 
|---|
| 3183 |  | 
|---|
| 3184 | "obsoleteOption")  # Invalid (old) option specified. | 
|---|
| 3185 | printErrorMsg 19 "$mmcmd" "$sub1" | 
|---|
| 3186 | ;; | 
|---|
| 3187 |  | 
|---|
| 3188 | "badSeparator_notSemicolon")  # Must use semi-colon as a separator. | 
|---|
| 3189 | printErrorMsg 62 "$mmcmd" | 
|---|
| 3190 | ;; | 
|---|
| 3191 |  | 
|---|
| 3192 | "badSeparator_notDash")       # Must use dash as a separator. | 
|---|
| 3193 | printErrorMsg 61 "$mmcmd" | 
|---|
| 3194 | ;; | 
|---|
| 3195 |  | 
|---|
| 3196 | "help")            # Show the usage message only. | 
|---|
| 3197 | : # Usage will be printed shortly. | 
|---|
| 3198 | ;; | 
|---|
| 3199 |  | 
|---|
| 3200 | *)                 # unexpected code | 
|---|
| 3201 | : # do nothing | 
|---|
| 3202 | ;; | 
|---|
| 3203 |  | 
|---|
| 3204 | esac  # end of case "$reason" | 
|---|
| 3205 |  | 
|---|
| 3206 | # If necessary, print the usage statement. | 
|---|
| 3207 | if [[ $usageMsg -ne 0 ]] | 
|---|
| 3208 | then | 
|---|
| 3209 | # Some usage messages put out the command name more than once. | 
|---|
| 3210 | if [[ $usageMsg = 287 || $usageMsg = 301 || $usageMsg = 374 || | 
|---|
| 3211 | $usageMsg = 390 || $usageMsg = 413 || $usageMsg = 421 || | 
|---|
| 3212 | $usageMsg = 425 || $usageMsg = 452 || $usageMsg = 458 || | 
|---|
| 3213 | $usageMsg = 566 ]] | 
|---|
| 3214 | then | 
|---|
| 3215 | printErrorMsg $usageMsg "$mmcmd" "$mmcmd" | 
|---|
| 3216 |  | 
|---|
| 3217 | elif [[ $usageMsg = 484 ]] | 
|---|
| 3218 | then | 
|---|
| 3219 | printErrorMsg $usageMsg "$mmcmd" "$mmcmd" "$mmcmd" | 
|---|
| 3220 |  | 
|---|
| 3221 | elif [[ $usageMsg = 385 || $usageMsg = 388 ]] | 
|---|
| 3222 | then | 
|---|
| 3223 | printErrorMsg $usageMsg "$mmcmd" "$mmcmd" "$mmcmd" "$mmcmd" | 
|---|
| 3224 |  | 
|---|
| 3225 | elif [[ $usageMsg = 359 ]] | 
|---|
| 3226 | then | 
|---|
| 3227 | printErrorMsg $usageMsg "$mmcmd" "$mmcmd" "$mmcmd" "$mmcmd" "$mmcmd" | 
|---|
| 3228 |  | 
|---|
| 3229 | elif [[ $usageMsg = 249 ]] | 
|---|
| 3230 | then | 
|---|
| 3231 | printErrorMsg $usageMsg "$mmcmd" "$mmcmd" "$mmcmd" "$mmcmd" "$mmcmd" "$mmcmd" "$mmcmd" | 
|---|
| 3232 |  | 
|---|
| 3233 | else | 
|---|
| 3234 | printErrorMsg $usageMsg "$mmcmd" | 
|---|
| 3235 | fi  # end of if [[ $usageMsg = 287 || ... | 
|---|
| 3236 | fi  # end of if [[ $usageMsg -ne 0 ]] | 
|---|
| 3237 |  | 
|---|
| 3238 | cleanupAndExit | 
|---|
| 3239 |  | 
|---|
| 3240 | }  #----- end of function syntaxError ---------------------------- | 
|---|
| 3241 |  | 
|---|
| 3242 |  | 
|---|
| 3243 | ########################################################################### | 
|---|
| 3244 | # | 
|---|
| 3245 | # Function:  Called if there is an interrupt before changes are committed. | 
|---|
| 3246 | #            Removes temporary files and unlocks the sdr if necessary. | 
|---|
| 3247 | # | 
|---|
| 3248 | # Input:     None | 
|---|
| 3249 | # | 
|---|
| 3250 | # Output:    None | 
|---|
| 3251 | # | 
|---|
| 3252 | # Returns:   Exits with code 2 | 
|---|
| 3253 | # | 
|---|
| 3254 | ########################################################################### | 
|---|
| 3255 | function pretrap | 
|---|
| 3256 | { | 
|---|
| 3257 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3258 | [[ -n $DEBUG || -n $DEBUGpretrap ]] && set -x | 
|---|
| 3259 | $mmTRACE_ENTER "$*" | 
|---|
| 3260 | typeset ec=0 | 
|---|
| 3261 |  | 
|---|
| 3262 | trap "" HUP INT QUIT KILL    # Disable traps so we won't get interrupted. | 
|---|
| 3263 |  | 
|---|
| 3264 | [[ -z $MMMODE ]] && determineMode | 
|---|
| 3265 |  | 
|---|
| 3266 | # We come here if an interrupt was received and | 
|---|
| 3267 | # no changes have been made to the sdrfs file. | 
|---|
| 3268 | # Display any buffered error messages that might be there. | 
|---|
| 3269 | [[ -s $errMsg ]] && $cat $errMsg 1>&2 | 
|---|
| 3270 | printErrorMsg 20 $mmcmd | 
|---|
| 3271 | $rm -f $GLOBAL_FILES $LOCAL_FILES | 
|---|
| 3272 |  | 
|---|
| 3273 | if [[ $gpfsLocked = yes ]] | 
|---|
| 3274 | then | 
|---|
| 3275 | setRunningCommand null $primaryServer | 
|---|
| 3276 | ec=$? | 
|---|
| 3277 | if [[ $ec -ne 0 ]] | 
|---|
| 3278 | then | 
|---|
| 3279 | printErrorMsg 171 $mmcmd "function setRunningCommand" $ec | 
|---|
| 3280 | fi | 
|---|
| 3281 | fi | 
|---|
| 3282 |  | 
|---|
| 3283 | [[ $envLocked = yes ]] && \ | 
|---|
| 3284 | freeEnvLock >/dev/null | 
|---|
| 3285 | envLocked=no | 
|---|
| 3286 |  | 
|---|
| 3287 | [[ $sdrLocked = yes ]] && \ | 
|---|
| 3288 | freeLockOnServer $primaryServer $ourNodeNumber >/dev/null | 
|---|
| 3289 | sdrLocked=no | 
|---|
| 3290 |  | 
|---|
| 3291 | trap - HUP INT QUIT KILL     # Restore interrupts. | 
|---|
| 3292 | exit 2 | 
|---|
| 3293 |  | 
|---|
| 3294 | }  #----- end of function pretrap -------------------------------- | 
|---|
| 3295 |  | 
|---|
| 3296 |  | 
|---|
| 3297 | #################################################################### | 
|---|
| 3298 | # | 
|---|
| 3299 | # Function:  Called if there is an interrupt to a command that | 
|---|
| 3300 | #            does not change system files.  Removes temporary files | 
|---|
| 3301 | #            and unlocks the sdr if necessary. | 
|---|
| 3302 | # | 
|---|
| 3303 | # Input:     None | 
|---|
| 3304 | # | 
|---|
| 3305 | # Output:    None | 
|---|
| 3306 | # | 
|---|
| 3307 | # Returns:   Exits with code 2 | 
|---|
| 3308 | # | 
|---|
| 3309 | #################################################################### | 
|---|
| 3310 | function pretrap2 | 
|---|
| 3311 | { | 
|---|
| 3312 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3313 | [[ -n $DEBUG || -n $DEBUGpretrap2 ]] && set -x | 
|---|
| 3314 | $mmTRACE_ENTER "$*" | 
|---|
| 3315 |  | 
|---|
| 3316 | trap "" HUP INT QUIT KILL    # Disable traps so we can finish this. | 
|---|
| 3317 |  | 
|---|
| 3318 | [[ -z $MMMODE ]] && determineMode | 
|---|
| 3319 |  | 
|---|
| 3320 | # Interrupt received. | 
|---|
| 3321 | # Display any buffered error messages that might be there. | 
|---|
| 3322 | [[ -s $errMsg ]] && $cat $errMsg 1>&2 | 
|---|
| 3323 | printErrorMsg 306 $mmcmd | 
|---|
| 3324 | $rm -f $GLOBAL_FILES $LOCAL_FILES | 
|---|
| 3325 |  | 
|---|
| 3326 | [[ $envLocked = yes ]] && \ | 
|---|
| 3327 | freeEnvLock >/dev/null | 
|---|
| 3328 | envLocked=no | 
|---|
| 3329 |  | 
|---|
| 3330 | [[ $sdrLocked = yes ]] && \ | 
|---|
| 3331 | freeLockOnServer $primaryServer $ourNodeNumber >/dev/null | 
|---|
| 3332 | sdrLocked=no | 
|---|
| 3333 |  | 
|---|
| 3334 | trap - HUP INT QUIT KILL     # Restore interrupts. | 
|---|
| 3335 | exit 2 | 
|---|
| 3336 |  | 
|---|
| 3337 | }  #----- end of function pretrap2 ------------------------------- | 
|---|
| 3338 |  | 
|---|
| 3339 |  | 
|---|
| 3340 | ######################################################################## | 
|---|
| 3341 | # | 
|---|
| 3342 | # Function:  Called if there is an interrupt to a command that | 
|---|
| 3343 | #            does not change system files.  Removes temporary files | 
|---|
| 3344 | #            and unlocks the sdr if necessary. | 
|---|
| 3345 | # | 
|---|
| 3346 | #            This silent trap routine is used by mmcommon and mmremote. | 
|---|
| 3347 | # | 
|---|
| 3348 | # Input:     None | 
|---|
| 3349 | # | 
|---|
| 3350 | # Output:    None | 
|---|
| 3351 | # | 
|---|
| 3352 | # Returns:   Exits with code 2 | 
|---|
| 3353 | # | 
|---|
| 3354 | ######################################################################## | 
|---|
| 3355 | function pretrap3 | 
|---|
| 3356 | { | 
|---|
| 3357 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3358 | [[ -n $DEBUG || -n $DEBUGpretrap3 ]] && set -x | 
|---|
| 3359 | $mmTRACE_ENTER "$*" | 
|---|
| 3360 |  | 
|---|
| 3361 | trap "" HUP INT QUIT KILL    # Disable traps so we can finish this. | 
|---|
| 3362 |  | 
|---|
| 3363 | [[ -z $MMMODE ]] && determineMode | 
|---|
| 3364 |  | 
|---|
| 3365 | # Interrupt received. | 
|---|
| 3366 | $rm -f $GLOBAL_FILES $LOCAL_FILES | 
|---|
| 3367 |  | 
|---|
| 3368 | [[ $envLocked = yes ]] && \ | 
|---|
| 3369 | freeEnvLock >/dev/null | 
|---|
| 3370 | envLocked=no | 
|---|
| 3371 |  | 
|---|
| 3372 | [[ $sdrLocked = yes ]] && \ | 
|---|
| 3373 | freeLockOnServer $primaryServer $ourNodeNumber >/dev/null | 
|---|
| 3374 | sdrLocked=no | 
|---|
| 3375 |  | 
|---|
| 3376 | trap - HUP INT QUIT KILL     # Restore interrupts. | 
|---|
| 3377 | exit 2 | 
|---|
| 3378 |  | 
|---|
| 3379 | }  #----- end of function pretrap3 ------------------------------- | 
|---|
| 3380 |  | 
|---|
| 3381 |  | 
|---|
| 3382 | ########################################################################### | 
|---|
| 3383 | # | 
|---|
| 3384 | # Function:  Called if there is an interrupt after changes were committed. | 
|---|
| 3385 | #            Removes temporary files and unlocks the sdr if necessary. | 
|---|
| 3386 | # | 
|---|
| 3387 | # Input:     None | 
|---|
| 3388 | # | 
|---|
| 3389 | # Output:    None | 
|---|
| 3390 | # | 
|---|
| 3391 | # Returns:   Exits with code 2 | 
|---|
| 3392 | # | 
|---|
| 3393 | ########################################################################### | 
|---|
| 3394 | function posttrap | 
|---|
| 3395 | { | 
|---|
| 3396 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3397 | [[ -n $DEBUG || -n $DEBUGposttrap ]] && set -x | 
|---|
| 3398 | $mmTRACE_ENTER "$*" | 
|---|
| 3399 | typeset ec=0 | 
|---|
| 3400 |  | 
|---|
| 3401 | trap "" HUP INT QUIT KILL    # Disable traps so we can finish this. | 
|---|
| 3402 |  | 
|---|
| 3403 | [[ -z $MMMODE ]] && determineMode | 
|---|
| 3404 |  | 
|---|
| 3405 | # Interrupt received: changes not propagated. | 
|---|
| 3406 | # Display any buffered error messages that might be there. | 
|---|
| 3407 | [[ -s $errMsg ]] && $cat $errMsg 1>&2 | 
|---|
| 3408 | printErrorMsg 32 $mmcmd | 
|---|
| 3409 | $rm -f $GLOBAL_FILES $LOCAL_FILES | 
|---|
| 3410 |  | 
|---|
| 3411 | if [[ $gpfsLocked = yes ]] | 
|---|
| 3412 | then | 
|---|
| 3413 | setRunningCommand null $primaryServer | 
|---|
| 3414 | ec=$? | 
|---|
| 3415 | if [[ $ec -ne 0 ]] | 
|---|
| 3416 | then | 
|---|
| 3417 | printErrorMsg 171 $mmcmd "function setRunningCommand" $ec | 
|---|
| 3418 | fi | 
|---|
| 3419 | fi | 
|---|
| 3420 |  | 
|---|
| 3421 | [[ $envLocked = yes ]] && \ | 
|---|
| 3422 | freeEnvLock >/dev/null | 
|---|
| 3423 | envLocked=no | 
|---|
| 3424 |  | 
|---|
| 3425 | [[ $sdrLocked = yes ]] && \ | 
|---|
| 3426 | freeLockOnServer $primaryServer $ourNodeNumber >/dev/null | 
|---|
| 3427 | sdrLocked=no | 
|---|
| 3428 |  | 
|---|
| 3429 | trap - HUP INT QUIT KILL     # Restore interrupts. | 
|---|
| 3430 | exit 2 | 
|---|
| 3431 |  | 
|---|
| 3432 | }  #----- end of function posttrap ------------------------------- | 
|---|
| 3433 |  | 
|---|
| 3434 |  | 
|---|
| 3435 | #################################################################### | 
|---|
| 3436 | # | 
|---|
| 3437 | # Function:  This function must be called before a command exits, | 
|---|
| 3438 | #            either because of an unrecoverable error, or because | 
|---|
| 3439 | #            processing is completed.  The caller must issue all | 
|---|
| 3440 | #            error messages prior to calling this function. | 
|---|
| 3441 | # | 
|---|
| 3442 | #            This function does not return to its caller. | 
|---|
| 3443 | # | 
|---|
| 3444 | # Input:     $1 (optional) return code value to be used | 
|---|
| 3445 | #            $2 (optional) indicator not to unlock the sdr | 
|---|
| 3446 | # | 
|---|
| 3447 | # Output:    None | 
|---|
| 3448 | # | 
|---|
| 3449 | # Returns:   Default exit code is 1 unless a different value | 
|---|
| 3450 | #            is passed as a first parameter. | 
|---|
| 3451 | # | 
|---|
| 3452 | #################################################################### | 
|---|
| 3453 | function cleanupAndExit  #  [ <rc> ]  [ doNotUnlock ] | 
|---|
| 3454 | { | 
|---|
| 3455 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3456 | [[ -n $DEBUG || -n $DEBUGcleanupAndExit ]] && set -x | 
|---|
| 3457 | $mmTRACE_ENTER "$*" | 
|---|
| 3458 | typeset doNotUnlock=$2 | 
|---|
| 3459 | typeset rc=1 | 
|---|
| 3460 | typeset ec=0 | 
|---|
| 3461 |  | 
|---|
| 3462 | [[ -n $1 ]] && rc=$1 | 
|---|
| 3463 |  | 
|---|
| 3464 | trap "" HUP INT QUIT KILL    # Disable traps so we can finish this. | 
|---|
| 3465 |  | 
|---|
| 3466 | if [[ $gpfsLocked = yes && -z $doNotUnlock ]] | 
|---|
| 3467 | then | 
|---|
| 3468 | setRunningCommand null $primaryServer | 
|---|
| 3469 | ec=$? | 
|---|
| 3470 | if [[ $ec -ne 0 ]] | 
|---|
| 3471 | then | 
|---|
| 3472 | printErrorMsg 171 $mmcmd "function setRunningCommand" $ec | 
|---|
| 3473 | fi | 
|---|
| 3474 | fi | 
|---|
| 3475 |  | 
|---|
| 3476 | if [[ $envLocked = yes && -z $doNotUnlock ]] | 
|---|
| 3477 | then | 
|---|
| 3478 | freeEnvLock > /dev/null | 
|---|
| 3479 | envLocked=no | 
|---|
| 3480 | fi | 
|---|
| 3481 |  | 
|---|
| 3482 | if [[ $sdrLocked = yes && -z $doNotUnlock ]] | 
|---|
| 3483 | then | 
|---|
| 3484 | freeLockOnServer $primaryServer $ourNodeNumber >/dev/null | 
|---|
| 3485 | sdrLocked=no | 
|---|
| 3486 | fi | 
|---|
| 3487 |  | 
|---|
| 3488 | [[ $getCredCalled = yes ]] &&  \ | 
|---|
| 3489 | freeCred | 
|---|
| 3490 |  | 
|---|
| 3491 | $rm -f $GLOBAL_FILES $LOCAL_FILES >/dev/null 2>&1 | 
|---|
| 3492 |  | 
|---|
| 3493 | $mmTRACE_EXIT "rc=$rc" | 
|---|
| 3494 | exit $rc | 
|---|
| 3495 |  | 
|---|
| 3496 | }  #----- end of function cleanupAndExit ------------------------- | 
|---|
| 3497 |  | 
|---|
| 3498 |  | 
|---|
| 3499 | #################################################################### | 
|---|
| 3500 | # | 
|---|
| 3501 | # Function:  Verifies that a command executed successfully. | 
|---|
| 3502 | #            If the return code from the command is not zero, | 
|---|
| 3503 | #            the function issues a message, performs cleanup, | 
|---|
| 3504 | #            and stops processing. | 
|---|
| 3505 | # | 
|---|
| 3506 | # Input:     $1 - name of the command to check | 
|---|
| 3507 | #            $2 - return code from the execution of the command | 
|---|
| 3508 | # | 
|---|
| 3509 | # Output:    None | 
|---|
| 3510 | # | 
|---|
| 3511 | # Returns:   0 - command finished successfully | 
|---|
| 3512 | #            If error, no return; processing is stopped. | 
|---|
| 3513 | # | 
|---|
| 3514 | #################################################################### | 
|---|
| 3515 | function checkForErrors  # <command> <rc> | 
|---|
| 3516 | { | 
|---|
| 3517 | if [ $2 != "0" ] | 
|---|
| 3518 | then | 
|---|
| 3519 | # Unexpected error | 
|---|
| 3520 | printErrorMsg 171 "$mmcmd" "$1" $2 | 
|---|
| 3521 | cleanupAndExit | 
|---|
| 3522 | fi | 
|---|
| 3523 |  | 
|---|
| 3524 | }  #----- end of function checkForErrors ------------------------- | 
|---|
| 3525 |  | 
|---|
| 3526 |  | 
|---|
| 3527 | #################################################################### | 
|---|
| 3528 | # | 
|---|
| 3529 | # Function:  Issue message 278 (corrupted mmsdrfs file). | 
|---|
| 3530 | #            Invoke cleanupAndExit to terminate the command. | 
|---|
| 3531 | # | 
|---|
| 3532 | # Input:     $1 - point of failure code | 
|---|
| 3533 | #            $2 - (optional) mmsdrfs line in error | 
|---|
| 3534 | # | 
|---|
| 3535 | # Output:    Message 278, followed by the line in error. | 
|---|
| 3536 | # | 
|---|
| 3537 | # Returns:   No return | 
|---|
| 3538 | # | 
|---|
| 3539 | #################################################################### | 
|---|
| 3540 | function corruptedSdrFileExit  # <errCode> [ <lineInError> ] | 
|---|
| 3541 | { | 
|---|
| 3542 | typeset errCode=$1 | 
|---|
| 3543 | typeset lineInError=$2 | 
|---|
| 3544 |  | 
|---|
| 3545 | printErrorMsg 278 $mmcmd  $errCode | 
|---|
| 3546 | [[ -n $lineInError ]] && \ | 
|---|
| 3547 | print -u2 "$lineInError" | 
|---|
| 3548 | cleanupAndExit $errCode | 
|---|
| 3549 |  | 
|---|
| 3550 | }  #----- end of function corruptedSdrFileExit ------------------- | 
|---|
| 3551 |  | 
|---|
| 3552 |  | 
|---|
| 3553 | ##################################################################### | 
|---|
| 3554 | # | 
|---|
| 3555 | # Function:  Verifies that the value of an attribute is an integer. | 
|---|
| 3556 | #            If the value ends with a suffix k, K, m, M, g or G, it is | 
|---|
| 3557 | #            converted to a simple integer.  If min and max values | 
|---|
| 3558 | #            are specified, the function verifies that the attribute | 
|---|
| 3559 | #            value is within that range. | 
|---|
| 3560 | # | 
|---|
| 3561 | # Input:     $1 - attribute name (needed for messages) | 
|---|
| 3562 | #            $2 - attribute value | 
|---|
| 3563 | #            $3 - minimum allowed value (optional) | 
|---|
| 3564 | #            $4 - maximum allowed value (optional) | 
|---|
| 3565 | # | 
|---|
| 3566 | # Output:    The converted attribute value | 
|---|
| 3567 | # | 
|---|
| 3568 | # Returns:   0 - Attribute value is legitimate | 
|---|
| 3569 | #            1 - (via cleanupAndExit) Attribute value is not valid | 
|---|
| 3570 | # | 
|---|
| 3571 | ##################################################################### | 
|---|
| 3572 | function checkIntRange  # <attr> <value> [<min> <max>] | 
|---|
| 3573 | { | 
|---|
| 3574 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3575 | [[ -n $DEBUG || -n $DEBUGcheckIntRange ]] && set -x | 
|---|
| 3576 | $mmTRACE_ENTER "$*" | 
|---|
| 3577 | typeset attribute=$1 | 
|---|
| 3578 | typeset attrValue=$2 | 
|---|
| 3579 | typeset minValue=$3 | 
|---|
| 3580 | typeset maxValue=$4 | 
|---|
| 3581 |  | 
|---|
| 3582 | typeset -l value=$attrValue | 
|---|
| 3583 | typeset -l low=$minValue | 
|---|
| 3584 | typeset -l high=$maxValue | 
|---|
| 3585 | typeset rc=0 | 
|---|
| 3586 | typeset -i result min max | 
|---|
| 3587 |  | 
|---|
| 3588 | # Verify that the input value is an integer. | 
|---|
| 3589 | # Convert if value has a k, K, m, M, g or G suffix. | 
|---|
| 3590 | if [[ $value = k || $value = m || $value = g ]] | 
|---|
| 3591 | then | 
|---|
| 3592 | rc=1 | 
|---|
| 3593 | elif [[ $value != ${value%g} ]] | 
|---|
| 3594 | then | 
|---|
| 3595 | [[ -z ${value%%*([0-9])g} ]] && result=${value%g}*1073741824 || rc=1 | 
|---|
| 3596 | elif [[ $value != ${value%m} ]] | 
|---|
| 3597 | then | 
|---|
| 3598 | [[ -z ${value%%*([0-9])m} ]] && result=${value%m}*1048576 || rc=1 | 
|---|
| 3599 | elif [[ $value != ${value%k} ]] | 
|---|
| 3600 | then | 
|---|
| 3601 | [[ -z ${value%%*([0-9])k} ]] && result=${value%k}*1024 || rc=1 | 
|---|
| 3602 | else | 
|---|
| 3603 | [[ -z ${value%%*([0-9])} ]] && result=$value || rc=1 | 
|---|
| 3604 | fi | 
|---|
| 3605 |  | 
|---|
| 3606 | if [[ $rc -ne 0 ]] | 
|---|
| 3607 | then | 
|---|
| 3608 | # Invalid integer | 
|---|
| 3609 | printErrorMsg 40 $mmcmd "$attribute" "$attrValue" | 
|---|
| 3610 | cleanupAndExit | 
|---|
| 3611 | fi | 
|---|
| 3612 |  | 
|---|
| 3613 | # If range checking required, account for any k, K, m, or M suffixes. | 
|---|
| 3614 | if [[ -n $minValue ]] | 
|---|
| 3615 | then | 
|---|
| 3616 | # Account for any k, K, m, or M suffixes in minValue or maxValue. | 
|---|
| 3617 | # Since these are not user input, there should be no errors. | 
|---|
| 3618 | if [[ $low != ${low%m} ]] | 
|---|
| 3619 | then | 
|---|
| 3620 | [[ -z ${low%%*([0-9])m} ]] && min=${low%m}*1048576 || rc=1 | 
|---|
| 3621 | elif [[ $low != ${low%k} ]] | 
|---|
| 3622 | then | 
|---|
| 3623 | [[ -z ${low%%*([0-9])k} ]] && min=${low%k}*1024 || rc=1 | 
|---|
| 3624 | else | 
|---|
| 3625 | [[ -z ${low%%*([0-9])} ]] && min=$low || rc=1 | 
|---|
| 3626 | fi | 
|---|
| 3627 | checkForErrors checkIntRange_min $rc | 
|---|
| 3628 | fi  # end if [[ -n $minValue ]] | 
|---|
| 3629 |  | 
|---|
| 3630 | if [[ -n $maxValue ]] | 
|---|
| 3631 | then | 
|---|
| 3632 | if [[ $high != ${high%m} ]] | 
|---|
| 3633 | then | 
|---|
| 3634 | [[ -z ${high%%*([0-9])m} ]] && max=${high%m}*1048576 || rc=1 | 
|---|
| 3635 | elif [[ $high != ${high%k} ]] | 
|---|
| 3636 | then | 
|---|
| 3637 | [[ -z ${high%%*([0-9])k} ]] && max=${high%k}*1024 || rc=1 | 
|---|
| 3638 | else | 
|---|
| 3639 | [[ -z ${high%%*([0-9])} ]] && max=$high || rc=1 | 
|---|
| 3640 | fi | 
|---|
| 3641 | checkForErrors checkIntRange_max $rc | 
|---|
| 3642 | fi  # end if [[ -n $maxValue ]] | 
|---|
| 3643 |  | 
|---|
| 3644 | # Ensure that value is within the specified range. | 
|---|
| 3645 | if [[ -n $maxValue ]] | 
|---|
| 3646 | then | 
|---|
| 3647 | # Make sure that value is within the specified range. | 
|---|
| 3648 | if [[ $result -lt $min || $result -gt $max ]] | 
|---|
| 3649 | then | 
|---|
| 3650 | # Value is out of range. | 
|---|
| 3651 | printErrorMsg 78 $mmcmd "$attribute" "$minValue" "$maxValue" "$attrValue" | 
|---|
| 3652 | cleanupAndExit | 
|---|
| 3653 | fi | 
|---|
| 3654 | elif [[ -n $minValue ]] | 
|---|
| 3655 | then | 
|---|
| 3656 | # Make sure that value is greater than the minimum required. | 
|---|
| 3657 | if [[ $result -lt $min ]] | 
|---|
| 3658 | then | 
|---|
| 3659 | # Value is out of range. | 
|---|
| 3660 | printErrorMsg 97 $mmcmd "$attribute" "$minValue" "$attrValue" | 
|---|
| 3661 | cleanupAndExit | 
|---|
| 3662 | fi | 
|---|
| 3663 | else | 
|---|
| 3664 | : # nothing to do. | 
|---|
| 3665 | fi  # end if [[ -n $maxValue ]] | 
|---|
| 3666 |  | 
|---|
| 3667 | # Everything looks OK, return the result. | 
|---|
| 3668 | print -- "$result" | 
|---|
| 3669 | return 0 | 
|---|
| 3670 |  | 
|---|
| 3671 | }  #----- end of function checkIntRange -------------------------- | 
|---|
| 3672 |  | 
|---|
| 3673 |  | 
|---|
| 3674 | ############################################################################### | 
|---|
| 3675 | # | 
|---|
| 3676 | # Function:  Check that a name does not violate any of the naming rules | 
|---|
| 3677 | #            about length or prohibited characters. | 
|---|
| 3678 | # | 
|---|
| 3679 | # Input:     nameType   - type of name being checked | 
|---|
| 3680 | #            maxLength  - maximum length of the name | 
|---|
| 3681 | #            name       - name to be checked | 
|---|
| 3682 | # | 
|---|
| 3683 | # Output:    none | 
|---|
| 3684 | # | 
|---|
| 3685 | # Returns:   0 if the name is ok; non-zero otherwise | 
|---|
| 3686 | # | 
|---|
| 3687 | ############################################################################### | 
|---|
| 3688 | function checkName  # <nameType> <maxLength> <name> | 
|---|
| 3689 | { | 
|---|
| 3690 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3691 | [[ -n $DEBUG || -n $DEBUGcheckName ]] && set -x | 
|---|
| 3692 | $mmTRACE_ENTER "$*" | 
|---|
| 3693 |  | 
|---|
| 3694 | typeset nameType=$1 | 
|---|
| 3695 | typeset maxLength=$2 | 
|---|
| 3696 | typeset name="$3" | 
|---|
| 3697 |  | 
|---|
| 3698 | typeset length | 
|---|
| 3699 | typeset bannedFromAllNames=',:;   "'  # includes blank and a tab char | 
|---|
| 3700 | typeset bannedFromDeviceNames=']/?$&*()' | 
|---|
| 3701 | typeset bannedFromDiskNames='].<>{}/\?`~!@#$%^&*()+=\\-' | 
|---|
| 3702 | typeset rc=0 | 
|---|
| 3703 |  | 
|---|
| 3704 | # Return with success if the passed name is null. | 
|---|
| 3705 | [[ -z $name ]] && return 0 | 
|---|
| 3706 |  | 
|---|
| 3707 | # Return with a non-zero return code if the name is too long. | 
|---|
| 3708 | length=${#name} | 
|---|
| 3709 | if [[ length -gt maxLength ]] | 
|---|
| 3710 | then | 
|---|
| 3711 | # The name is too long. | 
|---|
| 3712 | printErrorMsg 548 $mmcmd '"'"$name"'"' $maxLength | 
|---|
| 3713 | return 1 | 
|---|
| 3714 | fi | 
|---|
| 3715 |  | 
|---|
| 3716 | # If only checking the length of the string, we are done. | 
|---|
| 3717 | [[ $nameType = lengthCheckOnly ]] && return 0 | 
|---|
| 3718 |  | 
|---|
| 3719 | # Check if any of the common banned characters are present in the name; | 
|---|
| 3720 | # the single-quote character must be tested for explicitly. | 
|---|
| 3721 | [[ "$name" = *+([${bannedFromAllNames}])* || "$name" = *"'"* ]] && rc=1 | 
|---|
| 3722 |  | 
|---|
| 3723 | # Additional, name-specific checking. | 
|---|
| 3724 | case $nameType in | 
|---|
| 3725 | poolName | junctionName | filesetName ) | 
|---|
| 3726 | [[ "$name" = *+([${bannedFromDeviceNames}])* || "$name" = *"["* ]] &&  \ | 
|---|
| 3727 | rc=1 | 
|---|
| 3728 | ;; | 
|---|
| 3729 |  | 
|---|
| 3730 | deviceName ) | 
|---|
| 3731 | [[ "${name##+(/)dev+(/)}" = *+([${bannedFromDeviceNames}])* || "$name" = *"["* ]] &&  \ | 
|---|
| 3732 | rc=1 | 
|---|
| 3733 | ;; | 
|---|
| 3734 |  | 
|---|
| 3735 | diskName ) | 
|---|
| 3736 | [[ "$name" = *+([${bannedFromDiskNames}])* || "$name" = *"["* ]] &&  \ | 
|---|
| 3737 | rc=1 | 
|---|
| 3738 | ;; | 
|---|
| 3739 |  | 
|---|
| 3740 | * )  : # The name must be OK. | 
|---|
| 3741 | ;; | 
|---|
| 3742 | esac  # end of case $nameType in | 
|---|
| 3743 |  | 
|---|
| 3744 | # If a banned character was found, issue an appropriate message. | 
|---|
| 3745 | if [[ $rc -ne 0 ]] | 
|---|
| 3746 | then | 
|---|
| 3747 | case $name in | 
|---|
| 3748 | *\[* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '['  ;; | 
|---|
| 3749 | *\]* )  printErrorMsg 189 $mmcmd '"'"$name"'"' ']'  ;; | 
|---|
| 3750 | *\.* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '.'  ;; | 
|---|
| 3751 | *\<* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '<'  ;; | 
|---|
| 3752 | *\>* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '>'  ;; | 
|---|
| 3753 | *\{* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '{'  ;; | 
|---|
| 3754 | *\}* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '}'  ;; | 
|---|
| 3755 | *\/* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '/'  ;; | 
|---|
| 3756 | *\?* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '?'  ;; | 
|---|
| 3757 | *\`* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '`'  ;; | 
|---|
| 3758 | *\~* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '~'  ;; | 
|---|
| 3759 | *\!* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '!'  ;; | 
|---|
| 3760 | *\@* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '@'  ;; | 
|---|
| 3761 | *\#* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '#'  ;; | 
|---|
| 3762 | *\$* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '$'  ;; | 
|---|
| 3763 | *\%* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '%'  ;; | 
|---|
| 3764 | *\^* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '^'  ;; | 
|---|
| 3765 | *\&* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '&'  ;; | 
|---|
| 3766 | *\** )  printErrorMsg 189 $mmcmd '"'"$name"'"' '*'  ;; | 
|---|
| 3767 | *\(* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '('  ;; | 
|---|
| 3768 | *\)* )  printErrorMsg 189 $mmcmd '"'"$name"'"' ')'  ;; | 
|---|
| 3769 | *\+* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '+'  ;; | 
|---|
| 3770 | *\-* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '-'  ;; | 
|---|
| 3771 | *\=* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '='  ;; | 
|---|
| 3772 | *\,* )  printErrorMsg 189 $mmcmd '"'"$name"'"' ','  ;; | 
|---|
| 3773 | *\:* )  printErrorMsg 189 $mmcmd '"'"$name"'"' ':'  ;; | 
|---|
| 3774 | *\;* )  printErrorMsg 189 $mmcmd '"'"$name"'"' ';'  ;; | 
|---|
| 3775 | *\"* )  printErrorMsg 189 $mmcmd '"'"$name"'"' "\"" ;; | 
|---|
| 3776 | *\'* )  printErrorMsg 189 $mmcmd '"'"$name"'"' "'"  ;; | 
|---|
| 3777 | *\\* )  printErrorMsg 189 $mmcmd '"'"$name"'"' '\'  ;; | 
|---|
| 3778 | *\ * )  printErrorMsg 189 $mmcmd '"'"$name"'"' 'blank character' ;; | 
|---|
| 3779 | *\  * )  printErrorMsg 189 $mmcmd '"'"$name"'"' 'tab character' ;; | 
|---|
| 3780 | esac  # end of case $name in | 
|---|
| 3781 | fi  # end of if [[ $rc -ne 0 ]] | 
|---|
| 3782 |  | 
|---|
| 3783 | return $rc | 
|---|
| 3784 |  | 
|---|
| 3785 | }  #----- end of function checkName ------------------------------ | 
|---|
| 3786 |  | 
|---|
| 3787 |  | 
|---|
| 3788 | ######################################################################### | 
|---|
| 3789 | # | 
|---|
| 3790 | # Function:  Verify that the user-supplied input file exists and | 
|---|
| 3791 | #            is not empty.  Rewrite the file to ensure there are | 
|---|
| 3792 | #            no carriage-return characters and that it contains | 
|---|
| 3793 | #            a newline character at the end of the file. | 
|---|
| 3794 | # | 
|---|
| 3795 | # Input:     $1 - name of the user-supplied input file | 
|---|
| 3796 | #            $2 - name of the file to create | 
|---|
| 3797 | # | 
|---|
| 3798 | # Output:    None explicit. | 
|---|
| 3799 | # | 
|---|
| 3800 | # Returns:   0  - file is ok and successfully rewritten | 
|---|
| 3801 | #            non-zero - file does not exist, empty or unexpected error | 
|---|
| 3802 | # | 
|---|
| 3803 | ######################################################################### | 
|---|
| 3804 | function checkUserFile  # <inputFilename> <newFile> | 
|---|
| 3805 | { | 
|---|
| 3806 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3807 | [[ -n $DEBUG || -n $DEBUGcheckUserFile ]] && set -x | 
|---|
| 3808 | typeset inputFile=$1 | 
|---|
| 3809 | typeset newFile=$2 | 
|---|
| 3810 |  | 
|---|
| 3811 | typeset operands | 
|---|
| 3812 |  | 
|---|
| 3813 | # Verify input parameters. | 
|---|
| 3814 | if [[ $# -lt 2 ]] | 
|---|
| 3815 | then | 
|---|
| 3816 | operands="<inputFilename> <newFile>" | 
|---|
| 3817 | printErrorMsg 260 checkIntRange "$operands" | 
|---|
| 3818 | cleanupAndExit | 
|---|
| 3819 | fi | 
|---|
| 3820 |  | 
|---|
| 3821 | # Ensure the file exists and is not empty. | 
|---|
| 3822 | if [[ ! -r $inputFile ]] | 
|---|
| 3823 | then | 
|---|
| 3824 | # We cannot open the file. | 
|---|
| 3825 | printErrorMsg 43 $mmcmd $inputFile | 
|---|
| 3826 | return 1 | 
|---|
| 3827 | fi | 
|---|
| 3828 | if [[ ! -s $inputFile ]] | 
|---|
| 3829 | then | 
|---|
| 3830 | # File is empty. | 
|---|
| 3831 | printErrorMsg 329 $mmcmd $inputFile | 
|---|
| 3832 | return 1 | 
|---|
| 3833 | fi | 
|---|
| 3834 |  | 
|---|
| 3835 | # Remove any carriage-return chareacters. | 
|---|
| 3836 | # If the source and target file names are identical, | 
|---|
| 3837 | # create a local working copy first. | 
|---|
| 3838 | if [[ $inputFile = $newFile ]] | 
|---|
| 3839 | then | 
|---|
| 3840 | $cp $inputFile $tmpfile | 
|---|
| 3841 | checkForErrors "checkUserFile: cp $inputFile $tmpfile" $? | 
|---|
| 3842 | LC_ALL=C $tr -d "\r" < $tmpfile > $newFile | 
|---|
| 3843 | checkForErrors "checkUserFile: tr -d <$tmpfile >$newFile" $? | 
|---|
| 3844 | $rm -f $tmpfile | 
|---|
| 3845 | else | 
|---|
| 3846 | LC_ALL=C $tr -d "\r" < $inputFile > $newFile | 
|---|
| 3847 | checkForErrors "checkUserFile: tr -d <$inputFile >$newFile" $? | 
|---|
| 3848 | fi | 
|---|
| 3849 |  | 
|---|
| 3850 | # If necessary, add a newline character at the end of the file. | 
|---|
| 3851 | if [[ $(LC_ALL=C $tail -c 1 $newFile) != $(printf "\n") ]] | 
|---|
| 3852 | then | 
|---|
| 3853 | printf "\n" >> $newFile | 
|---|
| 3854 | checkForErrors "writing to file $newFile" $? | 
|---|
| 3855 | fi | 
|---|
| 3856 |  | 
|---|
| 3857 | return 0 | 
|---|
| 3858 |  | 
|---|
| 3859 | }  #----- end of function checkUserFile ------------------ | 
|---|
| 3860 |  | 
|---|
| 3861 |  | 
|---|
| 3862 | ############################################################################# | 
|---|
| 3863 | # | 
|---|
| 3864 | # Function:  Determine what mode we are in (lc, single, ... ) and initialize | 
|---|
| 3865 | #            some global variables (primaryServer, backupServer, ... ). | 
|---|
| 3866 | # | 
|---|
| 3867 | # Input:     none | 
|---|
| 3868 | # | 
|---|
| 3869 | # Output:    The MMMODE environment variable is set to reflect mode. | 
|---|
| 3870 | #            The primaryServer and backupServer global variables are set. | 
|---|
| 3871 | #            The remote shell and file copy commands are reset to the user | 
|---|
| 3872 | #            specified path names. | 
|---|
| 3873 | # | 
|---|
| 3874 | # Returns:   0 in all cases | 
|---|
| 3875 | # | 
|---|
| 3876 | ############################################################################# | 
|---|
| 3877 | function determineMode | 
|---|
| 3878 | { | 
|---|
| 3879 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3880 | [[ -n $DEBUG || -n $DEBUGdetermineMode ]] && set -x | 
|---|
| 3881 | $mmTRACE_ENTER "$*" | 
|---|
| 3882 | typeset versionLine="" | 
|---|
| 3883 | typeset mmmode rshPath rcpPath | 
|---|
| 3884 |  | 
|---|
| 3885 | if [[ -f $mmsdrfsFile ]] | 
|---|
| 3886 | then | 
|---|
| 3887 | # If the mmsdrfs file exists, parse the file's version line. | 
|---|
| 3888 | versionLine=$($head -1 $mmsdrfsFile) | 
|---|
| 3889 | IFS=':' | 
|---|
| 3890 | set -f ; set -- $versionLine ; set +f | 
|---|
| 3891 | IFS="$IFS_sv" | 
|---|
| 3892 |  | 
|---|
| 3893 | # Perform a quick sanity check. | 
|---|
| 3894 | [[ $2 != 00_VERSION_LINE ]] &&  \ | 
|---|
| 3895 | corruptedSdrFileExit 127 "$versionLine" | 
|---|
| 3896 |  | 
|---|
| 3897 | # Retrieve the cluster type and other values. | 
|---|
| 3898 | mmmode=$8 | 
|---|
| 3899 | primaryServer=$9 | 
|---|
| 3900 | backupServer=${10} | 
|---|
| 3901 | rshPath=${12} | 
|---|
| 3902 | rcpPath=${13} | 
|---|
| 3903 | if [[ -n $rshPath && $rshPath != "_DEFAULT_" ]] | 
|---|
| 3904 | then | 
|---|
| 3905 | rsh="$rshPath" | 
|---|
| 3906 | export GPFS_rshPath="$rshPath" | 
|---|
| 3907 | fi | 
|---|
| 3908 | if [[ -n $rcpPath && $rcpPath != "_DEFAULT_" ]] | 
|---|
| 3909 | then | 
|---|
| 3910 | rcp="$rcpPath" | 
|---|
| 3911 | export GPFS_rcpPath="$rcpPath" | 
|---|
| 3912 | fi | 
|---|
| 3913 | environmentType=${15} | 
|---|
| 3914 | [[ -z $environmentType ]] && environmentType=$mmmode | 
|---|
| 3915 | [[ $mmmode != $environmentType && $environmentType != lc2 ]] && \ | 
|---|
| 3916 | environmentType="rpd" | 
|---|
| 3917 |  | 
|---|
| 3918 | else | 
|---|
| 3919 | # Otherwise, we have no idea what to do. | 
|---|
| 3920 | mmmode="" | 
|---|
| 3921 | environmentType="" | 
|---|
| 3922 | # Unknown GPFS execution environment | 
|---|
| 3923 | printErrorMsg 338 $mmcmd $mmmode | 
|---|
| 3924 | cleanupAndExit | 
|---|
| 3925 |  | 
|---|
| 3926 | fi  #  end if [[ -f $mmsdrfsFile ]] | 
|---|
| 3927 |  | 
|---|
| 3928 | # Make the environment variables globally available. | 
|---|
| 3929 | export MMMODE=$mmmode | 
|---|
| 3930 | export environmentType=$environmentType | 
|---|
| 3931 |  | 
|---|
| 3932 | return 0 | 
|---|
| 3933 |  | 
|---|
| 3934 | }  #----- end of function determineMode -------------------------- | 
|---|
| 3935 |  | 
|---|
| 3936 |  | 
|---|
| 3937 | ############################################################################# | 
|---|
| 3938 | # | 
|---|
| 3939 | # Function:  Determine the value of the specified mmfs.cfg parameter. | 
|---|
| 3940 | # | 
|---|
| 3941 | # Input:     $1 - mmfs.cfg parameter name. | 
|---|
| 3942 | #            The rest of the parameters are optional. | 
|---|
| 3943 | #            $2 - check daemon indicator.  If the value is "yes" or | 
|---|
| 3944 | #                 "checkDaemon", the function will first make a tsctl | 
|---|
| 3945 | #                 call to determine the value from the running daemon. | 
|---|
| 3946 | #                 The default is not to check the daemon. | 
|---|
| 3947 | #            $3 - short node name. Default is $ourShortName. | 
|---|
| 3948 | #            $4 - mmfs.cfg file to use. Default is /var/mmfs/etc/mmfs.cfg. | 
|---|
| 3949 | # | 
|---|
| 3950 | # Output:    The value of the mmfs.cfg parameter or null. | 
|---|
| 3951 | # | 
|---|
| 3952 | # Returns:   0 - worked | 
|---|
| 3953 | #            1 - unexpected error | 
|---|
| 3954 | # | 
|---|
| 3955 | # Examples:  autoload=$(showCfgValue autoload) | 
|---|
| 3956 | #            pagepool=$(showCfgValue pagepool checkDaemon $shortName $mmfscfg) | 
|---|
| 3957 | # | 
|---|
| 3958 | ############################################################################# | 
|---|
| 3959 | function showCfgValue  # <parmName> [<checkDaemon> [<nodeName> [<cfgFile>]]] | 
|---|
| 3960 | { | 
|---|
| 3961 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 3962 | [[ -n $DEBUG || -n $DEBUGshowCfgValue ]] && set -x | 
|---|
| 3963 | $mmTRACE_ENTER "$*" | 
|---|
| 3964 |  | 
|---|
| 3965 | typeset parm=$1 | 
|---|
| 3966 | typeset checkDaemon=$2 | 
|---|
| 3967 | typeset node=$3 | 
|---|
| 3968 | typeset cfgFile=$4 | 
|---|
| 3969 |  | 
|---|
| 3970 | typeset parmValue rc | 
|---|
| 3971 |  | 
|---|
| 3972 | # Set default values. | 
|---|
| 3973 | [[ $checkDaemon != yes && $checkDaemon != checkDaemon ]] && checkDaemon="" | 
|---|
| 3974 | [[ -z $node ]] && node=$ourShortName | 
|---|
| 3975 | [[ -z $cfgFile ]] && cfgFile=$mmfscfgFile | 
|---|
| 3976 | [[ ! -f $cfgFile ]] && return 1 | 
|---|
| 3977 |  | 
|---|
| 3978 | # If we need to determine the value of the parameter from the currently | 
|---|
| 3979 | # running GPFS daemon, use the tsctl showCfgValue command.  If this fails, | 
|---|
| 3980 | # for whatever reason, determine the value from the specified config file. | 
|---|
| 3981 | # Note that boolean type parameters have different representation in the | 
|---|
| 3982 | # daemon than in the mmfs.cfg file.  It is the callers responsibility to | 
|---|
| 3983 | # do the necessary translation. | 
|---|
| 3984 | if [[ -n $checkDaemon && $node = $ourShortName ]] | 
|---|
| 3985 | then | 
|---|
| 3986 | parmValue=$($tsctl showCfgValue $parm 2>/dev/null) | 
|---|
| 3987 | rc=$? | 
|---|
| 3988 | if [[ -n $parmValue && $rc -eq 0 ]] | 
|---|
| 3989 | then | 
|---|
| 3990 | print -- "$parmValue" | 
|---|
| 3991 | return 0 | 
|---|
| 3992 | fi | 
|---|
| 3993 | fi  # end of if [[ -n $checkDaemon ]] | 
|---|
| 3994 |  | 
|---|
| 3995 | # Find the setting of the parameter from the specified config file. | 
|---|
| 3996 | parmValue=$($awk '                                     \ | 
|---|
| 3997 | BEGIN { doNotIgnoreValue = 1 }                       \ | 
|---|
| 3998 | # If this is the end of a node-override section,     \ | 
|---|
| 3999 | # set the flag to accept parameter values.           \ | 
|---|
| 4000 | $1 == "[common]" {                                   \ | 
|---|
| 4001 | { doNotIgnoreValue = 1 }                           \ | 
|---|
| 4002 | { next }                                           \ | 
|---|
| 4003 | }                                                    \ | 
|---|
| 4004 | # If this is the start of a node-override section,   \ | 
|---|
| 4005 | # see if this section applies to our node.           \ | 
|---|
| 4006 | # If yes, we will not ignore subsequent parameters.  \ | 
|---|
| 4007 | # If not, subsequent parameters will be ignored.     \ | 
|---|
| 4008 | /^\[.*]/ || /^[       ]*\[.*]/ {                     \ | 
|---|
| 4009 | if ($1 == "['$node']" || $1 ~ /\['$node',/ ||      \ | 
|---|
| 4010 | $1 ~  /,'$node']/ || $1 ~ /,'$node',/)  {      \ | 
|---|
| 4011 | { doNotIgnoreValue = 1 }                         \ | 
|---|
| 4012 | } else {                                           \ | 
|---|
| 4013 | { doNotIgnoreValue = 0 }                         \ | 
|---|
| 4014 | }                                                  \ | 
|---|
| 4015 | { next }                                           \ | 
|---|
| 4016 | }                                                    \ | 
|---|
| 4017 | # If this line contains our parameter, save its      \ | 
|---|
| 4018 | # value, provided it is applicable to our node.      \ | 
|---|
| 4019 | $1 == "'$parm'" && doNotIgnoreValue {                \ | 
|---|
| 4020 | { parmValue = $2 }                                 \ | 
|---|
| 4021 | }                                                    \ | 
|---|
| 4022 | END { print parmValue }                              \ | 
|---|
| 4023 | ' $cfgFile) | 
|---|
| 4024 | checkForErrors awk $? | 
|---|
| 4025 |  | 
|---|
| 4026 | print -- "$parmValue" | 
|---|
| 4027 | return 0 | 
|---|
| 4028 |  | 
|---|
| 4029 | }  #----- end of function showCfgValue --------------------------- | 
|---|
| 4030 |  | 
|---|
| 4031 |  | 
|---|
| 4032 | ############################################################################## | 
|---|
| 4033 | # | 
|---|
| 4034 | # Function:  Given a device name or a mount point, this routine | 
|---|
| 4035 | #            returns information about the file system. | 
|---|
| 4036 | # | 
|---|
| 4037 | # Input:     $1 - file system device name or mount point. | 
|---|
| 4038 | #            $2 - name of mmsdrfs file | 
|---|
| 4039 | #            $3 - (optional) keyword indicating whether device or | 
|---|
| 4040 | #                 mount point is used.  The default is deviceName. | 
|---|
| 4041 | #            $4 - (optional) suppress messages flag | 
|---|
| 4042 | # | 
|---|
| 4043 | # Output:    $1 - fully-qualified device name (/dev/...) | 
|---|
| 4044 | #            $2 - short device name (no /dev/ prefix) | 
|---|
| 4045 | #            $3 - cluster where the file system is defined | 
|---|
| 4046 | #            $4 - name of the remote device (no /dev/ prefix) | 
|---|
| 4047 | #            $5 - "odd state" flag indicating whether disks may be in | 
|---|
| 4048 | #                   an odd state (this can happen when a disk command | 
|---|
| 4049 | #                   did not complete normally); "yes" indicates there | 
|---|
| 4050 | #                   may be disks in an odd state, "no" indicates no | 
|---|
| 4051 | #            $6 - default mount point for the file system | 
|---|
| 4052 | #            $7 - default options string for the mount command | 
|---|
| 4053 | # | 
|---|
| 4054 | # Returns:   0 - file system found | 
|---|
| 4055 | #           19 - file system not found (ENODEV) | 
|---|
| 4056 | #           nn - some other unexpected error | 
|---|
| 4057 | # | 
|---|
| 4058 | ############################################################################## | 
|---|
| 4059 | function findFS  # <device> <sdrfs> [{deviceName|mountPoint} [<suppressMsg>]] | 
|---|
| 4060 | { | 
|---|
| 4061 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 4062 | [[ -n $DEBUG || -n $DEBUGfindFS ]] && set -x | 
|---|
| 4063 | $mmTRACE_ENTER "$*" | 
|---|
| 4064 | typeset inputValue=$1 | 
|---|
| 4065 | typeset sdrfs=$2 | 
|---|
| 4066 | typeset inputType=$3 | 
|---|
| 4067 | typeset suppressMsg=$4 | 
|---|
| 4068 |  | 
|---|
| 4069 | typeset rc=0 | 
|---|
| 4070 | typeset device deviceName fqDeviceName cluster result remoteDevice | 
|---|
| 4071 | typeset oddState defaultOptions defaultMountPoint | 
|---|
| 4072 |  | 
|---|
| 4073 | # Determine what type of search this is going to be: | 
|---|
| 4074 | # by device name or by mount point. | 
|---|
| 4075 | if [[ $inputType != mountPoint ]] | 
|---|
| 4076 | then | 
|---|
| 4077 | # Find the file system using its device name. | 
|---|
| 4078 | inputType=deviceName | 
|---|
| 4079 | device=$inputValue | 
|---|
| 4080 | deviceName=${device##+(/)dev+(/)} | 
|---|
| 4081 |  | 
|---|
| 4082 | # Verify the device name. | 
|---|
| 4083 | if [[ $deviceName = /* ]] | 
|---|
| 4084 | then | 
|---|
| 4085 | # Name starts with a slash, but not /dev/. | 
|---|
| 4086 | [[ -z $suppressMsg ]] && printErrorMsg 169 $mmcmd "$device" | 
|---|
| 4087 | return 1 | 
|---|
| 4088 | elif [[ $deviceName = */* ]] | 
|---|
| 4089 | then | 
|---|
| 4090 | # Name contains a slash. | 
|---|
| 4091 | [[ -z $suppressMsg ]] && printErrorMsg 170 $mmcmd "$device" | 
|---|
| 4092 | return 1 | 
|---|
| 4093 | else | 
|---|
| 4094 | : # The device name seems to be OK. | 
|---|
| 4095 | fi | 
|---|
| 4096 | else | 
|---|
| 4097 | # Find the file system using its mount point. | 
|---|
| 4098 | mountPoint=$inputValue | 
|---|
| 4099 |  | 
|---|
| 4100 | # Verify the mount point. | 
|---|
| 4101 | if [[ $mountPoint != /* ]] | 
|---|
| 4102 | then | 
|---|
| 4103 | # Mount point can not be a relative path name. | 
|---|
| 4104 | [[ -z $suppressMsg ]] && printErrorMsg 148 $mmcmd "$mountPoint" | 
|---|
| 4105 | return 1 | 
|---|
| 4106 | fi | 
|---|
| 4107 | fi  # end of if [[ $inputType != mountpoint ]] | 
|---|
| 4108 |  | 
|---|
| 4109 | # Retrieve the needed information for the file system. | 
|---|
| 4110 | result=$($awk -F: '                                                         \ | 
|---|
| 4111 | BEGIN {                                                                   \ | 
|---|
| 4112 | # Assume the file system does not exist.                                \ | 
|---|
| 4113 | { fsFound = 0 }                                                         \ | 
|---|
| 4114 | }                                                                         \ | 
|---|
| 4115 | \ | 
|---|
| 4116 | $'$LINE_TYPE_Field' == "'$SG_HEADR'" {                                    \ | 
|---|
| 4117 | # Starting a new file system.  Save some values in case                 \ | 
|---|
| 4118 | # this turns out to be the fs that we are looking for.                  \ | 
|---|
| 4119 | if ( $'$REMOTE_DEV_NAME_Field' != "" ) {                                \ | 
|---|
| 4120 | { remoteDevName = $'$REMOTE_DEV_NAME_Field' }                         \ | 
|---|
| 4121 | } else {                                                                \ | 
|---|
| 4122 | { remoteDevName = $'$DEV_NAME_Field' }                                \ | 
|---|
| 4123 | }                                                                       \ | 
|---|
| 4124 | if ( $'$ODD_STATE_Field' == "" || $'$ODD_STATE_Field' == "no" ) {       \ | 
|---|
| 4125 | { oddStateField = "no" }                                              \ | 
|---|
| 4126 | } else {                                                                \ | 
|---|
| 4127 | { oddStateField = "yes" }                                             \ | 
|---|
| 4128 | }                                                                       \ | 
|---|
| 4129 | { fsType        = $'$FS_TYPE_Field' }                                   \ | 
|---|
| 4130 | { deviceName    = "" }                                                  \ | 
|---|
| 4131 | { next }                                                                \ | 
|---|
| 4132 | }                                                                         \ | 
|---|
| 4133 | \ | 
|---|
| 4134 | $'$LINE_TYPE_Field'   == "'$SG_ETCFS'"         &&                         \ | 
|---|
| 4135 | $'$LINE_NUMBER_Field' == "'$MOUNT_POINT_Line'"  {                         \ | 
|---|
| 4136 | # This line contains both the device name and the mount point.          \ | 
|---|
| 4137 | # Match one of the two fields based on the type of search.              \ | 
|---|
| 4138 | if ( search == "deviceName" && $'$DEV_NAME_Field'   == "'$deviceName'" ||   \ | 
|---|
| 4139 | search == "mountPoint" && $'$ETCFS_TEXT_Field' == "'$mountPoint'" ) {  \ | 
|---|
| 4140 | { homeCluster = $'$NODESETID_Field' }                                 \ | 
|---|
| 4141 | { deviceName  = $'$DEV_NAME_Field' }                                  \ | 
|---|
| 4142 | { mountPoint  = $'$ETCFS_TEXT_Field' }                                \ | 
|---|
| 4143 | { fsFound     = 1 }                                                   \ | 
|---|
| 4144 | }                                                                       \ | 
|---|
| 4145 | { next }                                                                \ | 
|---|
| 4146 | }                                                                         \ | 
|---|
| 4147 | \ | 
|---|
| 4148 | $'$LINE_TYPE_Field' == "'$SG_MOUNT'"  &&                                  \ | 
|---|
| 4149 | $'$DEV_NAME_Field'  == deviceName      {                                  \ | 
|---|
| 4150 | { options = $'$RW_OPT_Field' }                                          \ | 
|---|
| 4151 | if ( $'$MTIME_OPT_Field' != "" ) {                                      \ | 
|---|
| 4152 | { options = options ","$'$MTIME_OPT_Field' }                          \ | 
|---|
| 4153 | }                                                                       \ | 
|---|
| 4154 | if ( $'$ATIME_OPT_Field' != "" ) {                                      \ | 
|---|
| 4155 | { options = options ","$'$ATIME_OPT_Field' }                          \ | 
|---|
| 4156 | }                                                                       \ | 
|---|
| 4157 | if ( $'$OTHER_OPT_Field' != "" ) {                                      \ | 
|---|
| 4158 | { options = options ","$'$OTHER_OPT_Field' }                          \ | 
|---|
| 4159 | }                                                                       \ | 
|---|
| 4160 | if ( $'$QUOTA_OPT_Field' != "" ) {                                      \ | 
|---|
| 4161 | { options = options ",quota="$'$QUOTA_OPT_Field' }                    \ | 
|---|
| 4162 | }                                                                       \ | 
|---|
| 4163 | if ( fsType == "'$remotefs'" ) {                                        \ | 
|---|
| 4164 | { options = options ",dev="homeCluster":"remoteDevName }              \ | 
|---|
| 4165 | { options = options ",ldev="deviceName }                              \ | 
|---|
| 4166 | } else {                                                                \ | 
|---|
| 4167 | { options = options ",dev="deviceName }                               \ | 
|---|
| 4168 | }                                                                       \ | 
|---|
| 4169 | { exit }                                                                \ | 
|---|
| 4170 | }                                                                         \ | 
|---|
| 4171 | \ | 
|---|
| 4172 | END {                                                                     \ | 
|---|
| 4173 | # If the file system was found, print the result.                       \ | 
|---|
| 4174 | if ( fsFound ) {                                                        \ | 
|---|
| 4175 | { print homeCluster   " "                                             \ | 
|---|
| 4176 | deviceName    " "                                             \ | 
|---|
| 4177 | remoteDevName " "                                             \ | 
|---|
| 4178 | oddStateField " "                                             \ | 
|---|
| 4179 | mountPoint    " "                                             \ | 
|---|
| 4180 | options         }                                             \ | 
|---|
| 4181 | }                                                                       \ | 
|---|
| 4182 | }                                                                         \ | 
|---|
| 4183 | ' search=$inputType $sdrfs) | 
|---|
| 4184 | checkForErrors awk $? | 
|---|
| 4185 |  | 
|---|
| 4186 | # If nothing was found, print "not found" message (if not suppressed) | 
|---|
| 4187 | # and return. | 
|---|
| 4188 | if [[ -z $result ]] | 
|---|
| 4189 | then | 
|---|
| 4190 | if [[ -z $suppressMsg ]] | 
|---|
| 4191 | then | 
|---|
| 4192 | if [[ $inputType = mountPoint ]] | 
|---|
| 4193 | then | 
|---|
| 4194 | # There is no file system with the specified mount point. | 
|---|
| 4195 | printErrorMsg 279 $mmcmd "$mountPoint" | 
|---|
| 4196 | else | 
|---|
| 4197 | # There is no file system with the specified device name. | 
|---|
| 4198 | printErrorMsg 288 $mmcmd "$device" | 
|---|
| 4199 | fi | 
|---|
| 4200 | fi | 
|---|
| 4201 | return $MM_FsNotFound | 
|---|
| 4202 | fi  # end of if [[ -z $result ]] | 
|---|
| 4203 |  | 
|---|
| 4204 | # If we are here, the file system exists; | 
|---|
| 4205 | # parse the results of the awk. | 
|---|
| 4206 | set -f ; set -- $result ; set +f | 
|---|
| 4207 | cluster=$1 | 
|---|
| 4208 | deviceName=$2 | 
|---|
| 4209 | remoteDevice=$3 | 
|---|
| 4210 | oddState=$4 | 
|---|
| 4211 | defaultMountPoint=$5 | 
|---|
| 4212 | defaultOptions=$6 | 
|---|
| 4213 |  | 
|---|
| 4214 | fqDeviceName="/dev/$deviceName" | 
|---|
| 4215 |  | 
|---|
| 4216 | # Output the data. | 
|---|
| 4217 | print -- $fqDeviceName $deviceName $cluster $remoteDevice \ | 
|---|
| 4218 | $oddState $defaultMountPoint $defaultOptions | 
|---|
| 4219 | return 0 | 
|---|
| 4220 |  | 
|---|
| 4221 | }  #----- end of function findFS --------------------------------- | 
|---|
| 4222 |  | 
|---|
| 4223 |  | 
|---|
| 4224 | ############################################################################ | 
|---|
| 4225 | # | 
|---|
| 4226 | # Function:  Determine which nodes have the specified file systems mounted. | 
|---|
| 4227 | # | 
|---|
| 4228 | # Input:     $1 - file system to check or:  all, all_local, or all_remote | 
|---|
| 4229 | #            $2 - scope of mount checking (list of cluster names) | 
|---|
| 4230 | #            $3 - show output for individual nodes: yes, no, unformatted | 
|---|
| 4231 | #            $4 - (optional) assume cached data is current | 
|---|
| 4232 | # | 
|---|
| 4233 | # Output:    lists of nodes that have the specified file systems mounted | 
|---|
| 4234 | # | 
|---|
| 4235 | # Returns:   0 - command completed successfully | 
|---|
| 4236 | #            non-zero - error encountered | 
|---|
| 4237 | # | 
|---|
| 4238 | ############################################################################ | 
|---|
| 4239 | function lsmount   # <fsToShow> <scope> <showNodes> [norefresh] | 
|---|
| 4240 | { | 
|---|
| 4241 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 4242 | [[ -n $DEBUG || -n $DEBUGlsmount ]] && set -x | 
|---|
| 4243 | $mmTRACE_ENTER "$*" | 
|---|
| 4244 | typeset fsToShow="$1" | 
|---|
| 4245 | typeset scope="$2" | 
|---|
| 4246 | typeset showNodes="$3" | 
|---|
| 4247 | typeset -l refreshArg=$4 | 
|---|
| 4248 |  | 
|---|
| 4249 | typeset rc=0 | 
|---|
| 4250 | typeset oneCluster=false | 
|---|
| 4251 | typeset hdrlineStripClusterName=no | 
|---|
| 4252 | typeset nodelineStripClusterName=yes | 
|---|
| 4253 | typeset fsToCheck fqDeviceName localDevName deviceName | 
|---|
| 4254 | typeset fsList homeCluster headerMsg clusterName Coption | 
|---|
| 4255 | typeset hdrLine linePrefix localCluster | 
|---|
| 4256 | integer numNodes | 
|---|
| 4257 |  | 
|---|
| 4258 | # If more than one file system is requested or the file system name | 
|---|
| 4259 | # is not fully-qualified, ensure the local environment is up-to-date | 
|---|
| 4260 | # and generate a list of the file systems. | 
|---|
| 4261 |  | 
|---|
| 4262 | # Process the file system parameter. | 
|---|
| 4263 | if [[ $fsToShow = all  ||  $fsToShow = all_local || | 
|---|
| 4264 | $fsToShow = all_remote || $fsToShow != *:* ]] | 
|---|
| 4265 | then | 
|---|
| 4266 | # Either more than one file system is requested, | 
|---|
| 4267 | # or the file system name is not fully-qualified. | 
|---|
| 4268 |  | 
|---|
| 4269 | # Ensure the local environment is up-to-date. | 
|---|
| 4270 | if [[ $refreshArg != "norefresh" ]] | 
|---|
| 4271 | then | 
|---|
| 4272 | gpfsInitOutput=$(gpfsInit nolock) | 
|---|
| 4273 | setGlobalVar $? $gpfsInitOutput | 
|---|
| 4274 | fi | 
|---|
| 4275 |  | 
|---|
| 4276 | # Generate a list of the fully-qualified file system names. | 
|---|
| 4277 | fsList=$($awk -F: '                                  \ | 
|---|
| 4278 | $'$LINE_TYPE_Field' == "'$SG_HEADR'" {             \ | 
|---|
| 4279 | if ( $'$DEV_NAME_Field' == "'$fsToShow'" ) {     \ | 
|---|
| 4280 | # This is the file system that we want.        \ | 
|---|
| 4281 | # See if the fs is local or remote.            \ | 
|---|
| 4282 | if ( $'$FS_TYPE_Field' == "'$remotefs'" ) {    \ | 
|---|
| 4283 | { printf $'$NODESETID_Field' ":"             \ | 
|---|
| 4284 | $'$REMOTE_DEV_NAME_Field' ":"       \ | 
|---|
| 4285 | $'$DEV_NAME_Field' }                \ | 
|---|
| 4286 | } else {                                       \ | 
|---|
| 4287 | { printf ":" $'$DEV_NAME_Field' ":" }        \ | 
|---|
| 4288 | }                                              \ | 
|---|
| 4289 | # Nothing else to do.                          \ | 
|---|
| 4290 | { exit  0 }                                    \ | 
|---|
| 4291 | } else if ( "'$fsToShow'" == "all" ) {           \ | 
|---|
| 4292 | # We want all file systems, local and remote.  \ | 
|---|
| 4293 | if ( $'$FS_TYPE_Field' == "'$remotefs'" ) {    \ | 
|---|
| 4294 | { printf $'$NODESETID_Field' ":"             \ | 
|---|
| 4295 | $'$REMOTE_DEV_NAME_Field' ":"       \ | 
|---|
| 4296 | $'$DEV_NAME_Field' "," }            \ | 
|---|
| 4297 | } else {                                       \ | 
|---|
| 4298 | { printf ":" $'$DEV_NAME_Field' ":," }       \ | 
|---|
| 4299 | }                                              \ | 
|---|
| 4300 | \ | 
|---|
| 4301 | } else if ( "'$fsToShow'" == "all_local" ) {     \ | 
|---|
| 4302 | # We want all local file systems.              \ | 
|---|
| 4303 | if ( $'$FS_TYPE_Field' == "'$remotefs'" ) {    \ | 
|---|
| 4304 | { next }                                     \ | 
|---|
| 4305 | } else {                                       \ | 
|---|
| 4306 | { printf ":" $'$DEV_NAME_Field' ":," }       \ | 
|---|
| 4307 | }                                              \ | 
|---|
| 4308 | \ | 
|---|
| 4309 | } else if ( "'$fsToShow'" == "all_remote" ) {    \ | 
|---|
| 4310 | # We want all remote file systems.             \ | 
|---|
| 4311 | if ( $'$FS_TYPE_Field' == "'$remotefs'" ) {    \ | 
|---|
| 4312 | { printf $'$NODESETID_Field' ":"             \ | 
|---|
| 4313 | $'$REMOTE_DEV_NAME_Field' ":"       \ | 
|---|
| 4314 | $'$DEV_NAME_Field' "," }            \ | 
|---|
| 4315 | } else {                                       \ | 
|---|
| 4316 | { next }                                     \ | 
|---|
| 4317 | }                                              \ | 
|---|
| 4318 | } else {                                         \ | 
|---|
| 4319 | { next }                                       \ | 
|---|
| 4320 | }                                                \ | 
|---|
| 4321 | }                                                  \ | 
|---|
| 4322 | END { printf "\n" }                                \ | 
|---|
| 4323 | ' $mmsdrfsFile) | 
|---|
| 4324 | checkForErrors awk $? | 
|---|
| 4325 |  | 
|---|
| 4326 | # Strip trailing commas, if any. | 
|---|
| 4327 | fsList=${fsList%%,} | 
|---|
| 4328 |  | 
|---|
| 4329 | else | 
|---|
| 4330 | # Only one file system was specified using its fully-qualified name. | 
|---|
| 4331 | fsList=$fsToShow | 
|---|
| 4332 | fi  # end of if [[ $fsToShow = all || $fsToShow = all_local ... | 
|---|
| 4333 |  | 
|---|
| 4334 | # Return if no file systems were found. | 
|---|
| 4335 | if [[ -z $fsList ]] | 
|---|
| 4336 | then | 
|---|
| 4337 | if [[ $fsToShow = all || $fsToShow = all_local ]] | 
|---|
| 4338 | then | 
|---|
| 4339 | # No file systems were found in the cluster. | 
|---|
| 4340 | printErrorMsg 200 $mmcmd | 
|---|
| 4341 | elif [[ $fsToShow = all_remote ]] | 
|---|
| 4342 | then | 
|---|
| 4343 | # There are no remote file systems. | 
|---|
| 4344 | printErrorMsg 193 $mmcmd | 
|---|
| 4345 | else | 
|---|
| 4346 | # The specified file system was not found. | 
|---|
| 4347 | printErrorMsg 288 $mmcmd "$fsToShow" | 
|---|
| 4348 | fi  # end of if [[ $fsToShow = all || $fsToShow = all_local ]] | 
|---|
| 4349 |  | 
|---|
| 4350 | # Give up. | 
|---|
| 4351 | return $MM_FsNotFound | 
|---|
| 4352 | fi # #end of if [[ -z $fsList ]] | 
|---|
| 4353 |  | 
|---|
| 4354 | # If the user did not specify the -C parameter on mmlsmount, | 
|---|
| 4355 | # see if this cluster has knowledge of other clusters or if it | 
|---|
| 4356 | # has granted access to its file systems to remote clusters. | 
|---|
| 4357 | # If neither is true, suppress the cluster name in the output. | 
|---|
| 4358 | if [[ $scope = NULL ]] | 
|---|
| 4359 | then | 
|---|
| 4360 | oneCluster=$($awk -F: '                               \ | 
|---|
| 4361 | $'$LINE_TYPE_Field' == "'$AUTHORIZED_CLUSTER'" ||   \ | 
|---|
| 4362 | $'$LINE_TYPE_Field' == "'$REM_CLUSTER'"         {   \ | 
|---|
| 4363 | { print "false" }                                 \ | 
|---|
| 4364 | { exit }                                          \ | 
|---|
| 4365 | }                                                   \ | 
|---|
| 4366 | END { print "true" }                                \ | 
|---|
| 4367 | ' $mmsdrfsFile) | 
|---|
| 4368 | checkForErrors awk $? | 
|---|
| 4369 | fi  # end of if [[ $scope = NULL ]] | 
|---|
| 4370 |  | 
|---|
| 4371 | if [[ $showNodes = unformatted ]] | 
|---|
| 4372 | then | 
|---|
| 4373 | # Generate and print the header line. | 
|---|
| 4374 | hdrLine="mmlsmount::HEADER:version:reserved:reserved" | 
|---|
| 4375 | hdrLine="${hdrLine}:localDevName:realDevName:owningCluster" | 
|---|
| 4376 | hdrLine="${hdrLine}:totalNodes:nodeIP:nodeName:clusterName" | 
|---|
| 4377 | print -- "${hdrLine}:" | 
|---|
| 4378 |  | 
|---|
| 4379 | # Generate the prefix for the data lines. | 
|---|
| 4380 | linePrefix="mmlsmount::0:1::" | 
|---|
| 4381 |  | 
|---|
| 4382 | # Find our cluster name (needed for the unformatted output). | 
|---|
| 4383 | localCluster=$($head -1 $mmsdrfsFile | $GETVALUE $CLUSTER_NAME_Field) | 
|---|
| 4384 | fi  # end of if [[ $showNodes = yes ]] | 
|---|
| 4385 |  | 
|---|
| 4386 | # Process the list of file systems. | 
|---|
| 4387 | IFS=',' | 
|---|
| 4388 | for fsToCheck in $fsList | 
|---|
| 4389 | do | 
|---|
| 4390 | # Parse the information for the file system to be checked. | 
|---|
| 4391 | IFS=':' | 
|---|
| 4392 | set -f ; set -- $fsToCheck ; set +f | 
|---|
| 4393 | homeCluster=$1 | 
|---|
| 4394 | deviceName=$2 | 
|---|
| 4395 | localDevName=$3 | 
|---|
| 4396 |  | 
|---|
| 4397 | if [[ -z $homeCluster || $homeCluster = $HOME_CLUSTER ]] | 
|---|
| 4398 | then | 
|---|
| 4399 | fqDeviceName="$deviceName" | 
|---|
| 4400 | else | 
|---|
| 4401 | fqDeviceName="${homeCluster}:${deviceName}" | 
|---|
| 4402 | fi | 
|---|
| 4403 |  | 
|---|
| 4404 | # Process the mount check scope parameter. | 
|---|
| 4405 | IFS=',' | 
|---|
| 4406 | for clusterName in $scope | 
|---|
| 4407 | do | 
|---|
| 4408 | IFS="$IFS_sv" | 
|---|
| 4409 |  | 
|---|
| 4410 | # Determine the value for the -C option on tsstatus. | 
|---|
| 4411 | if [[ $clusterName = all || $clusterName = NULL || $clusterName = $CHECK_ALL ]] | 
|---|
| 4412 | then | 
|---|
| 4413 | Coption="" | 
|---|
| 4414 | else | 
|---|
| 4415 | [[ $clusterName = "."  || $clusterName = all_local ]] &&  \ | 
|---|
| 4416 | clusterName=$($head -1 $mmsdrfsFile | $GETVALUE $CLUSTER_NAME_Field) | 
|---|
| 4417 | Coption="-C $clusterName" | 
|---|
| 4418 | fi | 
|---|
| 4419 |  | 
|---|
| 4420 | # Determine whether to strip the cluster name from the header line | 
|---|
| 4421 | # or from the node lines for each of the possible scenarios. | 
|---|
| 4422 | # The normal case is to have the cluster name on the header line | 
|---|
| 4423 | # and not on the node lines, but the behavior is different if the | 
|---|
| 4424 | # -C was not specified or if a value of all or all_remote was given. | 
|---|
| 4425 | # If -C was not specified and there is only one cluster, we will not | 
|---|
| 4426 | # output cluster names.  If all or all_remote was specified for -C, | 
|---|
| 4427 | # we will not output cluster names on the header line, but we will | 
|---|
| 4428 | # show cluster names on the node lines. | 
|---|
| 4429 | if [[ $clusterName = NULL && $oneCluster = true ]] | 
|---|
| 4430 | then | 
|---|
| 4431 | hdrlineStripClusterName=yes | 
|---|
| 4432 | nodelineStripClusterName=yes | 
|---|
| 4433 | elif [[ $clusterName = NULL       || | 
|---|
| 4434 | $clusterName = all        || | 
|---|
| 4435 | $clusterName = all_remote ]] | 
|---|
| 4436 | then | 
|---|
| 4437 | hdrlineStripClusterName=yes | 
|---|
| 4438 | nodelineStripClusterName=no | 
|---|
| 4439 | else | 
|---|
| 4440 | hdrlineStripClusterName=no | 
|---|
| 4441 | nodelineStripClusterName=yes | 
|---|
| 4442 | fi | 
|---|
| 4443 |  | 
|---|
| 4444 | # Determine whether anybody has the file system mounted. | 
|---|
| 4445 | LC_ALL=C $tsstatus -m $fqDeviceName $Coption >$tmpfile 2>$errMsg | 
|---|
| 4446 | rc=$(remapRC $?) | 
|---|
| 4447 | if [[ $rc -eq 0 ]] | 
|---|
| 4448 | then | 
|---|
| 4449 | # The file system is mounted on at least one of the nodes that | 
|---|
| 4450 | # we care about.  The list of node names is returned by tsstatus. | 
|---|
| 4451 | # | 
|---|
| 4452 | #   Note that the tsstatus output comes from the stripe group | 
|---|
| 4453 | #   manager node which always resides in the cluster that owns | 
|---|
| 4454 | #   the file system.  In the case of remote file systems, the | 
|---|
| 4455 | #   manager node has no knowledge about the local name for the | 
|---|
| 4456 | #   file system.  Therefore, we have to intercept the tsstatus | 
|---|
| 4457 | #   output and replace the header line with one that is more | 
|---|
| 4458 | #   meaningful for the local cluster.  To keep the code simple, | 
|---|
| 4459 | #   we do this for both local and remote file systems. | 
|---|
| 4460 | # | 
|---|
| 4461 | if [[ -s $tmpfile ]] | 
|---|
| 4462 | then | 
|---|
| 4463 | # Determine the number of nodes that have the file system mounted. | 
|---|
| 4464 | # We subtract 2 because tsstatus produces a blank line and a header. | 
|---|
| 4465 | numNodes=$($awk 'END { print NR - 2 }' $tmpfile) | 
|---|
| 4466 |  | 
|---|
| 4467 | # Generate the output for this file system. | 
|---|
| 4468 | if [[ $showNodes = yes ]] | 
|---|
| 4469 | then | 
|---|
| 4470 | # We come here if a list of the nodes should be shown. | 
|---|
| 4471 | # Construct a message to be used in place of the first line | 
|---|
| 4472 | # in the tsstatus output.  If checking a remote file system, | 
|---|
| 4473 | # the local device name can be passed as a command argument. | 
|---|
| 4474 | if [[ $hdrlineStripClusterName = yes ]] | 
|---|
| 4475 | then | 
|---|
| 4476 | if [[ -n $localDevName ]] | 
|---|
| 4477 | then | 
|---|
| 4478 | headerMsg=$(printInfoMsg 521  \ | 
|---|
| 4479 | "$localDevName" "($fqDeviceName)" "$numNodes") | 
|---|
| 4480 | else | 
|---|
| 4481 | headerMsg=$(printInfoMsg 522 "$fqDeviceName" "$numNodes") | 
|---|
| 4482 | fi | 
|---|
| 4483 | else | 
|---|
| 4484 | if [[ -n $localDevName ]] | 
|---|
| 4485 | then | 
|---|
| 4486 | headerMsg=$(printInfoMsg 477  \ | 
|---|
| 4487 | "$localDevName" "($fqDeviceName)" "$numNodes" "$clusterName") | 
|---|
| 4488 | else | 
|---|
| 4489 | headerMsg=$(printInfoMsg 478  \ | 
|---|
| 4490 | "$fqDeviceName" "$numNodes" "$clusterName") | 
|---|
| 4491 | fi | 
|---|
| 4492 | fi | 
|---|
| 4493 |  | 
|---|
| 4494 | # Filter the result from the tsstatus command and replace | 
|---|
| 4495 | # the header line with our own version. | 
|---|
| 4496 | $awk '                                                          \ | 
|---|
| 4497 | /File system/ && /is managed by node/ && /and mounted on:/ {  \ | 
|---|
| 4498 | { print "'"$headerMsg"'" }                                  \ | 
|---|
| 4499 | { next }                                                    \ | 
|---|
| 4500 | }                                                             \ | 
|---|
| 4501 | { if (stripClusterName == "yes") {                            \ | 
|---|
| 4502 | { printf ("  %-15s %s \n", $1, $2) }                      \ | 
|---|
| 4503 | } else {                                                    \ | 
|---|
| 4504 | { print $0 }                                              \ | 
|---|
| 4505 | }                                                           \ | 
|---|
| 4506 | }                                                             \ | 
|---|
| 4507 | ' stripClusterName="$nodelineStripClusterName" $tmpfile | 
|---|
| 4508 |  | 
|---|
| 4509 | elif [[ $showNodes = unformatted ]] | 
|---|
| 4510 | then | 
|---|
| 4511 | # We come here if the information should be presented in | 
|---|
| 4512 | # colon separated fields (mmlsmount -Y). | 
|---|
| 4513 | [[ -z $localDevName ]] && localDevName="$deviceName" | 
|---|
| 4514 | [[ -z $homeCluster  ]] && homeCluster="$localCluster" | 
|---|
| 4515 | $awk '                                                           \ | 
|---|
| 4516 | NR > 2 { print "'$linePrefix':'$localDevName':'$deviceName':"  \ | 
|---|
| 4517 | "'$homeCluster':'$numNodes':"$1":"$2":"$3":" }  \ | 
|---|
| 4518 | ' $tmpfile | 
|---|
| 4519 |  | 
|---|
| 4520 | else | 
|---|
| 4521 | # We come here if a list of the nodes is not desired. | 
|---|
| 4522 | # Construct the summary message to be used in place of | 
|---|
| 4523 | # the tsstatus output.  If checking a remote file system, | 
|---|
| 4524 | # the local device name can be passed as a command argument. | 
|---|
| 4525 | if [[ $hdrlineStripClusterName = yes ]] | 
|---|
| 4526 | then | 
|---|
| 4527 | if [[ -n $localDevName ]] | 
|---|
| 4528 | then | 
|---|
| 4529 | printInfoMsg 553 "$localDevName" "($fqDeviceName)" "$numNodes" | 
|---|
| 4530 | else | 
|---|
| 4531 | printInfoMsg 554 "$fqDeviceName" "$numNodes" | 
|---|
| 4532 | fi | 
|---|
| 4533 | else | 
|---|
| 4534 | if [[ -n $localDevName ]] | 
|---|
| 4535 | then | 
|---|
| 4536 | printInfoMsg 479  \ | 
|---|
| 4537 | "$localDevName" "($fqDeviceName)" "$numNodes" "$clusterName" | 
|---|
| 4538 | else | 
|---|
| 4539 | printInfoMsg 480 "$fqDeviceName" "$numNodes" "$clusterName" | 
|---|
| 4540 | fi | 
|---|
| 4541 | fi | 
|---|
| 4542 | fi | 
|---|
| 4543 | else | 
|---|
| 4544 | # tstatus -m returned no data.  This should not be the case here. | 
|---|
| 4545 | # Show error output, if any, and return. | 
|---|
| 4546 | [[ -s $errMsg ]] && $cat $errMsg 1>&2 | 
|---|
| 4547 | $rm -f $errMsg | 
|---|
| 4548 |  | 
|---|
| 4549 | # Unexpected error. | 
|---|
| 4550 | printErrorMsg 171 $mmcmd "function lsmount - no tsstatus output" 1 | 
|---|
| 4551 | return 1 | 
|---|
| 4552 | fi  # end of if [[ -s $tmpfile ]] | 
|---|
| 4553 |  | 
|---|
| 4554 | elif [[ $rc -eq 2 ]] | 
|---|
| 4555 | then | 
|---|
| 4556 | # The file system is not mounted on any of the nodes that | 
|---|
| 4557 | # we are interested in.  That's OK, just put out a message. | 
|---|
| 4558 | rc=0 | 
|---|
| 4559 | if [[ $showNodes = unformatted ]] | 
|---|
| 4560 | then | 
|---|
| 4561 | # We come here if the information should be presented in | 
|---|
| 4562 | # colon separated fields (mmlsmount -Y). | 
|---|
| 4563 | [[ -z $localDevName ]] && localDevName="$deviceName" | 
|---|
| 4564 | [[ -z $homeCluster  ]] && homeCluster="$localCluster" | 
|---|
| 4565 | print -- "${linePrefix}:${localDevName}:${deviceName}:${homeCluster}:0::::" | 
|---|
| 4566 | elif [[ -n $localDevName ]] | 
|---|
| 4567 | then | 
|---|
| 4568 | if [[ -z $Coption ]] | 
|---|
| 4569 | then | 
|---|
| 4570 | # The file system is not mounted. | 
|---|
| 4571 | printInfoMsg 541 "$localDevName" "($fqDeviceName)" | 
|---|
| 4572 | else | 
|---|
| 4573 | if [[ $clusterName = all_remote ]] | 
|---|
| 4574 | then | 
|---|
| 4575 | # The file system is not mounted in any remote cluster. | 
|---|
| 4576 | printInfoMsg 542 "$localDevName" "($fqDeviceName)" | 
|---|
| 4577 | else | 
|---|
| 4578 | # The file system is not mounted in the specified cluster. | 
|---|
| 4579 | printInfoMsg 543 "$localDevName" "($fqDeviceName)" "$clusterName" | 
|---|
| 4580 | fi | 
|---|
| 4581 | fi | 
|---|
| 4582 | else | 
|---|
| 4583 | if [[ -z $Coption ]] | 
|---|
| 4584 | then | 
|---|
| 4585 | # The file system is not mounted. | 
|---|
| 4586 | printInfoMsg 544 "$fqDeviceName" | 
|---|
| 4587 | else | 
|---|
| 4588 | if [[ $clusterName = all_remote ]] | 
|---|
| 4589 | then | 
|---|
| 4590 | # The file system is not mounted in any remote cluster. | 
|---|
| 4591 | printInfoMsg 545 "$fqDeviceName" | 
|---|
| 4592 | else | 
|---|
| 4593 | # The file system is not mounted in the specified cluster. | 
|---|
| 4594 | printInfoMsg 546 "$fqDeviceName" "$clusterName" | 
|---|
| 4595 | fi | 
|---|
| 4596 | fi | 
|---|
| 4597 | fi  # end of if [[ -n $localDevName ]] | 
|---|
| 4598 |  | 
|---|
| 4599 | elif [[ $rc -ne $MM_DaemonDown && $rc -ne $MM_QuorumWait ]] | 
|---|
| 4600 | then | 
|---|
| 4601 | # Unexpected error.  Show error output, if any, and continue looping. | 
|---|
| 4602 | if [[ -s $errMsg ]] | 
|---|
| 4603 | then | 
|---|
| 4604 | $cat $errMsg 1>&2 | 
|---|
| 4605 | else | 
|---|
| 4606 | [[ $rc -ne 0 ]] &&  \ | 
|---|
| 4607 | printErrorMsg 113 "$mmcmd" "tsstatus -m $fqDeviceName $Coption" $rc | 
|---|
| 4608 | fi | 
|---|
| 4609 | $rm -f $errMsg | 
|---|
| 4610 | # Command was unable to determine whether the file system is mounted. | 
|---|
| 4611 | if [[ -n $localDevName ]] | 
|---|
| 4612 | then | 
|---|
| 4613 | printErrorMsg 564 $mmcmd "$localDevName" | 
|---|
| 4614 | else | 
|---|
| 4615 | printErrorMsg 564 $mmcmd "$fqDeviceName" | 
|---|
| 4616 | fi | 
|---|
| 4617 |  | 
|---|
| 4618 | else | 
|---|
| 4619 | # GPFS is not ready on this node (rc is MM_DaemonDown or MM_QuorumWait). | 
|---|
| 4620 | # Return quietly. | 
|---|
| 4621 | $rm -f $errMsg | 
|---|
| 4622 | return $rc | 
|---|
| 4623 | fi  # end of if [[ $rc -eq 0 ]] | 
|---|
| 4624 |  | 
|---|
| 4625 | # We were able to successfully determine whether the file | 
|---|
| 4626 | # system is mounted on any node in the current cluster. | 
|---|
| 4627 | # Move to the next cluster in the list. | 
|---|
| 4628 | $rm -f $errMsg | 
|---|
| 4629 | IFS=',' | 
|---|
| 4630 | done  # end of for clusterName in $scope | 
|---|
| 4631 |  | 
|---|
| 4632 | # Move to the next file system. | 
|---|
| 4633 | IFS=',' | 
|---|
| 4634 | done  # end of for fsTocheck in $fsList | 
|---|
| 4635 | IFS="$IFS_sv" | 
|---|
| 4636 |  | 
|---|
| 4637 |  | 
|---|
| 4638 | # Return to the caller. | 
|---|
| 4639 | return $rc | 
|---|
| 4640 |  | 
|---|
| 4641 | }  #----- end of function lsmount -------------------------------- | 
|---|
| 4642 |  | 
|---|
| 4643 |  | 
|---|
| 4644 | ############################################################################# | 
|---|
| 4645 | # | 
|---|
| 4646 | # Function:  Determine if a remote node can be reached. | 
|---|
| 4647 | # | 
|---|
| 4648 | # Input:     $1 - node name (may be null) | 
|---|
| 4649 | #            Note:  Do not add more input parameters. | 
|---|
| 4650 | #                   This function can be called w/o input. | 
|---|
| 4651 | # | 
|---|
| 4652 | # Output:    None | 
|---|
| 4653 | # | 
|---|
| 4654 | # Returns:   0 - node can be reached | 
|---|
| 4655 | #            1 - node can not be reached | 
|---|
| 4656 | # | 
|---|
| 4657 | ############################################################################# | 
|---|
| 4658 | function isNodeReachable  # <nodeName> | 
|---|
| 4659 | { | 
|---|
| 4660 | typeset sourceFile="mmglobfuncs.sh" | 
|---|
| 4661 | [[ -n $DEBUG || -n $DEBUGisNodeReachable ]] && set -x | 
|---|
| 4662 | $mmTRACE_ENTER "$*" | 
|---|
| 4663 | typeset nodeName=$1 | 
|---|
| 4664 |  | 
|---|
| 4665 | typeset maxPingCount=3 | 
|---|
| 4666 | typeset -i pingTimeout=4 | 
|---|
| 4667 | typeset -i pingCount=0 | 
|---|
| 4668 | typeset pingRc=1 | 
|---|
| 4669 |  | 
|---|
| 4670 | while [[ $pingRc -ne 0 && $pingCount -lt $maxPingCount ]] | 
|---|
| 4671 | do | 
|---|
| 4672 | (( pingCount += 1 )) | 
|---|
| 4673 | (( pingTimeout += 1 )) | 
|---|
| 4674 | $ping -w $pingTimeout -c 1 $nodeName >/dev/null 2>/dev/null | 
|---|
| 4675 | pingRc=$? | 
|---|
| 4676 | #   [[ $pingRc -ne 0 ]] && \ | 
|---|
| 4677 | #     print -u2 "$mmcmd: ping $nodeName failed ($pingCount); pingRc=$pingRc" | 
|---|
| 4678 | done | 
|---|
| 4679 |  | 
|---|
| 4680 | return $pingRc | 
|---|
| 4681 |  | 
|---|
| 4682 | }  #----- end of function isNodeReachable ------------------------ | 
|---|
| 4683 |  | 
|---|
| 4684 |  | 
|---|
| 4685 | #################################################################### | 
|---|
| 4686 | # | 
|---|
| 4687 | # Function:  Exec the specified command with the given argv[0] | 
|---|
| 4688 | # | 
|---|
| 4689 | # Input:     $1 - command path | 
|---|
| 4690 | #            $2 - argv[0] | 
|---|
| 4691 | #            $3, $4, ... - arguments to pass to the command | 
|---|
| 4692 | # | 
|---|
| 4693 | # Output:    depends on the executed command | 
|---|
| 4694 | # | 
|---|
| 4695 | # Returns:   No return if the exec call succeded. | 
|---|
| 4696 | # | 
|---|
| 4697 | #################################################################### | 
|---|
| 4698 | function mmexecl  # <cmdpath> <argv0> [ <arg> ... ] | 
|---|
| 4699 | { | 
|---|
| 4700 | # First, we attempt to execute the given command with naked exec, | 
|---|
| 4701 | # without involving the shell.  A successful exec never returns. | 
|---|
| 4702 | # If it does return, it means it failed, in which case we attempt | 
|---|
| 4703 | # to execute the program again, this time using sh, to produce an | 
|---|
| 4704 | # error message and an appropriate return code. | 
|---|
| 4705 | $perl -e "{\ | 
|---|
| 4706 | \$arg0=\$ARGV[0]; \ | 
|---|
| 4707 | shift; \ | 
|---|
| 4708 | exec \$arg0 @ARGV; \ | 
|---|
| 4709 | exec \"sh -c \$arg0\"; \ | 
|---|
| 4710 | }" "$@" | 
|---|
| 4711 |  | 
|---|
| 4712 | return $? | 
|---|
| 4713 |  | 
|---|
| 4714 | }  #----- end of function mmexecl -------------------------------- | 
|---|
| 4715 |  | 
|---|