how do I check if a bind mount on linux is private or shared?
The mount command allows us to make a bind mount shared, slave, shared+slave, private or unbindable, however, I was unable to figure for a given mount point what is type of subtree rooted at the bind-mount (shared, slave, private, shared+slave or unbindable). How do I find if a bind mount is a slave or private?
Solution 1:
The answer is in the mount(8)
manual page as well:
Use findmnt -o TARGET,PROPAGATION to see the current propagation flags.
An example:
$ findmnt -o TARGET,PROPAGATION /opt
TARGET PROPAGATION
/opt shared
$ sudo mount -o bind /opt /mnt
$ sudo mount --make-slave /opt
$ findmnt -o TARGET,PROPAGATION /opt
TARGET PROPAGATION
/opt private,slave
$ sudo umount /mnt
$ findmnt -o TARGET,PROPAGATION /opt
TARGET PROPAGATION
/opt private
Check the findmnt
manual page for other options.
For reference, these examples are using:
$ findmnt --version
findmnt from util-linux 2.27.1
Solution 2:
Alternatively to dawud's answer, you can directly ask the kernel like this:
# cat /proc/1/mountinfo
14 19 0:14 / /sys rw,nosuid,nodev,noexec,relatime shared:7 - sysfs sysfs rw
15 19 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:12 - proc proc rw
[...]
You can see from the 7th field that my /sys
filesystem is shared (just like /proc
).
Also, it is and in peer group 7 (mounts in the same peer group propagate events to each other).
The number in /proc/1/mountinfo
is the PID of a process, because processes can be in different mount namespaces and "see" different results. You may want to use another PID, i.e. if you are working with containers. Otherwise, 1
is simple and straightforward.
Shared mounts are available since Linux kernel version 2.6.15.