.\" Copyright (c) 1996-2004 Andries Brouwer
.\" Copyright (C) 2006-2012 Karel Zak <kzak@redhat.com>
.\"
.\" This page is somewhat derived from a page that was
.\" (c) 1980, 1989, 1991 The Regents of the University of California
.\" and had been heavily modified by Rik Faith and myself.
.\" (Probably no BSD text remains.)
.\" Fragments of text were written by Werner Almesberger, Remy Card,
.\" Stephen Tweedie and Eric Youngdale.
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License along
.\" with this program; if not, write to the Free Software Foundation, Inc.,
.\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
.\"
.TH MOUNT 8 "August 2015" "util-linux" "System Administration"
.SH NAME
mount \- mount a filesystem
.SH SYNOPSIS
.B mount
.RB [ \-l | \-h | \-V ]
.LP
.B mount \-a
.RB [ \-fFnrsvw ]
.RB [ \-t
.IR fstype ]
.RB [ \-O
.IR optlist ]
.LP
.B mount
.RB [ \-fnrsvw ]
.RB [ \-o
.IR options ]
.IR device | dir
.LP
.B mount
.RB [ \-fnrsvw ]
.RB [ \-t
.IB fstype ]
.RB [ \-o
.IR options ]
.I device dir
.SH DESCRIPTION
All files accessible in a Unix system are arranged in one big
tree, the file hierarchy, rooted at
.IR / .
These files can be spread out over several devices.  The
.B mount
command serves to attach the filesystem found on some device
to the big file tree.  Conversely, the
.BR umount (8)
command will detach it again.

The standard form of the
.B mount
command is:
.RS

.br
.BI "mount \-t" " type device dir"
.br

.RE
This tells the kernel to attach the filesystem found on
.I device
(which is of type
.IR type )
at the directory
.IR dir .
The previous contents (if any) and owner and mode of
.I dir
become invisible, and as long as this filesystem remains mounted,
the pathname
.I dir
refers to the root of the filesystem on
.IR device .

If only the directory or the device is given, for example:
.RS
.sp
.BI "mount /dir"
.sp
.RE
then \fBmount\fR looks for a mountpoint (and if not found then for a device) in the
.IR /etc/fstab
file.  It's possible to use the
.B \-\-target
or
.B \-\-source
options to avoid ambivalent interpretation of the given argument.  For example:
.RS
.sp
.BI "mount \-\-target /mountpoint"
.sp
.RE

.SS Listing the mounts
The listing mode is maintained for backward compatibility only.

For more robust and customizable output use
.BR findmnt (8),
\fBespecially in your scripts\fP.  Note that control characters in the
mountpoint name are replaced with '?'.

The following command lists all mounted filesystems (of type
.IR type ):
.RS
.sp
.BR "mount " [ \-l "] [" "\-t \fItype\/\fP" ]
.sp
.RE
The option \fB\-l\fR adds labels to this listing.  See below.

.SS Indicating the device
Most devices are indicated by a filename (of a block special device), like
.IR /dev/sda1 ,
but there are other possibilities.  For example, in the case of an NFS mount,
.I device
may look like
.IR knuth.cwi.nl:/dir .
It is also possible to indicate a block special device using its filesystem label
or UUID (see the \fB\-L\fR and \fB\-U\fR options below), or its partition label
or UUID.  (Partition identifiers are supported for example for GUID Partition
Tables (GPT).)

Don't forget that there is no guarantee that UUIDs and labels are really
unique, especially if you move, share or copy the device.  Use
.B "lsblk \-o +UUID,PARTUUID"
to verify that the UUIDs are really unique in your system.

The recommended setup is to use tags (e.g.\& \fBLABEL=\fIlabel\fR) rather than
.I /dev/disk/by-{label,uuid,partuuid,partlabel}
udev symlinks in the
.I /etc/fstab
file.  Tags are
more readable, robust and portable.  The
.BR mount (8)
command internally uses udev
symlinks, so the use of symlinks in /etc/fstab has no advantage over tags.
For more details see
.BR libblkid (3).

Note that
.BR mount (8)
uses UUIDs as strings.  The UUIDs from the command line or from
.BR fstab (5)
are not converted to internal binary representation.  The string representation
of the UUID should be based on lower case characters.

