1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

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.
This commit is contained in:
Zdenek Kabelac 2010-10-08 14:55:19 +00:00
parent 0d9ed7ade3
commit 55b94bf393
2 changed files with 22 additions and 7 deletions

View File

@ -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.

View File

@ -65,6 +65,7 @@ BLOCKCOUNT=
MOUNTPOINT=
MOUNTED=
REMOUNT=
PROCMOUNTS="/proc/mounts"
IFS_OLD=$IFS
# without bash $'\n'
@ -164,10 +165,15 @@ decode_size() {
# detect filesystem on the given device
# dereference device name if it is symbolic link
detect_fs() {
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 @@ detect_fs() {
}
# 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"
}