Add GPFS storage expansion toolkit
This commit is contained in:
+76
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
# shellcheck source=00_env.sh
|
||||
. "$SCRIPT_DIR/00_env.sh"
|
||||
|
||||
DEVICES=""
|
||||
SERVERS=""
|
||||
OUTPUT=""
|
||||
|
||||
usage() {
|
||||
printf 'Usage: %s --fs <filesystem> --devices "/dev/sdb /dev/sdc" --servers "node1,node2" --failure-group <number> --pool <storage_pool> --usage <dataOnly|metadataOnly|dataAndMetadata> [--output <path>]\n' "$(basename "$0")"
|
||||
}
|
||||
|
||||
while [[ "$#" -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--fs) FILESYSTEM="${2:-}"; shift 2 ;;
|
||||
--devices) DEVICES="${2:-}"; shift 2 ;;
|
||||
--servers) SERVERS="${2:-}"; shift 2 ;;
|
||||
--failure-group) FAILURE_GROUP="${2:-}"; shift 2 ;;
|
||||
--pool) STORAGE_POOL="${2:-}"; shift 2 ;;
|
||||
--usage) USAGE="${2:-}"; shift 2 ;;
|
||||
--output) OUTPUT="${2:-}"; shift 2 ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) critical "Unknown argument: $1"; usage; exit 2 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$FILESYSTEM" || -z "$DEVICES" || -z "$SERVERS" || -z "$FAILURE_GROUP" || -z "$STORAGE_POOL" || -z "$USAGE" ]]; then
|
||||
critical "Missing required input"
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if ! [[ "$FAILURE_GROUP" =~ ^-?[0-9]+$ ]]; then
|
||||
critical "--failure-group must be an integer"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if ! usage_value_valid "$USAGE"; then
|
||||
critical "--usage must be one of: dataOnly, metadataOnly, dataAndMetadata"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [[ -z "$OUTPUT" ]]; then
|
||||
OUTPUT="/tmp/gpfs_nsd_${FILESYSTEM}_${TIMESTAMP}.stanza"
|
||||
fi
|
||||
|
||||
safe_fs="$(printf '%s' "$FILESYSTEM" | tr -c '[:alnum:]_' '_')"
|
||||
|
||||
{
|
||||
printf '# Generated GPFS NSD stanza for filesystem %s\n' "$FILESYSTEM"
|
||||
printf '# Review with storage and cluster teams before use.\n\n'
|
||||
for device in $DEVICES; do
|
||||
if [[ "$device" != /dev/* ]]; then
|
||||
critical "Device must be an absolute /dev path: $device"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
device_base="$(basename "$device" | tr -c '[:alnum:]_' '_')"
|
||||
nsd_name="nsd_${safe_fs}_${device_base}"
|
||||
printf '%%nsd:\n'
|
||||
printf ' device=%s\n' "$device"
|
||||
printf ' nsd=%s\n' "$nsd_name"
|
||||
printf ' servers=%s\n' "$SERVERS"
|
||||
printf ' usage=%s\n' "$USAGE"
|
||||
printf ' failureGroup=%s\n' "$FAILURE_GROUP"
|
||||
printf ' pool=%s\n\n' "$STORAGE_POOL"
|
||||
done
|
||||
} > "$OUTPUT"
|
||||
|
||||
ok "Generated NSD stanza: $OUTPUT"
|
||||
warning "This script only writes a stanza file. It does not create NSDs or modify GPFS."
|
||||
Reference in New Issue
Block a user