.\" Copyright (C) 1993 Rickard E. Faith <faith@cs.unc.edu>
.\" and Copyright (C) 1994 Andries E. Brouwer <aeb@cwi.nl>
.\" and Copyright (C) 2002, 2005, 2016 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" Modified 1996-11-04 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified 2001-10-13 by Michael Kerrisk <mtk.manpages@gmail.com>
.\"	Added note on historical behavior of MS_NOSUID
.\" Modified 2002-05-16 by Michael Kerrisk <mtk.manpages@gmail.com>
.\"	Extensive changes and additions
.\" Modified 2002-05-27 by aeb
.\" Modified 2002-06-11 by Michael Kerrisk <mtk.manpages@gmail.com>
.\"	Enhanced descriptions of MS_MOVE, MS_BIND, and MS_REMOUNT
.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
.\" 2005-05-18, mtk, Added MNT_EXPIRE, plus a few other tidy-ups.
.\" 2008-10-06, mtk: move umount*() material into separate umount.2 page.
.\" 2008-10-06, mtk: Add discussion of namespaces.
.\"
.TH MOUNT 2 2018-02-02 "Linux" "Linux Programmer's Manual"
.SH NAME
mount \- mount filesystem
.SH SYNOPSIS
.nf
.B "#include <sys/mount.h>"
.PP
.BI "int mount(const char *" source ", const char *" target ,
.BI "          const char *" filesystemtype ", unsigned long " mountflags ,
.BI "          const void *" data );
.fi
.SH DESCRIPTION
.BR mount ()
attaches the filesystem specified by
.I source
(which is often a pathname referring to a device,
but can also be the pathname of a directory or file,
or a dummy string) to the location (a directory or file)
specified by the pathname in
.IR target .
.PP
Appropriate privilege (Linux: the
.B CAP_SYS_ADMIN
capability) is required to mount filesystems.
.PP
Values for the
.I filesystemtype
argument supported by the kernel are listed in
.I /proc/filesystems
(e.g., "btrfs", "ext4", "jfs", "xfs", "vfat", "fuse",
"tmpfs", "cgroup", "proc", "mqueue", "nfs", "cifs", "iso9660").
Further types may become available when the appropriate modules
are loaded.
.PP
The
.I data
argument is interpreted by the different filesystems.
Typically it is a string of comma-separated options
understood by this filesystem.
See
.BR mount (8)
for details of the options available for each filesystem type.
.PP
A call to
.BR mount ()
performs one of a number of general types of operation,
depending on the bits specified in
.IR mountflags .
The choice of which operation to perform is determined by
testing the bits set in
.IR mountflags ,
with the tests being conducted in the order listed here:
.IP * 3
Remount an existing mount:
.IR mountflags
includes
.BR MS_REMOUNT .
.IP *
Create a bind mount:
.IR mountflags
includes
.BR MS_BIND .
.IP *
Change the propagation type of an existing mount:
.IR mountflags
includes one of
.BR MS_SHARED ,
.BR MS_PRIVATE ,
.BR MS_SLAVE ,
or
.BR MS_UNBINDABLE .
.IP *
Move an existing mount to a new location:
.IR mountflags
includes
.BR MS_MOVE .
.IP *
Create a new mount:
.IR mountflags
includes none of the above flags.
.PP
Each of these operations is detailed later in this page.
Further flags may be specified in
.IR mountflags
to modify the behavior of
.BR mount (),
as described below.
.\"
.SS Additional mount flags
The list below describes the additional flags that can be specified in
.IR mountflags .
Note that some operation types ignore some or all of these flags,
as described later in this page.
.\"
.\" FIXME 2.6.25 Added MS_I_VERSION, which needs to be documented.
.\"
.TP
.BR MS_DIRSYNC " (since Linux 2.5.19)"
Make directory changes on this filesystem synchronous.
(This property can be obtained for individual directories
or subtrees using
.BR chattr (1).)
.TP
.BR MS_LAZYTIME " (since Linux 4.0)"
.\" commit 0ae45f63d4ef8d8eeec49c7d8b44a1775fff13e8
.\" commit fe032c422c5ba562ba9c2d316f55e258e03259c6
.\" commit a26f49926da938f47561f386be56a83dd37a496d
Reduce on-disk updates of inode timestamps (atime, mtime, ctime)
by maintaining these changes only in memory.
The on-disk timestamps are updated only when:
.RS
.IP (a) 5
the inode needs to be updated for some change unrelated to file timestamps;
.IP (b)
the application employs
.BR fsync (2),
.BR syncfs (2),
or
.BR sync (2);
.IP (c)
an undeleted inode is evicted from memory; or
.IP (d)
more than 24 hours have passed since the inode was written to disk.
.RE
.IP
This mount option significantly reduces writes
needed to update the inode's timestamps, especially mtime and atime.
However, in the event of a system crash, the atime and mtime fields
on disk might be out of date by up to 24 hours.
.PP
Examples of workloads where this option could be of significant benefit
include frequent random writes to preallocated files,
as well as cases where the
.B MS_STRICTATIME
mount option is also enabled.
(The advantage of combining
.BR MS_STRICTATIME
and
.BR MS_LAZYTIME
is that
.BR stat (2)
will return the correctly updated atime, but the atime updates
will be flushed to disk only in the cases listed above.)
.TP
.B MS_MANDLOCK
Permit mandatory locking on files in this filesystem.
(Mandatory locking must still be enabled on a per-file basis,
as described in
.BR fcntl (2).)
Since Linux 4.5,
.\" commit 95ace75414f312f9a7b93d873f386987b92a5301
this mount option requires the
.B CAP_SYS_ADMIN
capability.
.TP
.B MS_NOATIME
Do not update access times for (all types of) files on this filesystem.
.TP
.B MS_NODEV
Do not allow access to devices (special files) on this filesystem.
.TP
.B MS_NODIRATIME
Do not update access times for directories on this filesystem.
This flag provides a subset of the functionality provided by
.BR MS_NOATIME ;
that is,
.BR MS_NOATIME
implies
.BR MS_NODIRATIME .
.TP
.B MS_NOEXEC
Do not allow programs to be executed from this filesystem.
.\" (Possibly useful for a filesystem that contains non-Linux executables.
.\" Often used as a security feature, e.g., to make sure that restricted
.\" users cannot execute files uploaded using ftp or so.)
.TP
.B MS_NOSUID
Do not honor set-user-ID and set-group-ID bits or file capabilities
when executing programs from this filesystem.
.\" (This is a security feature to prevent users executing set-user-ID and
.\" set-group-ID programs from removable disk devices.)
.TP
.B MS_RDONLY
Mount filesystem read-only.
.TP
.BR MS_REC " (since Linux 2.4.11)"
Used in conjunction with
.BR MS_BIND
to create a recursive bind mount,
and in conjunction with the propagation type flags to recursively change
the propagation type of all of the mounts in a subtree.
See below for further details.
.TP
.BR MS_RELATIME " (since Linux 2.6.20)"
When a file on this filesystem is accessed,
update the file's last access time (atime) only if the current value
of atime is less than or equal to the file's last modification time (mtime)
or last status change time (ctime).
This option is useful for programs, such as
.BR mutt (1),
that need to know when a file has been read since it was last modified.
Since Linux 2.6.30, the kernel defaults to the behavior provided
by this flag (unless
.BR MS_NOATIME
was specified), and the
.B MS_STRICTATIME
flag is required to obtain traditional semantics.
In addition, since Linux 2.6.30,
the file's last access time is always updated if it
is more than 1 day old.
.\" Matthew Garrett notes in the patch that added this behavior
.\" that this lets utilities such as tmpreaper (which deletes
.\" files based on last access time) work correctly.
.TP
.BR MS_SILENT " (since Linux 2.6.17)"
Suppress the display of certain
.RI ( printk ())
warning messages in the kernel log.
This flag supersedes the misnamed and obsolete
.BR MS_VERBOSE
flag (available since Linux 2.4.12), which has the same meaning.
.TP
.BR MS_STRICTATIME " (since Linux 2.6.30)"
Always update the last access time (atime) when files on this
filesystem are accessed.
(This was the default behavior before Linux 2.6.30.)
Specifying this flag overrides the effect of setting the
.BR MS_NOATIME
and
.BR MS_RELATIME
flags.
.TP
.B MS_SYNCHRONOUS
Make writes on this filesystem synchronous (as though
the
.B O_SYNC
flag to
.BR open (2)
was specified for all file opens to this filesystem).
.PP
From Linux 2.4 onward, the
.BR MS_NODEV ", " MS_NOEXEC ", and " MS_NOSUID
flags are settable on a per-mount-point basis.
From kernel 2.6.16 onward,
.B MS_NOATIME
and
.B MS_NODIRATIME
are also settable on a per-mount-point basis.
The
.B MS_RELATIME
flag is also settable on a per-mount-point basis.
Since Linux 2.6.16,
.B MS_RDONLY
can be set or cleared on a per-mount-point basis as well as on
the underlying filesystem.
The mounted filesystem will be writable only if neither the filesystem
nor the mountpoint are flagged as read-only.
.\"
.SS Remounting an existing mount
An existing mount may be remounted by specifying
.B MS_REMOUNT
in
.IR mountflags .
This allows you to change the
.I mountflags
and
.I data
of an existing mount without having to unmount and remount the filesystem.
.I target
should be the same value specified in the initial
.BR mount ()
call.
.PP
The
.I source
and
.I filesystemtype
arguments are ignored.
.PP
The
.I mountflags
and
.I data
arguments should match the values used in the original
.BR mount ()
call, except for those parameters that are being deliberately changed.
Another exception is that
.B MS_BIND
has a different meaning for remount, and it should be included only if
explicitly desired.
.PP
The following
.I mountflags
can be changed:
.BR MS_LAZYTIME ,
.BR MS_MANDLOCK ,
.BR MS_NOATIME ,
.BR MS_NODEV ,
.BR MS_NODIRATIME ,
.BR MS_NOEXEC ,
.BR MS_NOSUID ,
.BR MS_RELATIME ,
.BR MS_RDONLY ,
and
.BR MS_SYNCHRONOUS .
Attempts to change the setting of the
.\" See the definition of MS_RMT_MASK in include/uapi/linux/fs.h
.BR MS_DIRSYNC
flag during a remount are silently ignored.
.PP
Since Linux 3.17,
.\" commit ffbc6f0ead47fa5a1dc9642b0331cb75c20a640e
if none of
.BR MS_NOATIME ,
.BR MS_NODIRATIME ,
.BR MS_RELATIME ,
or
.BR MS_STRICTATIME
is specified in
.IR mountflags ,
then the remount operation preserves the existing values of these flags
(rather than defaulting to
.BR MS_RELATIME ).
.PP
Since Linux 2.6.26, this flag can be used with
.B MS_BIND
to modify only the per-mount-point flags.
.\" See https://lwn.net/Articles/281157/
This is particularly useful for setting or clearing the "read-only"
flag on a mount point without changing the underlying filesystem.
Specifying
.IR mountflags
as:
.PP
    MS_REMOUNT | MS_BIND | MS_RDONLY
