#!/usr/bin/env bash set -euo pipefail 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 [--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 " 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 if [[ "$DRY_RUN" == "true" ]]; then ok "DRY-RUN: mmrestripefs $FILESYSTEM -b" else warning "EXECUTE: mmrestripefs $FILESYSTEM -b" fi confirm_execute "restripe for $FILESYSTEM" if [[ "$DRY_RUN" == "false" ]]; then run_cmd mmrestripefs "$FILESYSTEM" -b fi fi