[lvm-devel] LVM2 ./WHATS_NEW scripts/fsadm.sh

zkabelac at sourceware.org zkabelac at sourceware.org
Fri Oct 8 14:55:22 UTC 2010


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	zkabelac at sourceware.org	2010-10-08 14:55:20

Modified files:
	.              : WHATS_NEW 
	scripts        : fsadm.sh 

Log message:
	Fix detection of mounted filesystem.
	
	Update the way how fsadm detects mounted filesystem.
	With udev /dev/dm-XXX paths are now returned - but mount or /proc/mounts
	prints names in form of /dev/mapper/vg-lv - so the match was not found.
	Fixex RHBZ #638050.
	
	Current solution uses same trick as mount and detects vg-lv name through
	/sys where available - this should be reasonable safe.
	
	Instead of calling mount without parameter to get actual mount table,
	switch to use /proc/mounts directly.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1751&r2=1.1752
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/scripts/fsadm.sh.diff?cvsroot=lvm2&r1=1.17&r2=1.18

--- LVM2/WHATS_NEW	2010/10/08 14:49:25	1.1751
+++ LVM2/WHATS_NEW	2010/10/08 14:55:19	1.1752
@@ -1,5 +1,6 @@
 Version 2.02.75 - 
 =====================================
+  Fix detection of mounted filesystems for fsadm when udev is used.
   Fix assignment of default value to LVM variable is fsadm.
   Fix support for --yes flag for fsadm.
   Do not execute lvresize with --dry-run option for fsadm.
--- LVM2/scripts/fsadm.sh	2010/10/08 14:49:26	1.17
+++ LVM2/scripts/fsadm.sh	2010/10/08 14:55:20	1.18
@@ -65,6 +65,7 @@
 MOUNTPOINT=
 MOUNTED=
 REMOUNT=
+PROCMOUNTS="/proc/mounts"
 
 IFS_OLD=$IFS
 # without bash $'\n'
@@ -164,10 +165,15 @@
 # detect filesystem on the given device
 # dereference device name if it is symbolic link
 detect_fs() {
-        VOLUME=${1#/dev/}
+	VOLUME_ORIG=$1
+	VOLUME=${1#/dev/}
 	VOLUME=$($READLINK $READLINK_E "/dev/$VOLUME") || error "Cannot get readlink $1"
-	# strip newline from volume name
-	VOLUME=${VOLUME%%$NL}
+	RVOLUME=$VOLUME
+	case "$RVOLUME" in
+	  /dev/dm-[0-9]*)
+		read </sys/block/${RVOLUME#/dev/}/dm/name SYSVOLUME 2>&1 && VOLUME="/dev/mapper/$SYSVOLUME"
+		;;
+	esac
 	# use /dev/null as cache file to be sure about the result
 	# not using option '-o value' to be compatible with older version of blkid
 	FSTYPE=$($BLKID -c /dev/null -s TYPE "$VOLUME") || error "Cannot get FSTYPE of \"$VOLUME\""
@@ -177,11 +183,19 @@
 }
 
 # check if the given device is already mounted and where
+# FIXME: resolve swap usage and device stacking
 detect_mounted()  {
-	$MOUNT >/dev/null || error "Cannot detect mounted device $VOLUME"
-	MOUNTED=$($MOUNT | $GREP "$VOLUME")
-	MOUNTED=${MOUNTED##* on }
-	MOUNTED=${MOUNTED% type *} # allow type in the mount name
+	test -e $PROCMOUNTS || error "Cannot detect mounted device $VOLUME"
+
+	MOUNTED=$($GREP ^"$VOLUME" $PROCMOUNTS)
+
+	# for empty string try again with real volume name
+	test -z "$MOUNTED" && MOUNTED=$($GREP ^"$RVOLUME" $PROCMOUNTS)
+
+	# cut device name prefix and trim everything past mountpoint
+	# echo translates \040 to spaces
+	MOUNTED=${MOUNTED#* }
+	MOUNTED=$(echo -n -e ${MOUNTED%% *})
 	test -n "$MOUNTED"
 }
 




More information about the lvm-devel mailing list