.PP
will make access through this mountpoint read-only, without affecting
other mount points.
.\"
.SS Creating a bind mount
If
.I mountflags
includes
.BR MS_BIND
(available since Linux 2.4),
.\" since 2.4.0-test9
then perform a bind mount.
A bind mount makes a file or a directory subtree visible at
another point within the single directory hierarchy.
Bind mounts may cross filesystem boundaries and span
.BR chroot (2)
jails.
.PP
The
.IR filesystemtype
and
.IR data
arguments are ignored.
.PP
The remaining bits in the
.I mountflags
argument are also ignored, with the exception of
.BR MS_REC .
(The bind mount has the same mount options as
the underlying mount point.)
However, see the discussion of remounting above,
for a method of making an existing bind mount read-only.
.PP
By default, when a directory is bind mounted,
only that directory is mounted;
if there are any submounts under the directory tree,
they are not bind mounted.
If the
.BR MS_REC
flag is also specified, then a recursive bind mount operation is performed:
all submounts under the
.I source
subtree (other than unbindable mounts)
are also bind mounted at the corresponding location in the
.I target
subtree.
.\"
.SS Changing the propagation type of an existing mount
If
.IR mountflags
includes one of
.BR MS_SHARED ,
.BR MS_PRIVATE ,
.BR MS_SLAVE ,
or
.BR MS_UNBINDABLE
(all available since Linux 2.6.15),
then the propagation type of an existing mount is changed.
If more than one of these flags is specified, an error results.
.PP
The only flags that can be used with changing the propagation type are
.BR MS_REC
and
.BR MS_SILENT .
.PP
The
.IR source ,
.IR filesystemtype ,
and
.IR data
arguments are ignored.
.PP
The meanings of the propagation type flags are as follows:
.TP
.BR MS_SHARED
Make this mount point shared.
Mount and unmount events immediately under this mount point will propagate
to the other mount points that are members of this mount's peer group.
Propagation here means that the same mount or unmount will automatically
occur under all of the other mount points in the peer group.
Conversely, mount and unmount events that take place under
peer mount points will propagate to this mount point.
.TP
.BR MS_PRIVATE
Make this mount point private.
Mount and unmount events do not propagate into or out of this mount point.
.TP
.BR MS_SLAVE
If this is a shared mount point that is a member of a peer group
that contains other members, convert it to a slave mount.
If this is a shared mount point that is a member of a peer group
that contains no other members, convert it to a private mount.
Otherwise, the propagation type of the mount point is left unchanged.
.PP
When a mount point is a slave,
mount and unmount events propagate into this mount point from
the (master) shared peer group of which it was formerly a member.
Mount and unmount events under this mount point do not propagate to any peer.
.PP
A mount point can be the slave of another peer group
while at the same time sharing mount and unmount events
with a peer group of which it is a member.
.TP
.BR MS_UNBINDABLE
Make this mount unbindable.
This is like a private mount,
and in addition this mount can't be bind mounted.
When a recursive bind mount
.RB ( mount ()
with the
.BR MS_BIND
and
.BR MS_REC
flags) is performed on a directory subtree,
any bind mounts within the subtree are automatically pruned
(i.e., not replicated)
when replicating that subtree to produce the target subtree.
.PP
By default, changing the propagation type affects only the
.I target
mount point.
If the
.B MS_REC
flag is also specified in
.IR mountflags ,
then the propagation type of all mount points under
.IR target
is also changed.
.PP
For further details regarding mount propagation types
(including the default propagation type assigned to new mounts), see
.BR mount_namespaces (7).
.\"
.SS Moving a mount
If
.I mountflags
contains the flag
.BR MS_MOVE
(available since Linux 2.4.18),
then move a subtree:
.I source
specifies an existing mount point and
.I target
specifies the new location to which that mount point is to be relocated.
The move is atomic: at no point is the subtree unmounted.
.PP
The remaining bits in the
.IR mountflags
argument are ignored, as are the
.IR filesystemtype
and
.IR data
arguments.
.\"
.SS Creating a new mount point
If none of
.BR MS_REMOUNT ,
.BR MS_BIND ,
.BR MS_MOVE ,
.BR MS_SHARED ,
.BR MS_PRIVATE ,
.BR MS_SLAVE ,
or
.BR MS_UNBINDABLE
is specified in
.IR mountflags ,
then
.BR mount ()
performs its default action: creating a new mount point.
.IR source
specifies the source for the new mount point, and
.IR target
specifies the directory at which to create the mount point.
.PP
The
.I filesystemtype
and
.I data
arguments are employed, and further bits may be specified in
.IR mountflags
to modify the behavior of the call.
.\"
.SH RETURN VALUE
On success, zero is returned.
On error, \-1 is returned, and
.I errno
is set appropriately.
.SH ERRORS
The error values given below result from filesystem type independent
errors.
Each filesystem type may have its own special errors and its
own special behavior.
See the Linux kernel source code for details.
.TP
.B EACCES
A component of a path was not searchable.
(See also
.BR path_resolution (7).)
.TP
.B EACCES
Mounting a read-only filesystem was attempted without giving the
.B MS_RDONLY
flag.
.TP
.B EACCES
The block device
.I source
is located on a filesystem mounted with the
.B MS_NODEV
option.
.\" mtk: Probably: write permission is required for MS_BIND, with
.\" the error EPERM if not present; CAP_DAC_OVERRIDE is required.
.TP
.B EBUSY
An attempt was made to stack a new mount directly on
top of an existing mount point that was created in this
mount namespace with the same
.I source
and
.IR target .
.TP
.B EBUSY
.I source
cannot be remounted read-only,
because it still holds files open for writing.
.TP
.B EFAULT
One of the pointer arguments points outside the user address space.
.TP
.B EINVAL
.I source
had an invalid superblock.
.TP
.B EINVAL
A remount operation
.RB ( MS_REMOUNT )
was attempted, but
.I source
was not already mounted on
.IR target .
.TP
.B EINVAL
A move operation
.RB ( MS_MOVE )
was attempted, but
.I source
was not a mount point, or was \(aq/\(aq.
.TP
.B EINVAL
.I mountflags
includes more than one of
.BR MS_SHARED ,
.BR MS_PRIVATE ,
.BR MS_SLAVE ,
or
.BR MS_UNBINDABLE .
.TP
.B EINVAL
.I mountflags
includes
.BR MS_SHARED ,
.BR MS_PRIVATE ,
.BR MS_SLAVE ,
or
.BR MS_UNBINDABLE
and also includes a flag other than
.BR MS_REC
or
.BR MS_SILENT .
.TP
.BR EINVAL
An attempt was made to bind mount an unbindable mount.
.TP
.BR EINVAL
In an unprivileged mount namespace
(i.e., a mount namespace owned by a user namespace
that was created by an unprivileged user),
a bind mount operation
.RB ( MS_BIND )
was attempted without specifying
.RB ( MS_REC ),
which would have revealed the filesystem tree underneath one of
the submounts of the directory being bound.
.TP
.B ELOOP
Too many links encountered during pathname resolution.
.TP
.B ELOOP
A move operation was attempted, and
.I target
is a descendant of
.IR source .
.TP
.B EMFILE
(In case no block device is required:)
Table of dummy devices is full.
.TP
.B ENAMETOOLONG
A pathname was longer than
.BR MAXPATHLEN .
.TP
.B ENODEV
.I filesystemtype
not configured in the kernel.
.TP
.B ENOENT
A pathname was empty or had a nonexistent component.
.TP
.B ENOMEM
The kernel could not allocate a free page to copy filenames or data into.
.TP
.B ENOTBLK
.I source
is not a block device (and a device was required).
.TP
.B ENOTDIR
.IR target ,
or a prefix of
.IR source ,
is not a directory.
.TP
.B ENXIO
The major number of the block device
.I source
is out of range.
.TP
.B EPERM
The caller does not have the required privileges.
.SH VERSIONS
The definitions of
.BR MS_DIRSYNC ,
.BR MS_MOVE ,
.BR MS_PRIVATE ,
.BR MS_REC ,
.BR MS_RELATIME ,
.BR MS_SHARED ,
.BR MS_SLAVE ,
.BR MS_STRICTATIME
and
.BR MS_UNBINDABLE
were added to glibc headers in version 2.12.
.\"
.SH CONFORMING TO
This function is Linux-specific and should not be used in
programs intended to be portable.
.SH NOTES
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.
.\" Multiple mounts on same mount point: since 2.3.99pre7.
.PP
The
.I mountflags
argument may have the magic number 0xC0ED (\fBMS_MGC_VAL\fP)
in the top 16 bits.
(All of the other flags discussed in DESCRIPTION
occupy the low order 16 bits of
.IR mountflags .)
Specifying
.BR 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.
.PP
The original
.B MS_SYNC
flag was renamed
.B MS_SYNCHRONOUS
in 1.1.69
when a different
.B MS_SYNC
was added to \fI<mman.h>\fP.
.PP
Before Linux 2.4 an attempt to execute a set-user-ID or set-group-ID program
on a filesystem mounted with
.B MS_NOSUID
would fail with
.BR EPERM .
Since Linux 2.4 the set-user-ID and set-group-ID bits are
just silently ignored in this case.
.\" The change is in patch-2.4.0-prerelease.
.\"
.SS Per-process namespaces
Starting with kernel 2.4.19, Linux provides
per-process mount namespaces.
A mount namespace is the set of filesystem mounts that
are visible to a process.
Mount-point 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.)
.PP
A child process created by
.BR fork (2)
shares its parent's mount namespace;
the mount namespace is preserved across an
.BR execve (2).
.PP
A process can obtain a private mount namespace if:
it was created using the
.BR clone (2)
.BR CLONE_NEWNS
flag,
in which case its new namespace is initialized to be a
.I copy
of the namespace of the process that called
.BR clone (2);
or it calls
.BR unshare (2)
with the
.BR 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.
.PP
The Linux-specific
.I /proc/[pid]/mounts
file exposes the list of mount points in the mount
namespace of the process with the specified ID; see
.BR proc (5)
for details.
.SH SEE ALSO
.BR mountpoint (1),
.BR umount (2),
.BR mount_namespaces (7),
.BR path_resolution (7),
.BR findmnt (8),
.BR lsblk (8),
.BR mount (8),
.BR umount (8)
