mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
common/rc: use findmnt to check mounted device
Doing 'grep -F "$dev on "' to find the mounted device is not always accurate, e.g. SCRATCH_DEV=/vda6 is mounted but not on SCRATCH_MNT=/vda6/ovl-mnt - aborting Already mounted result: /dev/vda6 on /vda6 type xfs (rw,relatime,context=system_u:object_r:nfs_t:s0,attr2,inode64,noquota) Fix it by using findmnt command and specifying the $dev as mount source, print the result in "$dev $mnt" format. This works for local filesystems, network filesystems and overlayfs, avoids all kinds of tricky and error-prone grep pattern/regex. Also fixed the if-then-fi format in _check_mounted_on() while we're at it. Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Eryu Guan <eguan@redhat.com>
This commit is contained in:
@@ -1462,24 +1462,19 @@ _check_mounted_on()
|
||||
local mnt=$4
|
||||
local type=$5
|
||||
|
||||
# Note that we use -F here so grep doesn't try to interpret an NFS over
|
||||
# IPv6 server as a regular expression. Because of that, we cannot use
|
||||
# ^$dev so we use "$dev on " to avoid matching $dev to mount point field
|
||||
# for overlay case, where $dev is a directory.
|
||||
local mount_rec=`_mount | grep -F "$dev on "`
|
||||
# find $dev as the source, and print result in "$dev $mnt" format
|
||||
local mount_rec=`findmnt -rnc -S $dev -o SOURCE,TARGET`
|
||||
[ -n "$mount_rec" ] || return 1 # 1 = not mounted
|
||||
|
||||
# if it's mounted, make sure its on $mnt
|
||||
if ! (echo $mount_rec | grep -q "$dev on $mnt")
|
||||
then
|
||||
if [ "$mount_rec" != "$dev $mnt" ]; then
|
||||
echo "$devname=$dev is mounted but not on $mntname=$mnt - aborting"
|
||||
echo "Already mounted result:"
|
||||
echo $mount_rec
|
||||
return 2 # 2 = mounted on wrong mnt
|
||||
fi
|
||||
|
||||
if [ -n "$type" -a "`_fs_type $dev`" != "$type" ]
|
||||
then
|
||||
if [ -n "$type" -a "`_fs_type $dev`" != "$type" ]; then
|
||||
echo "$devname=$dev is mounted but not a type $type filesystem"
|
||||
# raw $DF_PROG cannot handle NFS/CIFS/overlay correctly
|
||||
_df_device $dev
|
||||
|
||||
Reference in New Issue
Block a user