2026-05-05 21:40:46 +00:00
|
|
|
#!/usr/bin/env bash
|
2026-05-08 21:18:22 +00:00
|
|
|
set -euo pipefail
|
2026-05-05 21:40:46 +00:00
|
|
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
|
# shellcheck source=00_env.sh
|
|
|
|
|
. "$SCRIPT_DIR/00_env.sh"
|
|
|
|
|
|
|
|
|
|
BACKGROUND=false
|
|
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
|
printf 'Usage: %s --fs <filesystem> [--execute] [--background]\n' "$(basename "$0")"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while [[ "$#" -gt 0 ]]; do
|
|
|
|
|
case "$1" in
|
|
|
|
|
--fs) FILESYSTEM="${2:-}"; shift 2 ;;
|
|
|
|
|
--execute) DRY_RUN=false; shift ;;
|
|
|
|
|
--background) BACKGROUND=true; shift ;;
|
|
|
|
|
-h|--help) usage; exit 0 ;;
|
|
|
|
|
*) critical "Unknown argument: $1"; usage; exit 2 ;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
if [[ -z "$FILESYSTEM" ]]; then
|
|
|
|
|
critical "Missing required --fs <filesystem>"
|
|
|
|
|
usage
|
|
|
|
|
exit 2
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
for cmd in mmlsdisk mmrestripefs; do
|
|
|
|
|
require_cmd "$cmd" || exit 2
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
warning "Restripe/rebalance can be I/O intensive. Run only in an approved change window."
|
|
|
|
|
|
|
|
|
|
section "Current disk balance"
|
|
|
|
|
mmlsdisk "$FILESYSTEM" 2>&1 | tee -a "$LOG_FILE" || warning "Unable to show current disk state"
|
|
|
|
|
|
|
|
|
|
section "Planned rebalance"
|
|
|
|
|
if [[ "$BACKGROUND" == "true" ]]; then
|
|
|
|
|
if [[ "$DRY_RUN" == "true" ]]; then
|
|
|
|
|
ok "DRY-RUN: mmrestripefs $FILESYSTEM -b &"
|
|
|
|
|
else
|
|
|
|
|
confirm_execute "background restripe for $FILESYSTEM"
|
|
|
|
|
ok "RUN: mmrestripefs $FILESYSTEM -b &"
|
|
|
|
|
mmrestripefs "$FILESYSTEM" -b 2>&1 | tee -a "$LOG_FILE" &
|
|
|
|
|
fi
|
|
|
|
|
else
|
2026-05-08 21:18:22 +00:00
|
|
|
if [[ "$DRY_RUN" == "true" ]]; then
|
|
|
|
|
ok "DRY-RUN: mmrestripefs $FILESYSTEM -b"
|
|
|
|
|
else
|
|
|
|
|
warning "EXECUTE: mmrestripefs $FILESYSTEM -b"
|
|
|
|
|
fi
|
2026-05-05 21:40:46 +00:00
|
|
|
confirm_execute "restripe for $FILESYSTEM"
|
|
|
|
|
if [[ "$DRY_RUN" == "false" ]]; then
|
|
|
|
|
run_cmd mmrestripefs "$FILESYSTEM" -b
|
|
|
|
|
fi
|
|
|
|
|
fi
|