blob: 3a7f44ea2519467643e7a5fabc31ca992d88a2d0 [file] [log] [blame]
#!/bin/sh -f
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved.
#
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
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"'"
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
;;
\?) echo $USAGE 1>&2
exit 2
;;
esac
done
set -- extra $@
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
eval xfs_io -p xfs_admin $IO_OPTS "$mntpt"
exit $?
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'"
fi
if [ -n "$DB_OPTS" ]
then
eval xfs_db -x -p xfs_admin $LOG_OPTS $DB_OPTS "$1"
status=$?
fi
if [ -n "$REPAIR_OPTS" ]
then
echo "Running xfs_repair to upgrade filesystem."
eval xfs_repair $LOG_OPTS $REPAIR_DEV_OPTS $REPAIR_OPTS "$1"
status=`expr $? + $status`
fi
;;
*) echo $USAGE 1>&2
exit 2
;;
esac
exit $status