#
status=0
+require_offline=""
+require_online=""
DB_OPTS=""
REPAIR_OPTS=""
+IO_OPTS=""
REPAIR_DEV_OPTS=""
LOG_OPTS=""
USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-O v5_feature] [-r rtdev] [-U uuid] device [logdev]"
while getopts "c:efjlL:O:pr:uU:V" c
do
case $c in
- c) REPAIR_OPTS=$REPAIR_OPTS" -c lazycount="$OPTARG;;
- e) DB_OPTS=$DB_OPTS" -c 'version extflg'";;
- f) DB_OPTS=$DB_OPTS" -f";;
- j) DB_OPTS=$DB_OPTS" -c 'version log2'";;
+ c) REPAIR_OPTS=$REPAIR_OPTS" -c lazycount="$OPTARG
+ require_offline=1
+ ;;
+ e) DB_OPTS=$DB_OPTS" -c 'version extflg'"
+ require_offline=1
+ ;;
+ f) DB_OPTS=$DB_OPTS" -f"
+ require_offline=1
+ ;;
+ j) DB_OPTS=$DB_OPTS" -c 'version log2'"
+ require_offline=1
+ ;;
l) DB_OPTS=$DB_OPTS" -r -c label";;
- L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'";;
- O) REPAIR_OPTS=$REPAIR_OPTS" -c $OPTARG";;
- p) DB_OPTS=$DB_OPTS" -c 'version projid32bit'";;
- r) REPAIR_DEV_OPTS=" -r '$OPTARG'";;
- u) DB_OPTS=$DB_OPTS" -r -c uuid";;
- U) DB_OPTS=$DB_OPTS" -c 'uuid "$OPTARG"'";;
+ L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'"
+ require_offline=1
+ ;;
+ O) REPAIR_OPTS=$REPAIR_OPTS" -c $OPTARG"
+ require_offline=1
+ ;;
+ p) DB_OPTS=$DB_OPTS" -c 'version projid32bit'"
+ require_offline=1
+ ;;
+ r) REPAIR_DEV_OPTS=" -r '$OPTARG'"
+ require_offline=1
+ ;;
+ u) DB_OPTS=$DB_OPTS" -r -c uuid"
+ IO_OPTS=$IO_OPTS" -r -c fsuuid"
+ ;;
+ U) DB_OPTS=$DB_OPTS" -c 'uuid "$OPTARG"'"
+ require_offline=1
+ ;;
V) xfs_db -p xfs_admin -V
status=$?
exit $status
shift $OPTIND
case $# in
1|2)
+ if mntpt="$(findmnt -t xfs -f -n -o TARGET "$1" 2>/dev/null)"; then
+ # filesystem is mounted
+ if [ -n "$require_offline" ]; then
+ echo "$1: filesystem is mounted."
+ exit 2
+ fi
+
+ if [ -n "$IO_OPTS" ]; then
+ exec xfs_io -p xfs_admin $IO_OPTS "$mntpt"
+ fi
+ fi
+
+ # filesystem is not mounted
+ if [ -n "$require_online" ]; then
+ echo "$1: filesystem is not mounted"
+ exit 2
+ fi
+
# Pick up the log device, if present
if [ -n "$2" ]; then
LOG_OPTS=" -l '$2'"