[16] | 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 | |
---|