All of lore.kernel.org
 help / color / mirror / Atom feed
* find device of a known mountpoint
@ 2017-03-31  9:00 Rüdiger Meier
  2017-03-31  9:19 ` Karel Zak
  0 siblings, 1 reply; 9+ messages in thread
From: Rüdiger Meier @ 2017-03-31  9:00 UTC (permalink / raw)
  To: util-linux

Hi,

I wonder whether we have a command which tells me the device 
corresponding to a known mount point. I want to avoid grepping the 
output of mount because it may not unique (regarding mounts on shared 
bind mounts) and because the original mount point may include symlinks 
which are canonicalized by the kernel.

Example:

$ truncate -s100M /tmp/img
$ losetup /dev/loop0  /tmp/img
$ mkfs.ext2  /dev/loop0

$ mkdir /tmp/mnt
$ ln -s /tmp  /tmp/xyz/symlink

$ mount /dev/loop0 /tmp/xyz/symlink/mnt
$ mount | grep loop
/dev/loop0 on /tmp/mnt type ext2 ...


I need a command which outputs "/dev/loop0" when "/tmp/xyz/symlink/mnt" 
is given.

So far I found df as the only solution (but ugly and maybe GNU-only). 
And it would succeed for any input file, not only mountpoints.

$ df -P /tmp/xyz/symlink/mnt | awk 'NR==2{print $1}'
/dev/loop0

Our mountpoint(1) looks like the right tool but prints the device 
numbers only

$ mountpoint  -d /tmp/xyz/symlink/mnt
7:0

So how could I do this in a non-ugly way?

cu,
Rudi

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: find device of a known mountpoint
  2017-03-31  9:00 find device of a known mountpoint Rüdiger Meier
@ 2017-03-31  9:19 ` Karel Zak
  2017-03-31 10:03   ` Rüdiger Meier
  2017-03-31 10:09   ` [PATCH] test: fix mountpoint device check in libmount/loop Ruediger Meier
  0 siblings, 2 replies; 9+ messages in thread
From: Karel Zak @ 2017-03-31  9:19 UTC (permalink / raw)
  To: Rüdiger Meier; +Cc: util-linux

On Fri, Mar 31, 2017 at 11:00:24AM +0200, Rüdiger Meier wrote:
> $ truncate -s100M /tmp/img
> $ losetup /dev/loop0  /tmp/img
> $ mkfs.ext2  /dev/loop0
> 
> $ mkdir /tmp/mnt
> $ ln -s /tmp  /tmp/xyz/symlink
> 
> $ mount /dev/loop0 /tmp/xyz/symlink/mnt
> $ mount | grep loop
> /dev/loop0 on /tmp/mnt type ext2 ...
> 
> 
> I need a command which outputs "/dev/loop0" when "/tmp/xyz/symlink/mnt" is
> given.

  $ findmnt -no SOURCE /tmp/xyz/symlink/mnt
  /dev/loop0


Note that for bind mounts there is nothing like primary (original)
and secondary mountpoints. It's two ways to the same filesystem.

    Karel

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: find device of a known mountpoint
  2017-03-31  9:19 ` Karel Zak
@ 2017-03-31 10:03   ` Rüdiger Meier
  2017-03-31 10:41     ` Rüdiger Meier
  2017-03-31 10:09   ` [PATCH] test: fix mountpoint device check in libmount/loop Ruediger Meier
  1 sibling, 1 reply; 9+ messages in thread
From: Rüdiger Meier @ 2017-03-31 10:03 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux



On 03/31/2017 11:19 AM, Karel Zak wrote:
> On Fri, Mar 31, 2017 at 11:00:24AM +0200, Rüdiger Meier wrote:
>> $ truncate -s100M /tmp/img
>> $ losetup /dev/loop0  /tmp/img
>> $ mkfs.ext2  /dev/loop0
>>
>> $ mkdir /tmp/mnt
>> $ ln -s /tmp  /tmp/xyz/symlink
>>
>> $ mount /dev/loop0 /tmp/xyz/symlink/mnt
>> $ mount | grep loop
>> /dev/loop0 on /tmp/mnt type ext2 ...
>>
>>
>> I need a command which outputs "/dev/loop0" when "/tmp/xyz/symlink/mnt" is
>> given.
>
>   $ findmnt -no SOURCE /tmp/xyz/symlink/mnt
>   /dev/loop0

Thank's. Now I remember that you have told me that already one day. :)

>
> Note that for bind mounts there is nothing like primary (original)
> and secondary mountpoints. It's two ways to the same filesystem.

Yep in this case the problem was only duplicate mountpoints when you 
mount something on a subdir a shared bind mount. I'll send a petch for 
one libmount test. I really hate that systemd defaults to shared ...

cu,
Rudi

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] test: fix mountpoint device check in libmount/loop
  2017-03-31  9:19 ` Karel Zak
  2017-03-31 10:03   ` Rüdiger Meier
@ 2017-03-31 10:09   ` Ruediger Meier
  2017-03-31 10:57     ` Karel Zak
  2017-03-31 11:01     ` Rüdiger Meier
  1 sibling, 2 replies; 9+ messages in thread
From: Ruediger Meier @ 2017-03-31 10:09 UTC (permalink / raw)
  To: util-linux; +Cc: Stanislav Brabec

From: Ruediger Meier <ruediger.meier@ga-group.nl>

This test could fail if the build directory is somehow exoticly
mounted (shared bind mounts, symlinks).

CC: Stanislav Brabec <sbrabec@suse.cz>
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
---
 tests/ts/libmount/loop | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/tests/ts/libmount/loop b/tests/ts/libmount/loop
index 452732f..893d902 100755
--- a/tests/ts/libmount/loop
+++ b/tests/ts/libmount/loop
@@ -23,12 +23,24 @@ TS_DESC="losetup-loop"
 ts_init "$*"
 
 ts_check_test_command "$TS_CMD_MOUNT"
+ts_check_test_command "$TS_CMD_FINDMNT"
 ts_check_test_command "$TS_CMD_LOSETUP"
 
 ts_skip_nonroot
 ts_check_losetup
 ts_check_prog "mkfs.ext3"
 
+function verify_mount_dev {
+	local dev=$1
+	local mp=$2
+	local dev_mounted=$($TS_CMD_FINDMNT -no SOURCE "$mp")
+
+	if test "$dev" != "$dev_mounted" ; then
+		echo "Mounted incorrect device: have '$dev_mounted', want '$dev'" >&2
+		return 1
+	fi
+}
+
 #
 # file-* tests: Backing file is a regular file
 #
@@ -61,10 +73,7 @@ ts_init_subtest "dev-loop"
 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
 LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE 2>> $TS_OUTPUT )
 $TS_CMD_MOUNT $LODEV "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
-MOUNTED_LODEV="$( $TS_CMD_MOUNT | grep "$TS_MOUNTPOINT" | while read LODEV REST ; do echo $LODEV ; done )"
-if test "$MOUNTED_LODEV" != "$LODEV" ; then
-    echo "Mounted incorrect device mounts: $MOUNTED_LODEV, wants: $LODEV" >> $TS_OUTPUT
-fi
+verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
 $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
 $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
 udevadm settle
@@ -75,10 +84,7 @@ ts_init_subtest "o-loop-val"
 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
 LODEV=$( $TS_CMD_LOSETUP --find 2>> $TS_OUTPUT )
 $TS_CMD_MOUNT -oloop=$LODEV "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
-MOUNTED_LODEV="$( cat /proc/self/mounts |  grep "$TS_MOUNTPOINT" | while read LODEV REST ; do echo $LODEV ; done )"
-if test "$MOUNTED_LODEV" != "$LODEV" ; then
-    echo "Mounted incorrect device mounts: $MOUNTED_LODEV, wants: $LODEV" >> $TS_OUTPUT
-fi
+verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
 $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
 udevadm settle
 ts_log "Success"
@@ -88,10 +94,7 @@ ts_init_subtest "reuse"
 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
 LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show "$BACKFILE" 2>> $TS_OUTPUT )
 $TS_CMD_MOUNT "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
-MOUNTED_LODEV="$( cat /proc/self/mounts |  grep "$TS_MOUNTPOINT" | while read LODEV REST ; do echo $LODEV ; done )"
-if test "$MOUNTED_LODEV" != "$LODEV" ; then
-    echo "Mounted incorrect device mounts: $MOUNTED_LODEV, wants: $LODEV" >> $TS_OUTPUT
-fi
+verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
 $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
 $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
 udevadm settle
-- 
1.8.5.6


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: find device of a known mountpoint
  2017-03-31 10:03   ` Rüdiger Meier