The
.I proc
filesystem is not associated with a special device, and when
mounting it, an arbitrary keyword, such as
.I proc
can be used instead of a device specification.
(The customary choice
.I none
is less fortunate: the error message `none busy' from
.B umount
can be confusing.)

.SS The files /etc/fstab, /etc/mtab and /proc/mounts
The file
.I /etc/fstab
(see
.BR fstab (5)),
may contain lines describing what devices are usually
mounted where, using which options.  The default location of the
.BR fstab (5)
file can be overridden with the
.BI \-\-fstab " path"
command-line option (see below for more details).
.LP
The command
.RS
.sp
.B mount \-a
.RB [ \-t
.IR type ]
.RB [ \-O
.IR optlist ]
.sp
.RE
(usually given in a bootscript) causes all filesystems mentioned in
.I fstab
(of the proper type and/or having or not having the proper options)
to be mounted as indicated, except for those whose line contains the
.B noauto
keyword.  Adding the
.B \-F
option will make \fBmount\fR fork, so that the
filesystems are mounted simultaneously.
.LP
When mounting a filesystem mentioned in
.I fstab
or
.IR mtab ,
it suffices to specify on the command line only the device, or only the mount point.
.sp
The programs
.B mount
and
.B umount
traditionally maintained a list of currently mounted filesystems in the file
.IR /etc/mtab .
This real mtab file is still supported, but on current Linux systems it is
better to make it a symlink to
.I /proc/mounts
instead, because a regular mtab file maintained in userspace cannot reliably
work with namespaces, containers and other advanced Linux features.
.sp
If no arguments are given to
.BR mount ,
the list of mounted filesystems is printed.
.sp
If you want to override mount options from
.I /etc/fstab
you have to use the \fB\-o\fR option:
.RS
.sp
.BI mount " device" \fR| "dir " \-o " options"
.sp
.RE
and then the mount options from the command line will be appended to
the list of options from
.IR /etc/fstab .
The usual behavior is that the last option wins if there are conflicting
ones.
.sp
The
.B mount
program does not read the
.I /etc/fstab
file if both
.I device
(or LABEL, UUID, PARTUUID or PARTLABEL) and
.I dir
are specified.  For example, to mount device
.BR foo " at " /dir :
.RS
.sp
.B "mount /dev/foo /dir"
.sp
.RE

.SS Non-superuser mounts
Normally, only the superuser can mount filesystems.
However, when
.I fstab
contains the
.B user
option on a line, anybody can mount the corresponding filesystem.
.LP
Thus, given a line
.RS
.sp
.B "/dev/cdrom  /cd  iso9660  ro,user,noauto,unhide"
.sp
.RE
any user can mount the iso9660 filesystem found on an inserted CDROM
using the command:
.RS
.B "mount /cd"
.sp
.RE
Note that \fBmount\fR is very strict about non-root users and all paths
specified on command line are verified before fstab is parsed or a helper
program is executed. It's strogly recommended to use a valid mountpoint to
specify filesystem, otherwise \fBmount\fR may fail. For example it's bad idea
to use NFS or CIFS source on command line.
.PP
For more details, see
.BR fstab (5).
Only the user that mounted a filesystem can unmount it again.
If any user should be able to unmount it, then use
.B users
instead of
.B user
in the
.I fstab
line.
The
.B owner
option is similar to the
.B user
option, with the restriction that the user must be the owner
of the special file.  This may be useful e.g.\& for
.I /dev/fd
if a login script makes the console user owner of this device.
The
.B group
option is similar, with the restriction that the user must be
member of the group of the special file.

.SS Bind mounts
Since Linux 2.4.0 it is possible to remount part of the
file hierarchy somewhere else.  The call is:

.RS
.br
.B mount \-\-bind
.I olddir newdir
.RE

or by using this fstab entry:

.RS
.br
.BI / olddir
.BI / newdir
.B none bind
.RE

After this call the same contents are accessible in two places.
One can also remount a single file (on a single file).  It's also
possible to use the bind mount to create a mountpoint from a regular
directory, for example:

.RS
.br
.B mount \-\-bind foo foo
.RE

The bind mount call attaches only (part of) a single filesystem, not possible
submounts.  The entire file hierarchy including submounts is attached
a second place by using:

.RS
.br
.B mount \-\-rbind
.I olddir newdir
.RE

Note that the filesystem mount options will remain the same as those
on the original mount point.

.BR mount (8)
since v2.27 allows to change the mount options by passing the
relevant options along with
.BR \-\-bind .
For example:

.RS
.br
.B mount \-\-bind,ro foo foo
.RE

This feature is not supported by the Linux kernel; it is implemented in userspace
by an additional \fBmount\fR(2) remounting system call.
This solution is not atomic.

The alternative (classic) way to create a read-only bind mount is to use the remount
operation, for example:

.RS
.br
.B mount \-\-bind
.I olddir newdir
.br
.B mount \-o remount,bind,ro
.I olddir newdir
.RE

Note that a read-only bind will create a read-only mountpoint (VFS entry),
but the original filesystem superblock will still be writable, meaning that the
.I olddir
will be writable, but the
.I newdir
will be read-only.

It's also possible to change nosuid, nodev, noexec, noatime, nodiratime and
relatime VFS entry flags by "remount,bind" operation. It's impossible to change
mount options recursively (for example with \fB-o rbind,ro\fR).
.RE

.SS The move operation
Since Linux 2.5.1 it is possible to atomically move a
.B mounted tree
to another place.  The call is:

.RS
.br
.B mount \-\-move
.I olddir newdir
.RE

This will cause the contents which previously appeared under
.I olddir
to now be accessible under
.IR newdir .
The physical location of the files is not changed.
Note that
.I olddir
has to be a mountpoint.

Note also that moving a mount residing under a shared mount is invalid and
unsupported.  Use
.B findmnt \-o TARGET,PROPAGATION
to see the current propagation flags.

.SS Shared subtree operations
Since Linux 2.6.15 it is possible to mark a mount and its submounts as shared,
private, slave or unbindable.  A shared mount provides the ability to create mirrors
of that mount such that mounts and unmounts within any of the mirrors propagate
to the other mirror.  A slave mount receives propagation from its master, but
not vice versa.  A private mount carries no propagation abilities.  An
unbindable mount is a private mount which cannot be cloned through a bind
operation.  The detailed semantics are documented in
.I Documentation/filesystems/sharedsubtree.txt
file in the kernel source tree.

Supported operations are:

.RS
.nf
.BI "mount \-\-make\-shared " mountpoint
.BI "mount \-\-make\-slave " mountpoint
.BI "mount \-\-make\-private " mountpoint
.BI "mount \-\-make\-unbindable " mountpoint
.fi
.RE

The following commands allow one to recursively change the type of all the
mounts under a given mountpoint.

.RS
.nf
.BI "mount \-\-make\-rshared " mountpoint
.BI "mount \-\-make\-rslave " mountpoint
.BI "mount \-\-make\-rprivate " mountpoint
.BI "mount \-\-make\-runbindable " mountpoint
.fi
.RE

.BR mount (8)
.B does not read
.BR fstab (5)
when a \fB\-\-make-\fR* operation is requested.  All necessary information has to be
specified on the command line.

Note that the Linux kernel does not allow to change multiple propagation flags
with a single
.BR mount (2)
system call, and the flags cannot be mixed with other mount options.

Since util-linux 2.23 the \fBmount\fR command allows to use several propagation flags
together and also together with other mount operations.  This feature is EXPERIMENTAL.
The propagation flags are applied by additional \fBmount\fR(2) system calls when the
preceding mount operations were successful.  Note that this use case is not
atomic.  It is possible to specify the propagation flags in
.BR fstab (5)
as mount options
.RB ( private ,
.BR slave ,
.BR shared ,
.BR unbindable ,
.BR rprivate ,
.BR rslave ,
.BR rshared ,
.BR runbindable ).

For example:

.RS
.nf
.BI "mount \-\-make\-private \-\-make\-unbindable /dev/sda1 /foo"
.fi
.RE

is the same as:

.RS
.nf
.BI "mount /dev/sda1 /foo"
.BI "mount \-\-make\-private /foo"
.BI "mount \-\-make\-unbindable /foo"
.fi
.RE

.SH COMMAND-LINE OPTIONS
The full set of mount options used by an invocation of
.B mount
is determined by first extracting the
mount options for the filesystem from the
.I fstab
table, then applying any options specified by the
.B \-o
argument, and finally applying a
.BR \-r " or " \-w
option, when present.

The command \fBmount\fR does not pass all command-line options to the
\fB/sbin/mount.\fIsuffix\fR mount helpers.  The interface between \fBmount\fR
and the mount helpers is described below in the section \fBEXTERNAL HELPERS\fR.
.sp
Command-line options available for the
.B mount
command are:
.TP
.BR \-a , " \-\-all"
Mount all filesystems (of the given types) mentioned in
.I fstab
(except for those whose line contains the
.B noauto
keyword).  The filesystems are mounted following their order in
.IR fstab .
.sp
Note that it is a bad practice to use \fBmount \-a\fR for
.IR fstab
checking. The recommended solution is \fBfindmnt \-\-verify\fR.
.TP
.BR \-B , " \-\-bind"
Remount a subtree somewhere else (so that its contents are available
in both places).  See above, under \fBBind mounts\fR.
.TP
.BR \-c , " \-\-no\-canonicalize"
Don't canonicalize paths.  The mount command canonicalizes all paths
(from command line or fstab) by default.  This option can be used
together with the
.B \-f
flag for already canonicalized absolute paths.  The option is designed for mount
helpers which call \fBmount -i\fR.  It is strongly recommended to not use this
command-line option for normal mount operations.
.sp
Note that \fBmount\fR(8) does not pass this option to the
\fB/sbin/mount.\fItype\fR helpers.
.TP
.BR \-F , " \-\-fork"
(Used in conjunction with
.BR \-a .)
Fork off a new incarnation of \fBmount\fR for each device.
This will do the mounts on different devices or different NFS servers
in parallel.
This has the advantage that it is faster; also NFS timeouts go in
parallel.  A disadvantage is that the mounts are done in undefined order.
Thus, you cannot use this option if you want to mount both
.I /usr
and
.IR /usr/spool .
.IP "\fB\-f, \-\-fake\fP"
Causes everything to be done except for the actual system call; if it's not
obvious, this ``fakes'' mounting the filesystem.  This option is useful in
conjunction with the
.B \-v
flag to determine what the
.B mount
command is trying to do.  It can also be used to add entries for devices
that were mounted earlier with the \fB\-n\fR option.  The \fB\-f\fR option
checks for an existing record in /etc/mtab and fails when the record already
exists (with a regular non-fake mount, this check is done by the kernel).
.IP "\fB\-i, \-\-internal\-only\fP"
Don't call the \fB/sbin/mount.\fIfilesystem\fR helper even if it exists.
.TP
.BR \-L , " \-\-label " \fIlabel
Mount the partition that has the specified
.IR label .
.TP
.BR \-l , " \-\-show\-labels"
Add the labels in the mount output.  \fBmount\fR must have
permission to read the disk device (e.g.\& be set-user-ID root) for this to work.
One can set such a label for ext2, ext3 or ext4 using the
.BR e2label (8)
utility, or for XFS using
.BR xfs_admin (8),
or for reiserfs using
.BR reiserfstune (8).
.TP
.BR \-M , " \-\-move"
Move a subtree to some other place.  See above, the subsection
\fBThe move operation\fR.
.TP
.BR \-n , " \-\-no\-mtab"
Mount without writing in
.IR /etc/mtab .
This is necessary for example when
.I /etc
is on a read-only filesystem.
.TP
.BR \-O , " \-\-test\-opts " \fIopts
Limit the set of filesystems to which the
.B \-a
option applies.  In this regard it is like the
.B \-t
option except that
.B \-O
is useless without
.BR \-a .
For example, the command:
.RS
.RS
.sp
.B "mount \-a \-O no_netdev"
.sp
.RE
mounts all filesystems except those which have the option
.I _netdev
specified in the options field in the
.I /etc/fstab
file.

It is different from
.B \-t
in that each option is matched exactly; a leading
.B no
at the beginning of one option does not negate the rest.

The
.B \-t
and
.B \-O
options are cumulative in effect; that is, the command
.RS
.sp
.B "mount \-a \-t ext2 \-O _netdev"
.sp
.RE
mounts all ext2 filesystems with the _netdev option, not all filesystems
that are either ext2 or have the _netdev option specified.
.RE
.TP
.BR \-o , " \-\-options " \fIopts
Use the specified mount options.  The \fIopts\fR argument is
a comma-separated list.  For example:
.RS
.RS
.sp
.B "mount LABEL=mydisk \-o noatime,nodev,nosuid"
.sp
.RE

For more details, see the
.B FILESYSTEM-INDEPENDENT MOUNT OPTIONS
and
.B FILESYSTEM-SPECIFIC MOUNT OPTIONS
sections.
.RE

.TP
.BR \-R , " \-\-rbind"
Remount a subtree and all possible submounts somewhere else (so that its
contents are available in both places).  See above, the subsection
\fBBind mounts\fR.
.TP
.BR \-r , " \-\-read\-only"
Mount the filesystem read-only.  A synonym is
.BR "\-o ro" .
.sp
Note that, depending on the filesystem type, state and kernel behavior, the
system may still write to the device.  For example, ext3 and ext4 will replay the
journal if the filesystem is dirty.  To prevent this kind of write access, you
may want to mount an ext3 or ext4 filesystem with the \fBro,noload\fR mount
options or set the block device itself to read-only mode, see the
.BR blockdev (8)
command.
.TP
.B \-s
Tolerate sloppy mount options rather than failing.  This will ignore mount
options not supported by a filesystem type.  Not all filesystems support this
option.  Currently it's supported by the \fBmount.nfs\fR mount helper only.
.TP
.BI \-\-source " device"
If only one argument for the mount command is given then the argument might be
interpreted as target (mountpoint) or source (device).  This option allows to
explicitly define that the argument is the mount source.
.TP
.BI \-\-target " directory"
If only one argument for the mount command is given then the argument might be
interpreted as target (mountpoint) or source (device).  This option allows to
explicitly define that the argument is the mount target.
.TP
.BR \-T , " \-\-fstab " \fIpath
Specifies an alternative fstab file.  If \fIpath\fP is a directory then the files
in the directory are sorted by
.BR strverscmp (3);
files that start with "."\& or without an \&.fstab extension are ignored.  The option
can be specified more than once.  This option is mostly designed for initramfs
or chroot scripts where additional configuration is specified beyond standard
system configuration.
.sp
Note that \fBmount\fR(8) does not pass the option \fB\-\-fstab\fP to the
\fB/sbin/mount.\fItype\fR helpers, meaning that the alternative fstab files will be
invisible for the helpers.  This is no problem for normal mounts, but user
(non-root) mounts always require fstab to verify the user's rights.
.TP
.BR \-t , " \-\-types " \fIfstype
The argument following the
.B \-t
is used to indicate the filesystem type.  The filesystem types which are
currently supported depend on the running kernel.  See
.I /proc/filesystems
and
.I /lib/modules/$(uname -r)/kernel/fs
for a complete list of the filesystems.  The most common are ext2, ext3, ext4,
xfs, btrfs, vfat, sysfs, proc, nfs and cifs.
.sp
The programs
.B mount
and
.B umount
support filesystem subtypes.  The subtype is defined by a '.subtype' suffix.  For
example  'fuse.sshfs'.  It's recommended to use subtype notation rather than add
any prefix to the mount source (for example 'sshfs#example.com' is
deprecated).

If no
.B \-t
option is given, or if the
.B auto
type is specified, mount will try to guess the desired type.
Mount uses the blkid library for guessing the filesystem
type; if that does not turn up anything that looks familiar,
mount will try to read the file
.IR /etc/filesystems ,
or, if that does not exist,
.IR /proc/filesystems .
All of the filesystem types listed there will be tried,
except for those that are labeled "nodev" (e.g.\&
.IR devpts ,
.I proc
and
.IR nfs ).
If
.I /etc/filesystems
ends in a line with a single *, mount will read
.I /proc/filesystems
afterwards.  While trying, all filesystem types will be
mounted with the mount option \fBsilent\fR.
.sp
The
.B auto
type may be useful for user-mounted floppies.
Creating a file
.I /etc/filesystems
can be useful to change the probe order (e.g., to try vfat before msdos
or ext3 before ext2) or if you use a kernel module autoloader.
.sp
More than one type may be specified in a comma-separated
list, for option
.B \-t
as well as in an
.I /etc/fstab
entry.  The list of filesystem types for option
.B \-t
can be prefixed with
.B no
to specify the filesystem types on which no action should be taken.
The prefix
.B no
has no effect when specified in an
.I /etc/fstab
entry.
.sp
The prefix
.B no
can be meaningful with the
.B \-a
option.  For example, the command
.RS
.RS
.sp
.B "mount \-a \-t nomsdos,smbfs"
.sp
.RE
mounts all filesystems except those of type
.I msdos
and
.IR smbfs .
.sp
For most types all the
.B mount
program has to do is issue a simple
.BR mount (2)
system call, and no detailed knowledge of the filesystem type is required.
For a few types however (like nfs, nfs4, cifs, smbfs, ncpfs) an ad hoc code is
necessary.  The nfs, nfs4, cifs, smbfs, and ncpfs filesystems
have a separate mount program.  In order to make it possible to
treat all types in a uniform way, \fBmount\fR will execute the program
.BI /sbin/mount. type
(if that exists) when called with type
.IR type .
Since different versions of the
.B smbmount
program have different calling conventions,
.B /sbin/mount.smbfs
may have to be a shell script that sets up the desired call.
.RE
.TP
.BR \-U , " \-\-uuid " \fIuuid
Mount the partition that has the specified
.IR uuid .
.TP
.BR \-v , " \-\-verbose"
Verbose mode.
.TP
.BR \-w , " \-\-rw" , " \-\-read\-write"
Mount the filesystem read/write.  This is the default.  A synonym is
.BR "\-o rw" .
.TP
.BR \-V , " \-\-version"
Display version information and exit.
.TP
.BR \-h , " \-\-help"
Display help text and exit.

.SH FILESYSTEM-INDEPENDENT MOUNT OPTIONS
Some of these options are only useful when they appear in the
.I /etc/fstab
file.

Some of these options could be enabled or disabled by default
in the system kernel.  To check the current setting see the options
in /proc/mounts.  Note that filesystems also have per-filesystem
specific default mount options (see for example \fBtune2fs \-l\fP
output for extN filesystems).

The following options apply to any filesystem that is being
mounted (but not every filesystem actually honors them \(en e.g.\&, the
.B sync
option today has an effect only for ext2, ext3, fat, vfat and ufs):

.TP
.B async
All I/O to the filesystem should be done asynchronously.  (See also the
.B sync
option.)
.TP
.B atime
Do not use the \fBnoatime\fR feature, so the inode access time is controlled
by kernel defaults.  See also the descriptions of the \fB\%relatime\fR and
.B strictatime
mount options.
.TP
.B noatime
Do not update inode access times on this filesystem (e.g.\& for faster
access on the news spool to speed up news servers).  This works for all
inode types (directories too), so it implies \fB\%nodiratime\fR.
.TP
.B auto
Can be mounted with the
.B \-a
option.
.TP
.B noauto
Can only be mounted explicitly (i.e., the
.B \-a
option will not cause the filesystem to be mounted).
.TP
.na
.BR context=\fIcontext ", " fscontext=\fIcontext ", " defcontext=\fIcontext ", and " \%rootcontext=\fIcontext
.ad
The
.B context=
option is useful when mounting filesystems that do not support
extended attributes, such as a floppy or hard disk formatted with VFAT, or
systems that are not normally running under SELinux, such as an ext3 formatted
disk from a non-SELinux workstation.  You can also use
.B context=
on filesystems you do not trust, such as a floppy.  It also helps in compatibility with
xattr-supporting filesystems on earlier 2.4.<x> kernel versions.  Even where
xattrs are supported, you can save time not having to label every file by
assigning the entire disk one security context.

A commonly used option for removable media is
.BR \%context="system_u:object_r:removable_t" .

Two other options are
.B fscontext=
and
.BR defcontext= ,
both of which are mutually exclusive of the context option.  This means you
can use fscontext and defcontext with each other, but neither can be used with
context.

The
.B fscontext=
option works for all filesystems, regardless of their xattr
support.  The fscontext option sets the overarching filesystem label to a
specific security context.  This filesystem label is separate from the
individual labels on the files.  It represents the entire filesystem for
certain kinds of permission checks, such as during mount or file creation.
Individual file labels are still obtained from the xattrs on the files
themselves.  The context option actually sets the aggregate context that
fscontext provides, in addition to supplying the same label for individual
files.

You can set the default security context for unlabeled files using
.B defcontext=
option.  This overrides the value set for unlabeled files in the policy and requires a
filesystem that supports xattr labeling.

The
.B rootcontext=
option allows you to explicitly label the root inode of a FS being mounted
before that FS or inode becomes visible to userspace.  This was found to be
useful for things like stateless linux.

Note that the kernel rejects any remount request that includes the context
option, \fBeven\fP when unchanged from the current context.

.BR "Warning: the \fIcontext\fP value might contain commas" ,
in which case the value has to be properly quoted, otherwise
.BR mount (8)
will interpret the comma as a separator between mount options.  Don't forget that
the shell strips off quotes and thus
.BR "double quoting is required" .
For example:
.RS
.RS
.sp
.nf
.B mount \-t tmpfs none /mnt \-o \e
.B \ \ 'context="system_u:object_r:tmp_t:s0:c127,c456",noexec'
.fi
.sp
.RE
For more details, see
.BR selinux (8).
.RE

.TP
.B defaults
Use the default options:
.BR rw ", " suid ", " dev ", " exec ", " auto ", " nouser ", and " async .

Note that the real set of all default mount options depends on kernel
and filesystem type.  See the beginning of this section for more details.
.TP
.B dev
Interpret character or block special devices on the filesystem.
.TP
.B nodev
Do not interpret character or block special devices on the file
system.
.TP
.B diratime
Update directory inode access times on this filesystem.  This is the default.
(This option is ignored when \fBnoatime\fR is set.)
.TP
.B nodiratime
Do not update directory inode access times on this filesystem.
(This option is implied when \fBnoatime\fR is set.)
.TP
.B dirsync
All directory updates within the filesystem should be done synchronously.
This affects the following system calls: creat, link, unlink, symlink,
mkdir, rmdir, mknod and rename.
.TP
.B exec
Permit execution of binaries.
.TP
.B noexec
Do not permit direct execution of any binaries on the mounted filesystem.
(Until recently it was possible to run binaries anyway using a command like
/lib/ld*.so /mnt/binary.  This trick fails since Linux 2.4.25 / 2.6.0.)
.TP
.B group
Allow an ordinary user to mount the filesystem if one
of that user's groups matches the group of the device.
This option implies the options
.BR nosuid " and " nodev
(unless overridden by subsequent options, as in the option line
.BR group,dev,suid ).
.TP
.B iversion
Every time the inode is modified, the i_version field will be incremented.
.TP
.B noiversion
Do not increment the i_version inode field.
.TP
.B mand
Allow mandatory locks on this filesystem.  See
.BR fcntl (2).
.TP
.B nomand
Do not allow mandatory locks on this filesystem.
.TP
.B _netdev
The filesystem resides on a device that requires network access
(used to prevent the system from attempting to mount these filesystems
until the network has been enabled on the system).
.TP
.B nofail
Do not report errors for this device if it does not exist.
.TP
.B relatime
Update inode access times relative to modify or change time.  Access
time is only updated if the previous access time was earlier than the
current modify or change time.  (Similar to \fB\%noatime\fR, but it doesn't
break \fBmutt\fR or other applications that need to know if a file has been
read since the last time it was modified.)

Since Linux 2.6.30, the kernel defaults to the behavior provided by this
option (unless
.B \%noatime
was specified), and the
.B \%strictatime
option 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.
.TP
.B norelatime
Do not use the
.B relatime
feature.  See also the
.B strictatime
mount option.
.TP
.B strictatime
Allows to explicitly request full atime updates.  This makes it
possible for the kernel to default to
.B \%relatime
or
.B \%noatime
but still allow userspace to override it.  For more details about the default
system mount options see /proc/mounts.
.TP
.B nostrictatime
Use the kernel's default behavior for inode access time updates.
.TP
.B lazytime
Only update times (atime, mtime, ctime) on the in-memory version of the file inode.

This mount option significantly reduces writes to the inode table for
workloads that perform frequent random writes to preallocated files.

The on-disk timestamps are updated only when:
.sp
.RS
- the inode needs to be updated for some change unrelated to file timestamps
.sp
- the application employs
.BR fsync (2),
.BR syncfs (2),
or
.BR sync (2)
.sp
- an undeleted inode is evicted from memory
.sp
- more than 24 hours have passed since the i-node was written to disk.
.RE
.sp
.TP
.B nolazytime
Do not use the lazytime feature.
.TP
.B suid
Allow set-user-ID or set-group-ID bits to take
effect.
.TP
.B nosuid
Do not allow set-user-ID or set-group-ID bits to take
effect.
.TP
.B silent
Turn on the silent flag.
.TP
.B loud
Turn off the silent flag.
.TP
.B owner
Allow an ordinary user to mount the filesystem if that
user is the owner of the device.
This option implies the options
.BR nosuid " and " nodev
(unless overridden by subsequent options, as in the option line
.BR owner,dev,suid ).
.TP
.B remount
Attempt to remount an already-mounted filesystem.  This is commonly
used to change the mount flags for a filesystem, especially to make a
readonly filesystem writable.  It does not change device or mount point.

The remount functionality follows the standard way the mount command works
with options from fstab.  This means that \fBmount\fR does not
read fstab (or mtab) only when both
.I device
and
.I dir
are specified.
.sp
.in +4
.B "mount \-o remount,rw /dev/foo /dir"
.in
.sp
After this call all old mount options are replaced and arbitrary stuff from
fstab (or mtab) is ignored, except the loop= option which is internally
generated and maintained by the mount command.
.sp
.in +4
.B "mount \-o remount,rw  /dir"
.in
.sp
After this call, mount reads fstab and merges these options with
the options from the command line (\fB\-o\fR).
If no mountpoint is found in fstab, then a remount with unspecified source is
allowed.
.TP
.B ro
Mount the filesystem read-only.
.TP
.B rw
Mount the filesystem read-write.
.TP
.B sync
All I/O to the filesystem should be done synchronously.  In the case of
media with a limited number of write cycles
(e.g.\& some flash drives), \fBsync\fR may cause life-cycle shortening.
.TP
.B user
Allow an ordinary user to mount the filesystem.
The name of the mounting user is written to the mtab file (or to the private
libmount file in /run/mount on systems without a regular mtab) so that this
same user can unmount the filesystem again.
This option implies the options
.BR noexec ", " nosuid ", and " nodev
(unless overridden by subsequent options, as in the option line
.BR user,exec,dev,suid ).
.TP
.B nouser
Forbid an ordinary user to mount the filesystem.
This is the default; it does not imply any other options.
.TP
.B users
Allow any user to mount and to unmount the filesystem, even
when some other ordinary user mounted it.
This option implies the options
.BR noexec ", " nosuid ", and " nodev
(unless overridden by subsequent options, as in the option line
.BR users,exec,dev,suid ).
.TP
.B x-*
All options prefixed with "x-" are interpreted as comments or as userspace
application-specific options.  These options are not stored in the mtab file,
nor sent to the mount.\fItype\fR helpers nor to the
.BR mount (2)
system call.  The suggested format is \fBx-\fIappname\fR.\fIoption\fR
(e.g.\& \fBx-systemd.automount\fR).
.TP
.BR x-mount.mkdir [ = \fImode\fR ]
Allow to make a target directory (mountpoint).  The optional argument
.I mode
specifies the filesystem access mode used for
.BR mkdir (2)
in octal notation.  The default mode is 0755.  This functionality is supported
only for root users.

.SH "FILESYSTEM-SPECIFIC MOUNT OPTIONS"
The following options apply only to certain filesystems.
We sort them by filesystem.  They all follow the
.B \-o
flag.
.sp
What options are supported depends a bit on the running kernel.
More info may be found in the kernel source subdirectory
.IR Documentation/filesystems .

.SS "Mount options for adfs"
.TP
\fBuid=\fP\,\fIvalue\fP and \fBgid=\fP\,\fIvalue\fP
Set the owner and group of the files in the filesystem (default: uid=gid=0).
.TP
\fBownmask=\fP\,\fIvalue\fP and \fBothmask=\fP\,\fIvalue\fP
Set the permission mask for ADFS 'owner' permissions and 'other' permissions,
respectively (default: 0700 and 0077, respectively).
See also
.IR /usr/src/linux/Documentation/filesystems/adfs.txt .

.SS "Mount options for affs"
.TP
\fBuid=\fP\,\fIvalue\fP and \fBgid=\fP\,\fIvalue\fP
Set the owner and group of the root of the filesystem (default: uid=gid=0,
but with option
.B uid
or
.B gid
without specified value, the UID and GID of the current process are taken).
.TP
\fBsetuid=\fP\,\fIvalue\fP and \fBsetgid=\fP\,\fIvalue\fP
Set the owner and group of all files.
.TP
.BI mode= value
Set the mode of all files to
.IR value " & 0777"
disregarding the original permissions.
Add search permission to directories that have read permission.
The value is given in octal.
.TP
.B protect
Do not allow any changes to the protection bits on the filesystem.
.TP
.B usemp
Set UID and GID of the root of the filesystem to the UID and GID
of the mount point upon the first sync or umount, and then
clear this option.  Strange...
.TP
.B verbose
Print an informational message for each successful mount.
.TP
.BI prefix= string
Prefix used before volume name, when following a link.
.TP
.BI volume= string
Prefix (of length at most 30) used before '/' when following a symbolic link.
.TP
.BI reserved= value
(Default: 2.) Number of unused blocks at the start of the device.
.TP
.BI root= value
Give explicitly the location of the root block.
.TP
.BI bs= value
Give blocksize.  Allowed values are 512, 1024, 2048, 4096.
.TP
.BR grpquota | noquota | quota | usrquota
These options are accepted but ignored.
(However, quota utilities may react to such strings in
.IR /etc/fstab .)

.SS "Mount options for btrfs"
Btrfs is a copy-on-write filesystem for Linux aimed at
implementing advanced features while focusing on fault tolerance,
repair, and easy administration.
.TP
.BI alloc_start= bytes
Debugging option to force all block allocations above a certain
byte threshold on each block device.  The value is specified in
bytes, optionally with a K, M, or G suffix, case insensitive.
Default is 1MB.
.TP
.B autodefrag
Disable/enable auto defragmentation.
Auto defragmentation detects small random writes into files and queues
them up for the defrag process.  Works best for small files;
not well-suited for large database workloads.
.TP
.BR check_int | check_int_data | check_int_print_mask =\fIvalue\fR
These debugging options control the behavior of the integrity checking
module(the BTRFS_FS_CHECK_INTEGRITY config option required).

.B check_int
enables the integrity checker module, which examines all
block-write requests to ensure on-disk consistency, at a large
memory and CPU cost.

.B check_int_data
includes extent data in the integrity checks, and
implies the check_int option.

.B check_int_print_mask
takes a bitmask of BTRFSIC_PRINT_MASK_* values
as defined in fs/btrfs/check-integrity.c, to control the integrity
checker module behavior.

See comments at the top of
.IR fs/btrfs/check-integrity.c
for more info.
.TP
.BI commit= seconds
Set the interval of periodic commit, 30 seconds by default.  Higher
values defer data being synced to permanent storage, with obvious
consequences when the system crashes.  The upper bound is not forced,
but a warning is printed if it's more than 300 seconds (5 minutes).
.TP
.BR compress | compress= \fItype\fR| compress-force | compress-force= \fItype\fR
Control BTRFS file data compression.  Type may be specified as "zlib"
"lzo" or "no" (for no compression, used for remounting).  If no type
is specified, zlib is used.  If \fBcompress-force\fR is specified,
all files will be compressed, whether or not they compress well.
If compression is enabled, \fBnodatacow\fR and \fBnodatasum\fR are disabled.
.TP
.B degraded
Allow mounts to continue with missing devices.  A read-write mount may
fail with too many devices missing, for example if a stripe member
is completely missing.
.TP
.BI device= devicepath
Specify a device during mount so that ioctls on the control device
can be avoided.  Especially useful when trying to mount a multi-device
setup as root.  May be specified multiple times for multiple devices.
.TP
.B discard
Disable/enable the discard mount option.
The discard function issues frequent commands to let the block device
reclaim space freed by the filesystem.
This is useful for SSD devices, thinly provisioned
LUNs and virtual machine images, but may have a significant
performance impact.  (The \fBfstrim\fR command is also available to
initiate batch trims from userspace.)
.TP
.B enospc_debug
Disable/enable debugging option to be more verbose in some ENOSPC conditions.
.TP
.BI fatal_errors= action
Action to take when encountering a fatal error: 
  "bug" - BUG() on a fatal error.  This is the default.
  "panic" - panic() on a fatal error.
.TP
.B flushoncommit
The
.B flushoncommit
mount option forces any data dirtied by a write in a
prior transaction to commit as part of the current commit.  This makes
the committed state a fully consistent view of the filesystem from the
application's perspective (i.e., it includes all completed filesystem
operations).  This was previously the behavior only when a snapshot is
created.
.TP
.B inode_cache
Enable free inode number caching.   Defaults to off due to an overflow
problem when the free space CRCs don't fit inside a single page.
.TP
.BI max_inline= bytes
Specify the maximum amount of space, in bytes, that can be inlined in
a metadata B-tree leaf.  The value is specified in bytes, optionally
with a K, M, or G suffix, case insensitive.  In practice, this value
is limited by the root sector size, with some space unavailable due
to leaf headers.  For a 4k sectorsize, max inline data is ~3900 bytes.
.TP
.BI metadata_ratio= value
Specify that 1 metadata chunk should be allocated after every
.I value
data chunks.  Off by default.
.TP
.B noacl
Enable/disable support for Posix Access Control Lists (ACLs).  See the
.BR acl (5)
manual page for more information about ACLs.
.TP
.B nobarrier
Enable/disable the use of block-layer write barriers.  Write barriers
ensure that certain IOs make it through the device cache and are on
persistent storage.  If disabled on a device with a volatile
(non-battery-backed) write-back cache, the \fBnobarrier\fR option will
lead to filesystem corruption on a system crash or power loss.
.TP
.B nodatacow
Enable/disable data copy-on-write for newly created files.
This option implies \fBnodatasum\fR, and disables all compression.
.TP
.B nodatasum
Enable/disable data checksumming for newly created files.
This option implies \fBdatacow\fR.
.TP
.B notreelog
Enable/disable the tree logging used for fsync and O_SYNC writes.
.TP
.B recovery
Enable autorecovery attempts if a bad tree root is found at mount time.
Currently this scans a list of several previous tree roots and tries to
use the first readable.
.TP
.B rescan_uuid_tree
Force check and rebuild procedure of the UUID tree.  This should not
normally be needed.
.TP
.B skip_balance
Skip automatic resume of an interrupted balance operation after mount.
May be resumed with "btrfs balance resume."
.TP
.B nospace_cache
Disable freespace cache loading without clearing the cache.
.TP
.B clear_cache
Force clearing and rebuilding of the disk space cache if something
has gone wrong.
.TP
.BR ssd | nossd | ssd_spread
Options to control ssd allocation schemes.  By default, BTRFS will
enable or disable ssd allocation heuristics depending on whether a
rotational or non-rotational disk is in use.  The \fBssd\fR and
\fBnossd\fR options can override this autodetection.

The \fBssd_spread\fR mount option attempts to allocate into big chunks
of unused space, and may perform better on low-end ssds.  \fBssd_spread\fR
implies \fBssd\fR, enabling all other ssd heuristics as well.
.TP
.BI subvol= path
Mount subvolume at
.IR path
rather than the root subvolume.  The
.IR path
is relative to the top level subvolume.
.TP
.BI subvolid= ID
Mount subvolume specified by an ID number rather than the root subvolume.
This allows mounting of subvolumes which are not in the root of the mounted
filesystem.
You can use "btrfs subvolume list" to see subvolume ID numbers.
.TP
.BI subvolrootid= objectid "  \fR(deprecated)"
Mount subvolume specified by
.IR objectid
rather than the root subvolume.
This allows mounting of subvolumes which are not in the root of the mounted
filesystem.
You can use "btrfs subvolume show " to see the object ID for a subvolume.
.TP
.BI thread_pool= number
The number of worker threads to allocate.  The default number is equal
to the number of CPUs + 2, or 8, whichever is smaller.
.TP
.B user_subvol_rm_allowed
Allow subvolumes to be deleted by a non-root user.  Use with caution.

.SS "Mount options for cifs"
See the options section of the
.BR mount.cifs (8)
man page (cifs-utils package must be installed).

.SS "Mount options for coherent"
None.

.SS "Mount options for debugfs"
The debugfs filesystem is a pseudo filesystem, traditionally mounted on
.IR /sys/kernel/debug .
.\" or just /debug
.\" present since 2.6.11
As of kernel version 3.4, debugfs has the following options:
.TP
.BI uid= n ", gid=" n
Set the owner and group of the mountpoint.
.TP
.BI mode= value
Sets the mode of the mountpoint.

.SS "Mount options for devpts"
The devpts filesystem is a pseudo filesystem, traditionally mounted on
.IR /dev/pts .
In order to acquire a pseudo terminal, a process opens
.IR /dev/ptmx ;
the number of the pseudo terminal is then made available to the process
and the pseudo terminal slave can be accessed as
.IR /dev/pts/ <number>.
.TP
\fBuid=\fP\,\fIvalue\fP and \fBgid=\fP\,\fIvalue\fP
This sets the owner or the group of newly created PTYs to
the specified values.  When nothing is specified, they will
be set to the UID and GID of the creating process.
For example, if there is a tty group with GID 5, then
.B gid=5
will cause newly created PTYs to belong to the tty group.
.TP
.BI mode= value
Set the mode of newly created PTYs to the specified value.
The default is 0600.
A value of
.B mode=620
and
.B gid=5
makes "mesg y" the default on newly created PTYs.
.TP
\fBnewinstance
Create a private instance of devpts filesystem, such that
indices of ptys allocated in this new instance are
independent of indices created in other instances of devpts.

All mounts of devpts without this
.B newinstance
option share the same set of pty indices (i.e legacy mode).
Each mount of devpts with the
.B newinstance
option has a private set of pty indices.

This option is mainly used to support containers in the
linux kernel.  It is implemented in linux kernel versions
starting with 2.6.29.  Further, this mount option is valid
only if CONFIG_DEVPTS_MULTIPLE_INSTANCES is enabled in the
kernel configuration.

To use this option effectively,
.I /dev/ptmx
must be a symbolic link to
.I pts/ptmx.
See
.I Documentation/filesystems/devpts.txt
in the linux kernel source tree for details.
.TP
.BI ptmxmode= value

Set the mode for the new
.I ptmx
device node in the devpts filesystem.

With the support for multiple instances of devpts (see
.B newinstance
option above), each instance has a private
.I ptmx
node in the root of the devpts filesystem (typically
.IR /dev/pts/ptmx ).

For compatibility with older versions of the kernel, the
default mode of the new
.I ptmx
node is 0000.
.BI ptmxmode= value
specifies a more useful mode for the
.I ptmx
node and is highly recommended when the
.B newinstance
option is specified.

This option is only implemented in linux kernel versions
starting with 2.6.29.  Further, this option is valid only if
CONFIG_DEVPTS_MULTIPLE_INSTANCES is enabled in the kernel
configuration.

.SS "Mount options for ext2"
The `ext2' filesystem is the standard Linux filesystem.
Since Linux 2.5.46, for most mount options the default
is determined by the filesystem superblock.  Set them with
.BR tune2fs (8).
.TP
.BR acl | noacl
Support POSIX Access Control Lists (or not).
.\" requires CONFIG_EXT2_FS_POSIX_ACL
.TP
.BR bsddf | minixdf
Set the behavior for the
.I statfs
system call.  The
.B minixdf
behavior is to return in the
.I f_blocks
field the total number of blocks of the filesystem, while the
.B bsddf
behavior (which is the default) is to subtract the overhead blocks
used by the ext2 filesystem and not available for file storage.  Thus
.sp 1
% mount /k \-o minixdf; df /k; umount /k
.TS
tab(#);
l2 l2 r2 l2 l2 l
l c r c c l.
Filesystem#1024-blocks#Used#Available#Capacity#Mounted on
/dev/sda6#2630655#86954#2412169#3%#/k
.TE
.sp 1
% mount /k \-o bsddf; df /k; umount /k
.TS
tab(#);
l2 l2 r2 l2 l2 l
l c r c c l.
Filesystem#1024-blocks#Used#Available#Capacity#Mounted on
/dev/sda6#2543714#13#2412169#0%#/k
.TE
.sp 1
(Note that this example shows that one can add command-line options
to the options given in
.IR /etc/fstab .)

.TP
.BR check=none " or " nocheck
No checking is done at mount time.  This is the default.  This is fast.
It is wise to invoke
.BR e2fsck (8)
every now and then, e.g.\& at boot time.  The non-default behavior is unsupported
(check=normal and check=strict options have been removed).  Note that these mount options
don't have to be supported if ext4 kernel driver is used for ext2 and ext3 filesystems.
.TP
.B debug
Print debugging info upon each (re)mount.
.TP
.BR errors= { continue | remount-ro | panic }
Define the behavior when an error is encountered.
(Either ignore errors and just mark the filesystem erroneous and continue,
or remount the filesystem read-only, or panic and halt the system.)
The default is set in the filesystem superblock, and can be
changed using
.BR tune2fs (8).
.TP
.BR grpid | bsdgroups " and " nogrpid | sysvgroups
These options define what group ID a newly created file gets.
When
.B grpid
is set, it takes the group ID of the directory in which it is created;
otherwise (the default) it takes the fsgid of the current process, unless
the directory has the set-group-ID bit set, in which case it takes the GID
from the parent directory, and also gets the set-group-ID bit set
if it is a directory itself.
.TP
.BR grpquota | noquota | quota | usrquota
The usrquota (same as quota) mount option enables user quota support on the
filesystem.  grpquota enables group quotas support.  You need the quota utilities
to actually enable and manage the quota system.
.TP
.B nouid32
Disables 32-bit UIDs and GIDs.  This is for interoperability with older
kernels which only store and expect 16-bit values.
.TP
.BR oldalloc " or " orlov
Use old allocator or Orlov allocator for new inodes.  Orlov is default.
.TP
\fBresgid=\fP\,\fIn\fP and \fBresuid=\fP\,\fIn\fP
The ext2 filesystem reserves a certain percentage of the available
space (by default 5%, see
.BR mke2fs (8)
and
.BR tune2fs (8)).
These options determine who can use the reserved blocks.
(Roughly: whoever has the specified UID, or belongs to the specified group.)
.TP
.BI sb= n
Instead of block 1, use block
.I n
as superblock.  This could be useful when the filesystem has been damaged.
(Earlier, copies of the superblock would be made every 8192 blocks: in
block 1, 8193, 16385, \&...\& (and one got thousands of copies on
a big filesystem).  Since version 1.08,
.B mke2fs
has a \-s (sparse superblock) option to reduce the number of backup
superblocks, and since version 1.15 this is the default.  Note
that this may mean that ext2 filesystems created by a recent
.B mke2fs
cannot be mounted r/w under Linux 2.0.*.)
The block number here uses 1\ k units.  Thus, if you want to use logical
block 32768 on a filesystem with 4\ k blocks, use "sb=131072".
.TP
.BR user_xattr | nouser_xattr
Support "user." extended attributes (or not).
.\" requires CONFIG_EXT2_FS_XATTR

.SS "Mount options for ext3"
The ext3 filesystem is a version of the ext2 filesystem which has been
enhanced with journaling.  It supports the same options as ext2 as
well as the following additions:
.\" .TP
.\" .BR abort
.\" Mount the filesystem in abort mode, as if a fatal error has occurred.
.TP
.B journal=update
Update the ext3 filesystem's journal to the current format.
.TP
.B journal=inum
When a journal already exists, this option is ignored.  Otherwise, it
specifies the number of the inode which will represent the ext3 filesystem's
journal file; ext3 will create a new journal, overwriting the old contents
of the file whose inode number is
.IR inum .
.TP
.BR journal_dev=devnum / journal_path=path
When the external journal device's major/minor numbers
have changed, these options allow the user to specify
the new journal location.  The journal device is
identified either through its new major/minor numbers encoded
in devnum, or via a path to the device.
.TP
.BR norecovery / noload
Don't load the journal on mounting.  Note that
if the filesystem was not unmounted cleanly,
skipping the journal replay will lead to the
filesystem containing inconsistencies that can
lead to any number of problems.
.TP
.BR data= { journal | ordered | writeback }
Specifies the journaling mode for file data.  Metadata is always journaled.
To use modes other than
.B ordered
on the root filesystem, pass the mode to the kernel as boot parameter, e.g.\&
.IR rootflags=data=journal .
.RS
.TP
.B journal
All data is committed into the journal prior to being written into the
main filesystem.
.TP
.B ordered
This is the default mode.  All data is forced directly out to the main file
system prior to its metadata being committed to the journal.
.TP
.B writeback
Data ordering is not preserved \(en data may be written into the main
filesystem after its metadata has been committed to the journal.
This is rumoured to be the highest-throughput option.  It guarantees
internal filesystem integrity, however it can allow old data to appear
in files after a crash and journal recovery.
.RE
.TP
.B data_err=ignore
Just print an error message if an error occurs in a file data buffer in
ordered mode.
.TP
.B data_err=abort
Abort the journal if an error occurs in a file data buffer in ordered mode.
.TP
.BR barrier=0 " / " barrier=1 "
This disables / enables the use of write barriers in the jbd code.  barrier=0
disables, barrier=1 enables (default).  This also requires an IO stack which can
support barriers, and if jbd gets an error on a barrier write, it will disable
barriers again with a warning.  Write barriers enforce proper on-disk ordering
of journal commits, making volatile disk write caches safe to use, at some
performance penalty.  If your disks are battery-backed in one way or another,
disabling barriers may safely improve performance.
.TP
.BI commit= nrsec
Sync all data and metadata every
.I nrsec
seconds.  The default value is 5 seconds.  Zero means default.
.TP
.B user_xattr
Enable Extended User Attributes.  See the
.BR attr (5)
manual page.
.TP
.B acl
Enable POSIX Access Control Lists.  See the
.BR acl (5)
manual page.
.TP
.BR usrjquota=aquota.user | grpjquota=aquota.group | jqfmt=vfsv0
Apart from the old quota system (as in ext2, jqfmt=vfsold aka version 1 quota)
ext3 also supports journaled quotas (version 2 quota).  jqfmt=vfsv0
enables journaled quotas.  For journaled quotas the mount options
usrjquota=aquota.user and grpjquota=aquota.group are required to tell the
quota system which quota database files to use.  Journaled quotas have the
advantage that even after a crash no quota check is required.

.SS "Mount options for ext4"
The ext4 filesystem is an advanced level of the ext3 filesystem which
incorporates scalability and reliability enhancements for supporting large
filesystem.

The options
.B journal_dev, norecovery, noload, data, commit, orlov, oldalloc, [no]user_xattr
.B [no]acl, bsddf, minixdf, debug, errors, data_err, grpid, bsdgroups, nogrpid
.B sysvgroups, resgid, resuid, sb, quota, noquota, grpquota, usrquota
.B usrjquota, grpjquota and jqfmt
are backwardly compatible with ext3 or ext2.
.TP
.B journal_checksum
Enable checksumming of the journal transactions.  This will allow the recovery
code in e2fsck and the kernel to detect corruption in the kernel.  It is a
compatible change and will be ignored by older kernels.
.TP
.B journal_async_commit
Commit block can be written to disk without waiting for descriptor blocks.
If enabled, older kernels cannot mount the device.
This will enable 'journal_checksum' internally.
.TP
.BR barrier=0 " / " barrier=1 " / " barrier " / " nobarrier
These mount options have the same effect as in ext3.  The mount options
"barrier" and "nobarrier" are added for consistency with other ext4 mount
options.

The ext4 filesystem enables write barriers by default.
.TP
.BI inode_readahead_blks= n
This tuning parameter controls the maximum number of inode table blocks that
ext4's inode table readahead algorithm will pre-read into the buffer cache.
The value must be a power of 2.  The default value is 32 blocks.
.TP
.BI stripe= n
Number of filesystem blocks that mballoc will try to use for allocation size
and alignment.  For RAID5/6 systems this should be the number of data disks *
RAID chunk size in filesystem blocks.
.TP
.B delalloc
Deferring block allocation until write-out time.
.TP
.B nodelalloc
Disable delayed allocation.  Blocks are allocated when data is copied from user
to page cache.
.TP
.BI max_batch_time= usec
Maximum amount of time ext4 should wait for additional filesystem operations to
be batch together with a synchronous write operation.  Since a synchronous
write operation is going to force a commit and then a wait for the I/O
complete, it doesn't cost much, and can be a huge throughput win, we wait for a
small amount of time to see if any other transactions can piggyback on the
synchronous write.  The algorithm used is designed to automatically tune for
the speed of the disk, by measuring the amount of time (on average) that it
takes to finish committing a transaction.  Call this time the "commit time".
If the time that the transaction has been running is less than the commit time,
ext4 will try sleeping for the commit time to see if other operations will join
the transaction.  The commit time is capped by the max_batch_time, which
defaults to 15000\ \[mc]s (15\ ms).  This optimization can be turned off entirely by
setting max_batch_time to 0.
.TP
.BI min_batch_time= usec
This parameter sets the commit time (as described above) to be at least
min_batch_time.  It defaults to zero microseconds.  Increasing this parameter
may improve the throughput of multi-threaded, synchronous workloads on very
fast disks, at the cost of increasing latency.
.TP
.BI journal_ioprio= prio
The I/O priority (from 0 to 7, where 0 is the highest priority) which should be
used for I/O operations submitted by kjournald2 during a commit operation.
This defaults to 3, which is a slightly higher priority than the default I/O
priority.
.TP
.B abort
Simulate the effects of calling ext4_abort() for
debugging purposes.  This is normally used while
remounting a filesystem which is already mounted.
.TP
.BR auto_da_alloc | noauto_da_alloc
Many broken applications don't use fsync() when
replacing existing files via patterns such as

fd = open("foo.new")/write(fd,...)/close(fd)/ rename("foo.new", "foo")

or worse yet

fd = open("foo", O_TRUNC)/write(fd,...)/close(fd).

If auto_da_alloc is enabled, ext4 will detect the replace-via-rename and
replace-via-truncate patterns and force that any delayed allocation blocks are
allocated such that at the next journal commit, in the default data=ordered
mode, the data blocks of the new file are forced to disk before the rename()
operation is committed.  This provides roughly the same level of guarantees as
ext3, and avoids the "zero-length" problem that can happen when a system
crashes before the delayed allocation blocks are forced to disk.
.TP
.B noinit_itable
Do not initialize any uninitialized inode table blocks in the background.  This
feature may be used by installation CD's so that the install process can
complete as quickly as possible; the inode table initialization process would
then be deferred until the next time the filesystem is mounted.
.TP
.B init_itable=n
The lazy itable init code will wait n times the number of milliseconds it took
to zero out the previous block group's inode table.  This minimizes the impact on
system performance while the filesystem's inode table is being initialized.
.TP
.BR discard / nodiscard
Controls whether ext4 should issue discard/TRIM commands to the underlying
block device when blocks are freed.  This is useful for SSD devices and
sparse/thinly-provisioned LUNs, but it is off by default until sufficient
testing has been done.
.TP
.B nouid32
Disables 32-bit UIDs and GIDs.  This is for
interoperability with older kernels which only
store and expect 16-bit values.
.TP
.BR block_validity / noblock_validity
This options allows to enables/disables the in-kernel facility for tracking
filesystem metadata blocks within internal data structures.  This allows multi-\c
block allocator and other routines to quickly locate extents which might
overlap with filesystem metadata blocks.  This option is intended for debugging
purposes and since it negatively affects the performance, it is off by default.
.TP
.BR dioread_lock / dioread_nolock
Controls whether or not ext4 should use the DIO read locking.  If the
dioread_nolock option is specified ext4 will allocate uninitialized extent
before buffer write and convert the extent to initialized after IO completes.
This approach allows ext4 code to avoid using inode mutex, which improves
scalability on high speed storages.  However this does not work with data
journaling and dioread_nolock option will be ignored with kernel warning.
Note that dioread_nolock code path is only used for extent-based files.
Because of the restrictions this options comprises it is off by default
(e.g.\& dioread_lock).
.TP
.B max_dir_size_kb=n
This limits the size of the directories so that any attempt to expand them
beyond the specified limit in kilobytes will cause an ENOSPC error.  This is
useful in memory-constrained environments, where a very large directory can
cause severe performance problems or even provoke the Out Of Memory killer. (For
example, if there is only 512\ MB memory available, a 176\ MB directory may
seriously cramp the system's style.)
.TP
.B i_version
Enable 64-bit inode version support.  This option is off by default.

.SS "Mount options for fat"
(Note:
.I fat
is not a separate filesystem, but a common part of the
.IR msdos ,
.I umsdos
and
.I vfat
filesystems.)
.TP
.BR blocksize= { 512 | 1024 | 2048 }
Set blocksize (default 512).  This option is obsolete.
.TP
\fBuid=\fP\,\fIvalue\fP and \fBgid=\fP\,\fIvalue\fP
Set the owner and group of all files.
(Default: the UID and GID of the current process.)
.TP
.BI umask= value
Set the umask (the bitmask of the permissions that are
.B not
present).  The default is the umask of the current process.
The value is given in octal.
.TP
.BI dmask= value
Set the umask applied to directories only.
The default is the umask of the current process.
The value is given in octal.
.\" Present since Linux 2.5.43.
.TP
.BI fmask= value
Set the umask applied to regular files only.
The default is the umask of the current process.
The value is given in octal.
.\" Present since Linux 2.5.43.
.TP
.BI allow_utime= value
This option controls the permission check of mtime/atime.
.RS
.TP
.B 20
If current process is in group of file's group ID, you can change timestamp.
.TP
.B 2
Other users can change timestamp.
.PP
The default is set from `dmask' option. (If the directory is writable,
.BR utime (2)
is also allowed.  I.e.\& \s+3~\s0dmask & 022)

Normally
.BR utime (2)
checks current process is owner of the file, or it has
CAP_FOWNER capability.  But FAT filesystem doesn't have UID/GID on disk, so
normal check is too inflexible.  With this option you can relax it.
.RE
.TP
.BI check= value
Three different levels of pickyness can be chosen:
.RS
.TP
.BR r [ elaxed ]
Upper and lower case are accepted and equivalent, long name parts are
truncated (e.g.\&
.I verylongname.foobar
becomes
.IR verylong.foo ),
leading and embedded spaces are accepted in each name part (name and extension).
.TP
.BR n [ ormal ]
Like "relaxed", but many special characters (*, ?, <, spaces, etc.) are
rejected.  This is the default.
.TP
.BR s [ trict ]
Like "normal", but names that contain long parts or special characters
that are sometimes used on Linux but are not accepted by MS-DOS
(+, =, etc.) are rejected.
.RE
.TP
.BI codepage= value
Sets the codepage for converting to shortname characters on FAT
and VFAT filesystems.  By default, codepage 437 is used.
.TP
.BI conv= mode
The
.I fat
filesystem can perform CRLF<-->NL conversion (MS-DOS text format to UNIX text
format) in the kernel.  The following conversion \fImode\fRs are available:
.RS
.TP
.BR b [ inary ]
No translation is performed.  This is the default.
.TP
.BR t [ ext ]
CRLF<-->NL translation is performed on all files.
.TP
.BR a [ uto ]
CRLF<-->NL translation is performed on all files that don't have a
"well-known binary" extension.  The list of known extensions can be found at
the beginning of
.I fs/fat/misc.c
(as of 2.0, the list is: exe, com, bin, app, sys, drv, ovl, ovr, obj,
lib, dll, pif, arc, zip, lha, lzh, zoo, tar, z, arj, tz, taz, tzp, tpz,
gz, tgz, deb, gif, bmp, tif, gl, jpg, pcx, tfm, vf, gf, pk, pxl, dvi).
.PP
Programs that do computed lseeks won't like in-kernel text conversion.
Several people have had their data ruined by this translation.  Beware!

For filesystems mounted in binary mode, a conversion tool
(fromdos/todos) is available.  This option is obsolete.
.RE
.TP
.BI cvf_format= module
Forces the driver to use the CVF (Compressed Volume File) module
.RI cvf_ module
instead of auto-detection.  If the kernel supports kmod, the
cvf_format=xxx option also controls on-demand CVF module loading.
This option is obsolete.
.TP
.BI cvf_option= option
Option passed to the CVF module.  This option is obsolete.
.TP
.B debug
Turn on the
.I debug
flag.  A version string and a list of filesystem parameters will be
printed (these data are also printed if the parameters appear to be
inconsistent).
.TP
.B discard
If set, causes discard/TRIM commands to be issued to the block device
when blocks are freed.  This is useful for SSD devices and
sparse/thinly-provisioned LUNs.
.TP
.B dos1xfloppy
If set, use a fallback default BIOS Parameter Block configuration, determined
by backing device size.  These static parameters match defaults assumed by DOS
1.x for 160 kiB, 180 kiB, 320 kiB, and 360 kiB floppies and floppy images.
.TP
.BR errors= { panic | continue | remount-ro }
Specify FAT behavior on critical errors: panic, continue without doing
anything, or remount the partition in read-only mode (default behavior).
.TP
.BR fat= { 12 | 16 | 32 }
Specify a 12, 16 or 32 bit fat.  This overrides
the automatic FAT type detection routine.  Use with caution!
.TP
.BI iocharset= value
Character set to use for converting between 8 bit characters
and 16 bit Unicode characters.  The default is iso8859-1.
Long filenames are stored on disk in Unicode format.
.TP
.BR nfs= { stale_rw | nostale_ro }
Enable this only if you want to export the FAT filesystem over NFS.

.BR stale_rw :
This option maintains an index (cache) of directory inodes which is used by the
nfs-related code to improve look-ups.  Full file operations (read/write) over
NFS are supported but with cache eviction at NFS server, this could result in
spurious
.B ESTALE
errors.

.BR nostale_ro :
This option bases the inode number and file handle
on the on-disk location of a file in the FAT directory entry.
This ensures that
.B ESTALE
will not be returned after a file is
evicted from the inode cache.  However, it means that operations
such as rename, create and unlink could cause file handles that
previously pointed at one file to point at a different file,
potentially causing data corruption.  For this reason, this
option also mounts the filesystem readonly.

To maintain backward compatibility, '-o nfs' is also accepted,
defaulting to
.BR stale_rw .
.TP
.BI tz=UTC
This option disables the conversion of timestamps
between local time (as used by Windows on FAT) and UTC
(which Linux uses internally).  This is particularly
useful when mounting devices (like digital cameras)
that are set to UTC in order to avoid the pitfalls of
local time.
.TP
.BI time_offset= minutes
Set offset for conversion of timestamps from local time used by FAT to UTC.
I.e.,
.I minutes
minutes will be subtracted from each timestamp to convert it to UTC used
internally by Linux.  This is useful when the time zone set in the kernel via
.BR settimeofday (2)
is not the time zone used by the filesystem.  Note
that this option still does not provide correct time stamps in all cases in
presence of DST - time stamps in a different DST setting will be off by one
hour.
.TP
.B quiet
Turn on the
.I quiet
flag.  Attempts to chown or chmod files do not return errors,
although they fail.  Use with caution!
.TP
.B rodir
FAT has the ATTR_RO (read-only) attribute.  On Windows, the ATTR_RO of the
directory will just be ignored, and is used only by applications as a flag
(e.g.\& it's set for the customized folder).

If you want to use ATTR_RO as read-only flag even for the directory, set this
option.
.TP
.B showexec
If set, the execute permission bits of the file will be allowed only if
the extension part of the name is \&.EXE, \&.COM, or \&.BAT.  Not set by default.
.TP
.B sys_immutable
If set, ATTR_SYS attribute on FAT is handled as IMMUTABLE flag on Linux.
Not set by default.
.TP
.B flush
If set, the filesystem will try to flush to disk more early than normal.
Not set by default.
.TP
.B usefree
Use the "free clusters" value stored on FSINFO.  It'll
be used to determine number of free clusters without
scanning disk.  But it's not used by default, because
recent Windows don't update it correctly in some
case.  If you are sure the "free clusters" on FSINFO is
correct, by this option you can avoid scanning disk.
.TP
.BR dots ", " nodots ", " dotsOK= [ yes | no ]
Various misguided attempts to force Unix or DOS conventions
onto a FAT filesystem.

.SS "Mount options for hfs"
.TP
.BI creator= cccc ", type=" cccc
Set the creator/type values as shown by the MacOS finder
used for creating new files.  Default values: '????'.
.TP
.BI uid= n ", gid=" n
Set the owner and group of all files.
(Default: the UID and GID of the current process.)
.TP
.BI dir_umask= n ", file_umask=" n ", umask=" n
Set the umask used for all directories, all regular files, or all
files and directories.  Defaults to the umask of the current process.
.TP
.BI session= n
Select the CDROM session to mount.
Defaults to leaving that decision to the CDROM driver.
This option will fail with anything but a CDROM as underlying device.
.TP
.BI part= n
Select partition number n from the device.
Only makes sense for CDROMs.
Defaults to not parsing the partition table at all.
.TP
.B quiet
Don't complain about invalid mount options.

.SS "Mount options for hpfs"
.TP
\fBuid=\fP\,\fIvalue\fP and \fBgid=\fP\,\fIvalue\fP
Set the owner and group of all files. (Default: the UID and GID
of the current process.)
.TP
.BI umask= value
Set the umask (the bitmask of the permissions that are
.B not
present).  The default is the umask of the current process.
The value is given in octal.
.TP
.BR case= { lower | asis }
Convert all files names to lower case, or leave them.
(Default:
.BR case=lower .)
.TP
.BR conv= { binary | text | auto }
For
.BR conv=text ,
delete some random CRs (in particular, all followed by NL)
when reading a file.
For
.BR conv=auto ,
choose more or less at random between
.BR conv=binary " and " conv=text .
For
.BR conv=binary ,
just read what is in the file.  This is the default.
.TP
.B nocheck
Do not abort mounting when certain consistency checks fail.

.SS "Mount options for iso9660"
ISO 9660 is a standard describing a filesystem structure to be used
on CD-ROMs. (This filesystem type is also seen on some DVDs.  See also the
.I udf
filesystem.)

Normal
.I iso9660
filenames appear in a 8.3 format (i.e., DOS-like restrictions on filename
length), and in addition all characters are in upper case.  Also there is
no field for file ownership, protection, number of links, provision for
block/character devices, etc.

Rock Ridge is an extension to iso9660 that provides all of these UNIX-like
features.  Basically there are extensions to each directory record that
supply all of the additional information, and when Rock Ridge is in use,
the filesystem is indistinguishable from a normal UNIX filesystem (except
that it is read-only, of course).
.TP
.B norock
Disable the use of Rock Ridge extensions, even if available.  Cf.\&
.BR map .
.TP
.B nojoliet
Disable the use of Microsoft Joliet extensions, even if available.  Cf.\&
.BR map .
.TP
.BR check= { r [ elaxed ]| s [ trict ]}
With
.BR check=relaxed ,
a filename is first converted to lower case before doing the lookup.
This is probably only meaningful together with
.B norock
and
.BR map=normal .
(Default:
.BR check=strict .)
.TP
\fBuid=\fP\,\fIvalue\fP and \fBgid=\fP\,\fIvalue\fP
Give all files in the filesystem the indicated user or group id,
possibly overriding the information found in the Rock Ridge extensions.
(Default:
.BR uid=0,gid=0 .)
.TP
.BR map= { n [ ormal ]| o [ ff ]| a [ corn ]}
For non-Rock Ridge volumes, normal name translation maps upper
to lower case ASCII, drops a trailing `;1', and converts `;' to `.'.
With
.B map=off
no name translation is done.  See
.BR norock .
(Default:
.BR map=normal .)
.B map=acorn
is like
.B map=normal
but also apply Acorn extensions if present.
.TP
.BI mode= value
For non-Rock Ridge volumes, give all files the indicated mode.
(Default: read and execute permission for everybody.)
Since Linux 2.1.37 one no longer needs to specify the mode in
decimal. (Octal is indicated by a leading 0.)
.TP
.B unhide
Also show hidden and associated files.
(If the ordinary files and the associated or hidden files have
the same filenames, this may make the ordinary files inaccessible.)
.TP
.BR block= { 512 | 1024 | 2048 }
Set the block size to the indicated value.
(Default:
.BR block=1024 .)
.TP
.BR conv= { a [ uto ]| b [ inary ]| m [ text ]| t [ ext ]}
(Default:
.BR conv=binary .)
Since Linux 1.3.54 this option has no effect anymore.
(And non-binary settings used to be very dangerous,
possibly leading to silent data corruption.)
.TP
.B cruft
If the high byte of the file length contains other garbage,
set this mount option to ignore the high order bits of the file length.
This implies that a file cannot be larger than 16\ MB.
.TP
.BI session= x
Select number of session on multisession CD. (Since 2.3.4.)
.TP
.BI sbsector= xxx
Session begins from sector xxx. (Since 2.3.4.)
.LP
The following options are the same as for vfat and specifying them only makes
sense when using discs encoded using Microsoft's Joliet extensions.
.TP
.BI iocharset= value
Character set to use for converting 16 bit Unicode characters on CD
to 8 bit characters.  The default is iso8859-1.
.TP
.B utf8
Convert 16 bit Unicode characters on CD to UTF-8.

.SS "Mount options for jfs"
.TP
.BI iocharset= name
Character set to use for converting from Unicode to ASCII.  The default is
to do no conversion.  Use
.B iocharset=utf8
for UTF8 translations.  This requires CONFIG_NLS_UTF8 to be set in
the kernel
.I ".config"
file.
.TP
.BI resize= value
Resize the volume to
.I value
blocks.  JFS only supports growing a volume, not shrinking it.  This option
is only valid during a remount, when the volume is mounted read-write.  The
.B resize
keyword with no value will grow the volume to the full size of the partition.
.TP
.B nointegrity
Do not write to the journal.  The primary use of this option is to allow
for higher performance when restoring a volume from backup media.  The
integrity of the volume is not guaranteed if the system abnormally ends.
.TP
.B integrity
Default.  Commit metadata changes to the journal.  Use this option to remount
a volume where the
.B nointegrity
option was previously specified in order to restore normal behavior.
.TP
.BR errors= { continue | remount-ro | panic }
Define the behavior when an error is encountered.
(Either ignore errors and just mark the filesystem erroneous and continue,
or remount the filesystem read-only, or panic and halt the system.)
.TP
.BR noquota | quota | usrquota | grpquota
These options are accepted but ignored.

.SS "Mount options for minix"
None.

.SS "Mount options for msdos"
See mount options for fat.
If the
.I msdos
filesystem detects an inconsistency, it reports an error and sets the file
system read-only.  The filesystem can be made writable again by remounting
it.

.SS "Mount options for ncpfs"
Just like
.IR nfs ", the " ncpfs
implementation expects a binary argument (a
.IR "struct ncp_mount_data" )
to the mount system call.  This argument is constructed by
.BR ncpmount (8)
and the current version of
.B mount
(2.12) does not know anything about ncpfs.

.SS "Mount options for nfs and nfs4"
See the options section of the
.BR nfs (5)
man page (the nfs-utils package must be installed).

The
.IR nfs " and " nfs4
implementation expects a binary argument (a
.IR "struct nfs_mount_data" )
to the mount system call.  This argument is constructed by
.BR mount.nfs (8)
and the current version of
.B mount
(2.13) does not know anything about nfs and nfs4.

.SS "Mount options for ntfs"
.TP
.BI iocharset= name
Character set to use when returning file names.
Unlike VFAT, NTFS suppresses names that contain
nonconvertible characters.  Deprecated.
.\" since 2.5.11
.TP
.BI nls= name
New name for the option earlier called
.IR iocharset .
.\" since 2.5.11
.TP
.B utf8
Use UTF-8 for converting file names.
.TP
.BR uni_xlate= { 0 | 1 | 2 }
For 0 (or `no' or `false'), do not use escape sequences
for unknown Unicode characters.
For 1 (or `yes' or `true') or 2, use vfat-style 4-byte escape sequences
starting with ":".  Here 2 give a little-endian encoding
and 1 a byteswapped bigendian encoding.
.TP
.B posix=[0|1]
If enabled (posix=1), the filesystem distinguishes between
upper and lower case.  The 8.3 alias names are presented as
hard links instead of being suppressed.  This option is obsolete.
.TP
\fBuid=\fP\,\fIvalue\fP, \fBgid=\fP\,\fIvalue\fP and \fBumask=\fP\,\fIvalue\fP
Set the file permission on the filesystem.
The umask value is given in octal.
By default, the files are owned by root and not readable by somebody else.

.SS "Mount options for overlay"
Since Linux 3.18 the overlay pseudo filesystem implements a union mount for
other filesystems.

An overlay filesystem combines two filesystems - an \fBupper\fR filesystem and
a \fBlower\fR filesystem.  When a name exists in both filesystems, the object
in the upper filesystem is visible while the object in the lower filesystem is
either hidden or, in the case of directories, merged with the upper object.

The lower filesystem can be any filesystem supported by Linux and does not need
to be writable.  The lower filesystem can even be another overlayfs.  The upper
filesystem will normally be writable and if it is it must support the creation
of trusted.* extended attributes, and must provide a valid d_type in readdir
responses, so NFS is not suitable.

A read-only overlay of two read-only filesystems may use any filesystem type.
The options \fBlowerdir\fR and \fBupperdir\fR are combined into a merged
directory by using:

.RS
.br
.nf
.B "mount \-t overlay  overlay  \e"
.B "  \-olowerdir=/lower,upperdir=/upper,workdir=/work  /merged"
.fi
.br
.RE

.TP
.BI lowerdir= directory
Any filesystem, does not need to be on a writable filesystem.
.TP
.BI upperdir= directory
The upperdir is normally on a writable filesystem.
.TP
.BI workdir= directory
The workdir needs to be an empty directory on the same filesystem as upperdir.

.SS "Mount options for proc"
.TP
\fBuid=\fP\,\fIvalue\fP and \fBgid=\fP\,\fIvalue\fP
These options are recognized, but have no effect as far as I can see.

.SS "Mount options for ramfs"
Ramfs is a memory based filesystem.  Mount it and you have it.  Unmount it
and it is gone.  Present since Linux 2.3.99pre4.
There are no mount options.

.SS "Mount options for reiserfs"
Reiserfs is a journaling filesystem.
.TP
.B conv
Instructs version 3.6 reiserfs software to mount a version 3.5 filesystem,
using the 3.6 format for newly created objects.  This filesystem will no
longer be compatible with reiserfs 3.5 tools.
.TP
.BR hash= { rupasov | tea | r5 | detect }
Choose which hash function reiserfs will use to find files within directories.
.RS
.TP
.B rupasov
A hash invented by Yury Yu.\& Rupasov.  It is fast and preserves locality,
mapping lexicographically close file names to close hash values.
This option should not be used, as it causes a high probability of hash
collisions.
.TP
.B tea
A Davis-Meyer function implemented by Jeremy Fitzhardinge.
It uses hash permuting bits in the name.  It gets high randomness
and, therefore, low probability of hash collisions at some CPU cost.
This may be used if EHASHCOLLISION errors are experienced with the r5 hash.
.TP
.B r5
A modified version of the rupasov hash.  It is used by default and is
the best choice unless the filesystem has huge directories and
unusual file-name patterns.
.TP
.B detect
Instructs
.I mount
to detect which hash function is in use by examining
the filesystem being mounted, and to write this information into
the reiserfs superblock.  This is only useful on the first mount of
an old format filesystem.
.RE
.TP
.B hashed_relocation
Tunes the block allocator.  This may provide performance improvements
in some situations.
.TP
.B no_unhashed_relocation
Tunes the block allocator.  This may provide performance improvements
in some situations.
.TP
.B noborder
Disable the border allocator algorithm invented by Yury Yu.\& Rupasov.
This may provide performance improvements in some situations.
.TP
.B nolog
Disable journaling.  This will provide slight performance improvements in
some situations at the cost of losing reiserfs's fast recovery from crashes.
Even with this option turned on, reiserfs still performs all journaling
operations, save for actual writes into its journaling area.  Implementation
of
.I nolog
is a work in progress.
.TP
.B notail
By default, reiserfs stores small files and `file tails' directly into its
tree.  This confuses some utilities such as
.BR LILO (8).
This option is used to disable packing of files into the tree.
.TP
.B replayonly
Replay the transactions which are in the journal, but do not actually
mount the filesystem.  Mainly used by
.IR reiserfsck .
.TP
.BI resize= number
A remount option which permits online expansion of reiserfs partitions.
Instructs reiserfs to assume that the device has
.I number
blocks.
This option is designed for use with devices which are under logical
volume management (LVM).
There is a special
.I resizer
utility which can be obtained from
.IR ftp://ftp.namesys.com/pub/reiserfsprogs .
.TP
.B user_xattr
Enable Extended User Attributes.  See the
.BR attr (5)
manual page.
.TP
.B acl
Enable POSIX Access Control Lists.  See the
.BR acl (5)
manual page.
.TP
.BR barrier=none " / " barrier=flush "
This disables / enables the use of write barriers in the journaling code.
barrier=none disables, barrier=flush enables (default).  This also requires an
IO stack which can support barriers, and if reiserfs gets an error on a barrier
write, it will disable barriers again with a warning.  Write barriers enforce
proper on-disk ordering of journal commits, making volatile disk write caches
safe to use, at some performance penalty.  If your disks are battery-backed in
one way or another, disabling barriers may safely improve performance.

.SS "Mount options for romfs"
None.

.SS "Mount options for squashfs"
None.

.SS "Mount options for smbfs"
Just like
.IR nfs ", the " smbfs
implementation expects a binary argument (a
.IR "struct smb_mount_data" )
to the mount system call.  This argument is constructed by
.BR smbmount (8)
and the current version of
.B mount
(2.12) does not know anything about smbfs.

.SS "Mount options for sysv"
None.

.SS "Mount options for tmpfs"
.TP
.BI size= nbytes
Override default maximum size of the filesystem.
The size is given in bytes, and rounded up to entire pages.
The default is half of the memory.  The size parameter also accepts a suffix %
to limit this tmpfs instance to that percentage of your physical RAM:
the default, when neither size nor nr_blocks is specified, is size=50%
.TP
.B nr_blocks=
The same as size, but in blocks of PAGE_CACHE_SIZE
.TP
.B nr_inodes=
The maximum number of inodes for this instance.  The default
is half of the number of your physical RAM pages, or (on a
machine with highmem) the number of lowmem RAM pages,
whichever is the lower.
.PP
The tmpfs mount options for sizing (\c
.BR size ,
.BR nr_blocks ,
and
.BR nr_inodes )
accept a suffix
.BR k ,
.B m
or
.B g
for Ki, Mi, Gi (binary kilo (kibi), binary mega (mebi) and binary giga (gibi)) and can be changed on remount.

.TP
.B mode=
Set initial permissions of the root directory.
.TP
.B uid=
The user id.
.TP
.B gid=
The group id.
.TP
.B mpol=[default|prefer:Node|bind:NodeList|interleave|interleave:NodeList]
Set the NUMA memory allocation policy for all files in that
instance (if the kernel CONFIG_NUMA is enabled) \(en which can be adjusted on the
fly via 'mount \-o remount \&...'
.RS
.TP
.B default
prefers to allocate memory from the local node
.TP
.B prefer:Node
prefers to allocate memory from the given Node
.TP
.B bind:NodeList
allocates memory only from nodes in NodeList
.TP
.B interleave
prefers to allocate from each node in turn
.TP
.B interleave:NodeList
allocates from each node of NodeList in turn.
.PP
The NodeList format is a comma-separated list of decimal numbers and ranges, a
range being two "hyphen-minus"-separated decimal numbers, the smallest and largest node
numbers in the range.  For example, mpol=bind:0\(en3,5,7,9\(en15

Note that trying to mount a tmpfs with an mpol option will fail if the
running kernel does not support NUMA; and will fail if its nodelist
specifies a node which is not online.  If your system relies on that
tmpfs being mounted, but from time to time runs a kernel built without
NUMA capability (perhaps a safe recovery kernel), or with fewer nodes
online, then it is advisable to omit the mpol option from automatic
mount options.  It can be added later, when the tmpfs is already mounted
on MountPoint, by 'mount \-o remount,mpol=Policy:NodeList MountPoint'.

.SS "Mount options for ubifs"
UBIFS is a flash filesystem which works on top of UBI volumes.  Note that
\fBatime\fR is not supported and is always turned off.
.TP
The device name may be specified as
.RS
.B ubiX_Y
UBI device number
.BR X ,
volume number
.B Y
.TP
.B ubiY
UBI device number
.BR 0 ,
volume number
.B Y
.TP
.B ubiX:NAME
UBI device number
.BR X ,
volume with name
.B NAME
.TP
.B ubi:NAME
UBI device number
.BR 0 ,
volume with name
.B NAME
.RE
Alternative
.B !
separator may be used instead of
.BR : .
.TP
The following mount options are available:
.TP
.B bulk_read
Enable bulk-read.  VFS read-ahead is disabled because it slows down the file
system.  Bulk-Read is an internal optimization.  Some flashes may read faster if
the data are read at one go, rather than at several read requests.  For
example, OneNAND can do "read-while-load" if it reads more than one NAND page.
.TP
.B no_bulk_read
Do not bulk-read.  This is the default.
.TP
.B chk_data_crc
Check data CRC-32 checksums.  This is the default.
.TP
.BR no_chk_data_crc .
Do not check data CRC-32 checksums.  With this option, the filesystem does not
check CRC-32 checksum for data, but it does check it for the internal indexing
information.  This option only affects reading, not writing.  CRC-32 is always
calculated when writing the data.
.TP
.BR compr= { none | lzo | zlib }
Select the default compressor which is used when new files are written.  It is
still possible to read compressed files if mounted with the
.B none
option.

.SS "Mount options for udf"
udf is the "Universal Disk Format" filesystem defined by the Optical
Storage Technology Association, and is often used for DVD-ROM.
See also
.IR iso9660 .
.TP
.B gid=
Set the default group.
.TP
.B umask=
Set the default umask.
The value is given in octal.
.TP
.B uid=
Set the default user.
.TP
.B unhide
Show otherwise hidden files.
.TP
.B undelete
Show deleted files in lists.
.TP
.B nostrict
Unset strict conformance.
.\" .TP
.\" .B utf8
.\" (unused).
.TP
.B iocharset
Set the NLS character set.
.TP
.B bs=
Set the block size. (May not work unless 2048.)
.TP
.B novrs
Skip volume sequence recognition.
.TP
.B session=
Set the CDROM session counting from 0.  Default: last session.
.TP
.B anchor=
Override standard anchor location.  Default: 256.
.TP
.B volume=
Override the VolumeDesc location. (unused)
.TP
.B partition=
Override the PartitionDesc location. (unused)
.TP
.B lastblock=
Set the last block of the filesystem.
.TP
.B fileset=
Override the fileset block location. (unused)
.TP
.B rootdir=
Override the root directory location. (unused)

.SS "Mount options for ufs"
.TP
.BI ufstype= value
UFS is a filesystem widely used in different operating systems.
The problem are differences among implementations.  Features of some
implementations are undocumented, so its hard to recognize the
type of ufs automatically.
That's why the user must specify the type of ufs by mount option.
Possible values are:
.RS
.TP
.B old
Old format of ufs, this is the default, read only.
(Don't forget to give the \-r option.)
.TP
.B 44bsd
For filesystems created by a BSD-like system (NetBSD, FreeBSD, OpenBSD).
.TP
.B ufs2
Used in FreeBSD 5.x supported as read-write.
.TP
.B 5xbsd
Synonym for ufs2.
.TP
.B sun
For filesystems created by SunOS or Solaris on Sparc.
.TP
.B sunx86
For filesystems created by Solaris on x86.
.TP
.B hp
For filesystems created by HP-UX, read-only.
.TP
.B nextstep
For filesystems created by NeXTStep (on NeXT station) (currently read only).
.TP
.B nextstep-cd
For NextStep CDROMs (block_size == 2048), read-only.
.TP
.B openstep
For filesystems created by OpenStep (currently read only).
The same filesystem type is also used by Mac OS X.
.RE

.TP
.BI onerror= value
Set behavior on error:
.RS
.TP
.B panic
If an error is encountered, cause a kernel panic.
.TP
.RB [ lock | umount | repair ]
These mount options don't do anything at present;
when an error is encountered only a console message is printed.
.RE

.SS "Mount options for umsdos"
See mount options for msdos.
The
.B dotsOK
option is explicitly killed by
.IR umsdos .

.SS "Mount options for vfat"
First of all, the mount options for
.I fat
are recognized.
The
.B dotsOK
option is explicitly killed by
.IR vfat .
Furthermore, there are
.TP
.B uni_xlate
Translate unhandled Unicode characters to special escaped sequences.
This lets you backup and restore filenames that are created with any
Unicode characters.  Without this option, a '?' is used when no
translation is possible.  The escape character is ':' because it is
otherwise invalid on the vfat filesystem.  The escape sequence
that gets used, where u is the Unicode character,
is: ':', (u & 0x3f), ((u>>6) & 0x3f), (u>>12).
.TP
.B posix
Allow two files with names that only differ in case.
This option is obsolete.
.TP
.B nonumtail
First try to make a short name without sequence number,
before trying
.IR name\s+3~\s0num.ext .
.TP
.B utf8
UTF8 is the filesystem safe 8-bit encoding of Unicode that is used by the
console.  It can be enabled for the filesystem with this option or disabled
with utf8=0, utf8=no or utf8=false.  If `uni_xlate' gets set, UTF8 gets
disabled.
.TP
.BI shortname= mode
Defines the behavior for creation and display of filenames which fit into
8.3 characters.  If a long name for a file exists, it will always be the
preferred one for display.  There are four \fImode\fRs:
.RS
.TP
.B lower
Force the short name to lower case upon display; store a long name when
the short name is not all upper case.
.TP
.B win95
Force the short name to upper case upon display; store a long name when
the short name is not all upper case.
.TP
.B winnt
Display the short name as is; store a long name when the short name is
not all lower case or all upper case.
.TP
.B mixed
Display the short name as is; store a long name when the short name is not
all upper case.  This mode is the default since Linux 2.6.32.
.RE

.SS "Mount options for usbfs"
.TP
\fBdevuid=\fP\,\fIuid\fP and \fBdevgid=\fP\,\fIgid\fP and \fBdevmode=\fP\,\fImode\fP
Set the owner and group and mode of the device files in the usbfs filesystem
(default: uid=gid=0, mode=0644).  The mode is given in octal.
.TP
\fBbusuid=\fP\,\fIuid\fP and \fBbusgid=\fP\,\fIgid\fP and \fBbusmode=\fP\,\fImode\fP
Set the owner and group and mode of the bus directories in the usbfs
filesystem (default: uid=gid=0, mode=0555).  The mode is given in octal.
.TP
\fBlistuid=\fP\,\fIuid\fP and \fBlistgid=\fP\,\fIgid\fP and \fBlistmode=\fP\,\fImode\fP
Set the owner and group and mode of the file
.I devices
(default: uid=gid=0, mode=0444).  The mode is given in octal.

.SS "Mount options for xenix"
None.

.SS "Mount options for xfs"
See the options section of the
.BR xfs (5)
man page (the xfsprogs package must be installed).

.SH "THE LOOP DEVICE"
One further possible type is a mount via the loop device.  For example,
the command
.RS
.sp
.B "mount /tmp/disk.img /mnt \-t vfat \-o loop=/dev/loop3"
.sp
.RE
will set up the loop device
.I /dev/loop3
to correspond to the file
.IR /tmp/disk.img ,
and then mount this device on
.IR /mnt .

If no explicit loop device is mentioned
(but just an option `\fB\-o loop\fP' is given), then
.B mount
will try to find some unused loop device and use that, for example
.RS
.sp
.B "mount /tmp/disk.img /mnt \-o loop"
.sp
.RE
The mount command
.B automatically
creates a loop device from a regular file if a filesystem type is
not specified or the filesystem is known for libblkid, for example:
.RS
.sp
.B "mount /tmp/disk.img /mnt"
.sp
.B "mount \-t ext3 /tmp/disk.img /mnt"
.sp
.RE
This type of mount knows about three options, namely
.BR loop ", " offset " and " sizelimit ,
that are really options to
.BR \%losetup (8).
(These options can be used in addition to those specific
to the filesystem type.)

Since Linux 2.6.25 auto-destruction of loop devices is supported,
meaning that any loop device allocated by
.B mount
will be freed by
.B umount
independently of
.IR /etc/mtab .

You can also free a loop device by hand, using
.BR "losetup \-d " or " umount \-d" .

Since util-linux v2.29 mount command re-uses the loop device rather than
initialize a new device if the same backing file is already used for some loop
device with the same offset and sizelimit. This is necessary to avoid
a filesystem corruption.

.SH RETURN CODES
.B mount
has the following return codes (the bits can be ORed):
.TP
.B 0
success
.TP
.B 1
incorrect invocation or permissions
.TP
.B 2
system error (out of memory, cannot fork, no more loop devices)
.TP
.B 4
internal
.B mount
bug
.TP
.B 8
user interrupt
.TP
.B 16
problems writing or locking /etc/mtab
.TP
.B 32
mount failure
.TP
.B 64
some mount succeeded
.RE

The command \fBmount \-a\fR returns 0 (all succeeded), 32 (all failed), or 64 (some
failed, some succeeded).

.SH "EXTERNAL HELPERS"
The syntax of external mount helpers is:
.sp
.in +4
.BI /sbin/mount. suffix
.I spec dir
.RB [ \-sfnv ]
.RB [ \-o
.IR options ]
.RB [ \-t
.IR type \fB. subtype ]
.in
.sp
where the \fIsuffix\fR is the filesystem type and the \fB\-sfnvo\fR options have
the same meaning as the normal mount options.  The \fB\-t\fR option is used for
filesystems with subtypes support (for example
.BR "/sbin/mount.fuse \-t fuse.sshfs" ).

The command \fBmount\fR does not pass the mount options
.BR unbindable ,
.BR runbindable ,
.BR private ,
.BR rprivate ,
.BR slave ,
.BR rslave ,
.BR shared ,
.BR rshared ,
.BR auto ,
.BR noauto ,
.BR comment ,
.BR x-* ,
.BR loop ,
.B offset
and
.B sizelimit
to the mount.<suffix> helpers.  All other options are used in a
comma-separated list as argument to the \fB\-o\fR option.

.SH FILES
.TP 18n
.I /etc/fstab
filesystem table
.TP
.I /etc/mtab
table of mounted filesystems
.TP
.I /etc/mtab\s+3~\s0
lock file
.TP
.I /etc/mtab.tmp
temporary file
.TP
.I /etc/filesystems
a list of filesystem types to try
.SH ENVIRONMENT
.IP LIBMOUNT_FSTAB=<path>
overrides the default location of the fstab file (ignored for suid)
.IP LIBMOUNT_MTAB=<path>
overrides the default location of the mtab file (ignored for suid)
.IP LIBMOUNT_DEBUG=all
enables libmount debug output
.IP LIBBLKID_DEBUG=all
enables libblkid debug output
.IP LOOPDEV_DEBUG=all
enables loop device setup debug output
.SH "SEE ALSO"
.na
.BR mount (2),
.BR umount (2),
.BR umount (8),
.BR fstab (5),
.BR nfs (5),
.BR xfs (5),
.BR e2label (8),
.BR findmnt (8),
.BR losetup (8),
.BR mke2fs (8),
.BR mountd (8),
.BR nfsd (8),
.BR swapon (8),
.BR tune2fs (8),
.BR xfs_admin (8)
.ad
.SH BUGS
It is possible for a corrupted filesystem to cause a crash.
.PP
Some Linux filesystems don't support
.BR "\-o sync " nor " \-o dirsync"
(the ext2, ext3, fat and vfat filesystems
.I do
support synchronous updates (a la BSD) when mounted with the
.B sync
option).
.PP
The
.B "\-o remount"
may not be able to change mount parameters (all
.IR ext2fs -specific
parameters, except
.BR sb ,
are changeable with a remount, for example, but you can't change
.B gid
or
.B umask
for the
.IR fatfs ).
.PP
It is possible that the files
.I /etc/mtab
and
.I /proc/mounts
don't match on systems with a regular mtab file.  The first file is based only on
the mount command options, but the content of the second file also depends on
the kernel and others settings (e.g.\& on a remote NFS server -- in certain cases
the mount command may report unreliable information about an NFS mount point
and the /proc/mounts file usually contains more reliable information.)  This is
another reason to replace the mtab file with a symlink to the
.I /proc/mounts
file.
.PP
Checking files on NFS filesystems referenced by file descriptors (i.e.\& the
.B fcntl
and
.B ioctl
families of functions) may lead to inconsistent results due to the lack of
a consistency check in the kernel even if noac is used.
.PP
The
.B loop
option with the
.B offset
or
.B sizelimit
options used may fail when using older kernels if the
.B mount
command can't confirm that the size of the block device has been configured
as requested.  This situation can be worked around by using
the
.B losetup
command manually before calling
.B mount
with the configured loop device.
.SH HISTORY
A
.B mount
command existed in Version 5 AT&T UNIX.
.SH AUTHORS
.nf
Karel Zak <kzak@redhat.com>
.fi
.SH AVAILABILITY
The mount command is part of the util-linux package and is available from
ftp://ftp.kernel.org/pub/linux/utils/util-linux/.
