Previous: Mount Information, Up: Controlling and Querying Mounts [Contents][Index]
31.3.2 Mount, Unmount, Remount
This section describes the functions for mounting, unmounting, andremounting filesystems.
Only the superuser can mount, unmount, or remount a filesystem.
These functions do not access the fstab and mtab files. Youshould maintain and use these separately. See Mount Information.
The symbols in this section are declared in sys/mount.h.
- Function: int mount (const char *special_file, const char *dir, const char *fstype, unsigned long int options, const void *data) ¶
Preliminary:| MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
mount
mounts or remounts a filesystem. The two operations arequite different and are merged rather unnaturally into this one function.TheMS_REMOUNT
option, explained below, determines whethermount
mounts or remounts.For a mount, the filesystem on the block device represented by thedevice special file named special_file gets mounted over the mountpoint dir. This means that the directory dir (along with anyfiles in it) is no longer visible; in its place (and still with the namedir) is the root directory of the filesystem on the device.
As an exception, if the filesystem type (see below) is one which is notbased on a device (e.g. “proc”),
mount
instantiates afilesystem and mounts it over dir and ignores special_file.For a remount, dir specifies the mount point where the filesystemto be remounted is (and remains) mounted and special_file isignored. Remounting a filesystem means changing the options that controloperations on the filesystem while it is mounted. It does not meanunmounting and mounting again.
For a mount, you must identify the type of the filesystem withfstype. This type tells the kernel how to access the filesystemand can be thought of as the name of a filesystem driver. Theacceptable values are system dependent. On a system with a Linux kerneland the
proc
filesystem, the list of possible values is in thefile filesystems in theproc
filesystem (e.g. typecat /proc/filesystems to see the list). With a Linux kernel, thetypes of filesystems thatmount
can mount, and their type names,depends on what filesystem drivers are configured into the kernel orloaded as loadable kernel modules. An example of a common value forfstype isext2
.For a remount,
mount
ignores fstype.See AlsoHow to Mount a Hard Drive on Linux : MALIBALumount Command (System Administration Guide: Network Services)Assign a mount point folder path to a drive.How to Mount and Unmount Filesystems in Linux?options specifies a variety of options that apply until thefilesystem is unmounted or remounted. The precise meaning of an optiondepends on the filesystem and with some filesystems, an option may haveno effect at all. Furthermore, for some filesystems, some of theseoptions (but never
MS_RDONLY
) can be overridden for individualfile accesses viaioctl
.options is a bit string with bit fields defined using thefollowing mask and masked value macros:
MS_MGC_MASK
¶This multibit field contains a magic number. If it does not have the value
MS_MGC_VAL
,mount
assumes all the following bits are zero andthe data argument is a null string, regardless of their actual values.MS_REMOUNT
¶This bit on means to remount the filesystem. Off means to mount it.
MS_RDONLY
¶This bit on specifies that no writing to the filesystem shall be allowedwhile it is mounted. This cannot be overridden by
ioctl
. Thisoption is available on nearly all filesystems.MS_NOSUID
¶This bit on specifies that Setuid and Setgid permissions on files in thefilesystem shall be ignored while it is mounted.
MS_NOEXEC
¶This bit on specifies that no files in the filesystem shall be executedwhile the filesystem is mounted.
MS_NODEV
¶This bit on specifies that no device special files in the filesystemshall be accessible while the filesystem is mounted.
MS_SYNCHRONOUS
¶This bit on specifies that all writes to the filesystem while it ismounted shall be synchronous; i.e., data shall be synced before eachwrite completes rather than held in the buffer cache.
MS_MANDLOCK
¶This bit on specifies that mandatory locks on files shall be permitted whilethe filesystem is mounted.
MS_NOATIME
¶This bit on specifies that access times of files shall not be updated whenthe files are accessed while the filesystem is mounted.
MS_NODIRATIME
¶This bit on specifies that access times of directories shall not be updatedwhen the directories are accessed while the filesystem in mounted.
Any bits not covered by the above masks should be set off; otherwise,results are undefined.
The meaning of data depends on the filesystem type and is controlledentirely by the filesystem driver in the kernel.
Example:
#include <sys/mount.h>mount("/dev/hdb", "/cdrom", "iso9660", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "");mount("/dev/hda2", "/mnt", "", MS_MGC_VAL | MS_REMOUNT, "");
Appropriate arguments for
mount
are conventionally recorded inthe fstab table. See Mount Information.The return value is zero if the mount or remount is successful. Otherwise,it is
-1
anderrno
is set appropriately. The values oferrno
are filesystem dependent, but here is a general list:EPERM
The process is not superuser.
ENODEV
The file system type fstype is not known to the kernel.
ENOTBLK
The file dev is not a block device special file.
EBUSY
- The device is already mounted.
- The mount point is busy. (E.g. it is some process’ working directory orhas a filesystem mounted on it already).
- The request is to remount read-only, but there are files open for writing.
EINVAL
- A remount was attempted, but there is no filesystem mounted over thespecified mount point.
- The supposed filesystem has an invalid superblock.
EACCES
- The filesystem is inherently read-only (possibly due to a switch on thedevice) and the process attempted to mount it read/write (by setting the
MS_RDONLY
bit off). - special_file or dir is not accessible due to file permissions.
- special_file is not accessible because it is in a filesystem that ismounted with the
MS_NODEV
option.
- The filesystem is inherently read-only (possibly due to a switch on thedevice) and the process attempted to mount it read/write (by setting the
EM_FILE
The table of dummy devices is full.
mount
needs to create adummy device (aka “unnamed” device) if the filesystem being mounted isnot one that uses a device.
- Function: int umount2 (const char *file, int flags) ¶
Preliminary:| MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
umount2
unmounts a filesystem.You can identify the filesystem to unmount either by the device specialfile that contains the filesystem or by the mount point. The effect isthe same. Specify either as the string file.
flags contains the one-bit field identified by the followingmask macro:
MNT_FORCE
¶This bit on means to force the unmounting even if the filesystem isbusy, by making it unbusy first. If the bit is off and the filesystem isbusy,
umount2
fails witherrno
=EBUSY
. Dependingon the filesystem, this may override all, some, or no busy conditions.
All other bits in flags should be set to zero; otherwise, the resultis undefined.
Example:
#include <sys/mount.h>umount2("/mnt", MNT_FORCE);umount2("/dev/hdd1", 0);
After the filesystem is unmounted, the directory that was the mount pointis visible, as are any files in it.
As part of unmounting,
umount2
syncs the filesystem.If the unmounting is successful, the return value is zero. Otherwise, itis
-1
anderrno
is set accordingly:EPERM
The process is not superuser.
EBUSY
The filesystem cannot be unmounted because it is busy. E.g. it containsa directory that is some process’s working directory or a file that someprocess has open. With some filesystems in some cases, you can avoidthis failure with the
MNT_FORCE
option.EINVAL
file validly refers to a file, but that file is neither a mountpoint nor a device special file of a currently mounted filesystem.
This function is not available on all systems.
- Function: int umount (const char *file) ¶
Preliminary:| MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
umount
does the same thing asumount2
with flags setto zeroes. It is more widely available thanumount2
but since itlacks the possibility to forcefully unmount a filesystem is deprecatedwhenumount2
is also available.