@ 2017-03-31 10:41     ` Rüdiger Meier
  2017-03-31 10:54       ` Karel Zak
  0 siblings, 1 reply; 9+ messages in thread
From: Rüdiger Meier @ 2017-03-31 10:41 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux

On 03/31/2017 12:03 PM, Rüdiger Meier wrote:
>
>
> On 03/31/2017 11:19 AM, Karel Zak wrote:
>> On Fri, Mar 31, 2017 at 11:00:24AM +0200, Rüdiger Meier wrote:
>>> $ truncate -s100M /tmp/img
>>> $ losetup /dev/loop0  /tmp/img
>>> $ mkfs.ext2  /dev/loop0
>>>
>>> $ mkdir /tmp/mnt
>>> $ ln -s /tmp  /tmp/xyz/symlink
>>>
>>> $ mount /dev/loop0 /tmp/xyz/symlink/mnt
>>> $ mount | grep loop
>>> /dev/loop0 on /tmp/mnt type ext2 ...
>>>
>>>
>>> I need a command which outputs "/dev/loop0" when
>>> "/tmp/xyz/symlink/mnt" is
>>> given.
>>
>>   $ findmnt -no SOURCE /tmp/xyz/symlink/mnt
>>   /dev/loop0
>
> Thank's. Now I remember that you have told me that already one day. :)

BTW is there also a way to get "findmnt -n -o SOURCE" working if the
argument is not a mount point but a regular file on another mount
point? (In opposite of my initial question.)

I don't like that all these questions here are answered using "df".
http://unix.stackexchange.com/questions/90252/how-to-get-mount-point-of-filesystem-containing-given-file

http://unix.stackexchange.com/questions/128471/determine-what-device-a-directory-is-located-on


cu,
Rudi

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: find device of a known mountpoint
  2017-03-31 10:41     ` Rüdiger Meier
@ 2017-03-31 10:54       ` Karel Zak
  2017-03-31 11:20         ` Rüdiger Meier
  0 siblings, 1 reply; 9+ messages in thread
From: Karel Zak @ 2017-03-31 10:54 UTC (permalink / raw)
  To: Rüdiger Meier; +Cc: util-linux

On Fri, Mar 31, 2017 at 12:41:22PM +0200, Rüdiger Meier wrote:
> On 03/31/2017 12:03 PM, Rüdiger Meier wrote:
> > 
> > 
> > On 03/31/2017 11:19 AM, Karel Zak wrote:
> > > On Fri, Mar 31, 2017 at 11:00:24AM +0200, Rüdiger Meier wrote:
> > > > $ truncate -s100M /tmp/img
> > > > $ losetup /dev/loop0  /tmp/img
> > > > $ mkfs.ext2  /dev/loop0
> > > > 
> > > > $ mkdir /tmp/mnt
> > > > $ ln -s /tmp  /tmp/xyz/symlink
> > > > 
> > > > $ mount /dev/loop0 /tmp/xyz/symlink/mnt
> > > > $ mount | grep loop
> > > > /dev/loop0 on /tmp/mnt type ext2 ...
> > > > 
> > > > 
> > > > I need a command which outputs "/dev/loop0" when
> > > > "/tmp/xyz/symlink/mnt" is
> > > > given.
> > > 
> > >   $ findmnt -no SOURCE /tmp/xyz/symlink/mnt
> > >   /dev/loop0
> > 
> > Thank's. Now I remember that you have told me that already one day. :)
> 
> BTW is there also a way to get "findmnt -n -o SOURCE" working if the
> argument is not a mount point but a regular file on another mount
> point? (In opposite of my initial question.)

$ findmnt --target /home/kzak/.bash_profile 
TARGET SOURCE    FSTYPE OPTIONS
/home  /dev/sda3 ext4   rw,relatime,data=ordered

Note that it's probably better to use (for the previous example) the
option --mountpoint if you want to be sure that the path is
interpreted as mountpoint and never as a regular file.

> I don't like that all these questions here are answered using "df".
> http://unix.stackexchange.com/questions/90252/how-to-get-mount-point-of-filesystem-containing-given-file
> 
> http://unix.stackexchange.com/questions/128471/determine-what-device-a-directory-is-located-on

 Well... :-)

    Karel

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] test: fix mountpoint device check in libmount/loop
  2017-03-31 10:09   ` [PATCH] test: fix mountpoint device check in libmount/loop Ruediger Meier
@ 2017-03-31 10:57     ` Karel Zak
  2017-03-31 11:01     ` Rüdiger Meier
  1 sibling, 0 replies; 9+ messages in thread
From: Karel Zak @ 2017-03-31 10:57 UTC (permalink / raw)
  To: Ruediger Meier; +Cc: util-linux, Stanislav Brabec

On Fri, Mar 31, 2017 at 12:09:46PM +0200, Ruediger Meier wrote:
>  tests/ts/libmount/loop | 27 +++++++++++++++------------
>  1 file changed, 15 insertions(+), 12 deletions(-)

 Applied, thanks.

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] test: fix mountpoint device check in libmount/loop
  2017-03-31 10:09   ` [PATCH] test: fix mountpoint device check in libmount/loop Ruediger Meier
  2017-03-31 10:57     ` Karel Zak
