[PATCH v3 2/2] xfs_admin: get UUID of mounted filesystem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 db/xfs_admin.sh | 61 +++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 51 insertions(+), 10 deletions(-)

diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh
index 409975b2..b73fb3ad 100755
--- a/db/xfs_admin.sh
+++ b/db/xfs_admin.sh
@@ -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'"
-- 
2.25.1




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux