Since Linux 2.4 a single filesystem can be mounted at multiple
mount points, and multiple mounts can be stacked on the same
mount point.
The mountflags argument may have the magic number 0xC0ED
(MS_MGC_VAL
) in the top 16 bits. (All of the other flags
discussed in DESCRIPTION occupy the low order 16 bits of
mountflags.) Specifying MS_MGC_VAL
was required in kernel
versions prior to 2.4, but since Linux 2.4 is no longer required
and is ignored if specified.
The original MS_SYNC
flag was renamed MS_SYNCHRONOUS
in 1.1.69
when a different MS_SYNC
was added to <mman.h>.
Before Linux 2.4 an attempt to execute a set-user-ID or set-
group-ID program on a filesystem mounted with MS_NOSUID
would
fail with EPERM
. Since Linux 2.4 the set-user-ID and set-group-
ID bits are just silently ignored in this case.
Mount namespaces
Starting with kernel 2.4.19, Linux provides mount namespaces. A
mount namespace is the set of filesystem mounts that are visible
to a process. Mount namespaces can be (and usually are) shared
between multiple processes, and changes to the namespace (i.e.,
mounts and unmounts) by one process are visible to all other
processes sharing the same namespace. (The pre-2.4.19 Linux
situation can be considered as one in which a single namespace
was shared by every process on the system.)
A child process created by fork(2) shares its parent's mount
namespace; the mount namespace is preserved across an execve(2).
A process can obtain a private mount namespace if: it was created
using the clone(2) CLONE_NEWNS
flag, in which case its new
namespace is initialized to be a copy of the namespace of the
process that called clone(2); or it calls unshare(2) with the
CLONE_NEWNS
flag, which causes the caller's mount namespace to
obtain a private copy of the namespace that it was previously
sharing with other processes, so that future mounts and unmounts
by the caller are invisible to other processes (except child
processes that the caller subsequently creates) and vice versa.
For further details on mount namespaces, see mount_namespaces(7).
Parental relationship between mounts
Each mount has a parent mount. The overall parental relationship
of all mounts defines the single directory hierarchy seen by the
processes within a mount namespace.
The parent of a new mount is defined when the mount is created.
In the usual case, the parent of a new mount is the mount of the
filesystem containing the directory or file at which the new
mount is attached. In the case where a new mount is stacked on
top of an existing mount, the parent of the new mount is the
previous mount that was stacked at that location.
The parental relationship between mounts can be discovered via
the /proc/[pid]/mountinfo file (see below).
/proc/[pid]/mounts and /proc/[pid]/mountinfo
The Linux-specific /proc/[pid]/mounts file exposes the list of
mounts in the mount namespace of the process with the specified
ID. The /proc/[pid]/mountinfo file exposes even more information
about mounts, including the propagation type and mount ID
information that makes it possible to discover the parental
relationship between mounts. See proc(5) and mount_namespaces(7)
for details of this file.