@ 2017-03-31 11:01     ` Rüdiger Meier
  1 sibling, 0 replies; 9+ messages in thread
From: Rüdiger Meier @ 2017-03-31 11:01 UTC (permalink / raw)
  To: util-linux; +Cc: Stanislav Brabec



On 03/31/2017 12:09 PM, Ruediger Meier wrote:
> From: Ruediger Meier <ruediger.meier@ga-group.nl>
>
> This test could fail if the build directory is somehow exoticly
> mounted (shared bind mounts, symlinks).
>
> CC: Stanislav Brabec <sbrabec@suse.cz>
> Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
> ---
>  tests/ts/libmount/loop | 27 +++++++++++++++------------
>  1 file changed, 15 insertions(+), 12 deletions(-)
>
> diff --git a/tests/ts/libmount/loop b/tests/ts/libmount/loop
> index 452732f..893d902 100755
> --- a/tests/ts/libmount/loop
> +++ b/tests/ts/libmount/loop
> @@ -23,12 +23,24 @@ TS_DESC="losetup-loop"
>  ts_init "$*"
>
>  ts_check_test_command "$TS_CMD_MOUNT"
> +ts_check_test_command "$TS_CMD_FINDMNT"
>  ts_check_test_command "$TS_CMD_LOSETUP"
>
>  ts_skip_nonroot
>  ts_check_losetup
>  ts_check_prog "mkfs.ext3"
>
> +function verify_mount_dev {
> +	local dev=$1
> +	local mp=$2
> +	local dev_mounted=$($TS_CMD_FINDMNT -no SOURCE "$mp")

Regarding your other comments, maybe we should add --mountpoint here.

> +
> +	if test "$dev" != "$dev_mounted" ; then
> +		echo "Mounted incorrect device: have '$dev_mounted', want '$dev'" >&2
> +		return 1
> +	fi
> +}
> +
>  #
>  # file-* tests: Backing file is a regular file
>  #
> @@ -61,10 +73,7 @@ ts_init_subtest "dev-loop"
>  [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
>  LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE 2>> $TS_OUTPUT )
>  $TS_CMD_MOUNT $LODEV "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
> -MOUNTED_LODEV="$( $TS_CMD_MOUNT | grep "$TS_MOUNTPOINT" | while read LODEV REST ; do echo $LODEV ; done )"
> -if test "$MOUNTED_LODEV" != "$LODEV" ; then
> -    echo "Mounted incorrect device mounts: $MOUNTED_LODEV, wants: $LODEV" >> $TS_OUTPUT
> -fi
> +verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
>  $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
>  $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
>  udevadm settle
> @@ -75,10 +84,7 @@ ts_init_subtest "o-loop-val"
>  [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
>  LODEV=$( $TS_CMD_LOSETUP --find 2>> $TS_OUTPUT )
>  $TS_CMD_MOUNT -oloop=$LODEV "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
> -MOUNTED_LODEV="$( cat /proc/self/mounts |  grep "$TS_MOUNTPOINT" | while read LODEV REST ; do echo $LODEV ; done )"
> -if test "$MOUNTED_LODEV" != "$LODEV" ; then
> -    echo "Mounted incorrect device mounts: $MOUNTED_LODEV, wants: $LODEV" >> $TS_OUTPUT
> -fi
> +verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
>  $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
>  udevadm settle
>  ts_log "Success"
> @@ -88,10 +94,7 @@ ts_init_subtest "reuse"
>  [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
>  LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show "$BACKFILE" 2>> $TS_OUTPUT )
>  $TS_CMD_MOUNT "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
> -MOUNTED_LODEV="$( cat /proc/self/mounts |  grep "$TS_MOUNTPOINT" | while read LODEV REST ; do echo $LODEV ; done )"
> -if test "$MOUNTED_LODEV" != "$LODEV" ; then
> -    echo "Mounted incorrect device mounts: $MOUNTED_LODEV, wants: $LODEV" >> $TS_OUTPUT
> -fi
> +verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
>  $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
>  $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
>  udevadm settle
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: find device of a known mountpoint
  2017-03-31 10:54       ` Karel Zak
@ 2017-03-31 11:20         ` Rüdiger Meier
  0 siblings, 0 replies; 9+ messages in thread
From: Rüdiger Meier @ 2017-03-31 11:20 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux

On 03/31/2017 12:54 PM, Karel Zak wrote:

>> I don't like that all these questions here are answered using "df".
>> http://unix.stackexchange.com/questions/90252/how-to-get-mount-point-of-filesystem-containing-given-file
>>
>> http://unix.stackexchange.com/questions/128471/determine-what-device-a-directory-is-located-on
>
>  Well... :-)

Now I've added findmnt answers there, so I don't need to ask you again
next time I need it ;)

cu,
Rudi

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-03-31 11:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-31  9:00 find device of a known mountpoint Rüdiger Meier
2017-03-31  9:19 ` Karel Zak
2017-03-31 10:03   ` Rüdiger Meier
2017-03-31 10:41     ` Rüdiger Meier
2017-03-31 10:54       ` Karel Zak
2017-03-31 11:20         ` Rüdiger Meier
2017-03-31 10:09   ` [PATCH] test: fix mountpoint device check in libmount/loop Ruediger Meier
2017-03-31 10:57     ` Karel Zak
2017-03-31 11:01     ` Rüdiger Meier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.