Add GPFS storage expansion toolkit

This commit is contained in:
Mateusz Suski
2026-05-05 21:40:46 +00:00
parent c42d8bfb8f
commit 5dd8c34952
11 changed files with 925 additions and 0 deletions
+76
View File
@@ -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."