]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_admin: get UUID of mounted filesystem
authorCatherine Hoang <catherine.hoang@oracle.com>
Thu, 5 Jan 2023 00:36:13 +0000 (16:36 -0800)
committerCarlos Maiolino <cem@kernel.org>
Fri, 20 Jan 2023 13:29:25 +0000 (14:29 +0100)
Adapt this tool to call xfs_io to retrieve the UUID of a mounted filesystem.
This is a precursor to enabling xfs_admin to set the UUID of a mounted
filesystem.

Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
db/xfs_admin.sh

index 409975b22286b16cee059370113329ab92639890..b73fb3adc2395d84854f7527f4cdf6305c17b144 100755 (executable)
@@ -5,8 +5,11 @@
 #
 
 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]"
@@ -14,17 +17,37 @@ USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-O v5_feature] [-r rtdev
 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
@@ -38,6 +61,24 @@ 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
+                               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'"