mount(2) | System Calls Manual | mount(2) |
mount - применяется для монтирования файловых систем.
Standard C library (libc, -lc)
#include <sys/mount.h>
int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *_Nullable data);
Вызов mount() подключает файловую систему, указанную в source (обычно здесь задаётся название устройства, но также может быть указано имя каталога, или файла, или фиктивное устройство), к пути заданному в target(каталогу или файлу).
Для монтирования файловых систем требуются специальные права (Linux: мандат CAP_SYS_ADMIN).
Вариант filesystemtype доступные ядру перечислены в /proc/filesystems (например: "btrfs", "ext4", "jfs", "xfs", "vfat", "fuse", "tmpfs", "cgroup", "proc", "mqueue", "nfs", "cifs", "iso9660"). Дополнительные типы становятся доступными после загрузки соответствующих модулей.
The data argument is interpreted by the different filesystems. Typically it is a string of comma-separated options understood by this filesystem. See mount(8) for details of the options available for each filesystem type. This argument may be specified as NULL, if there are no options.
Вызов mount() выполняет один из нескольких типов операций, в зависимости от значений, указанных в mountflags. Выбор выполняемой операции определяется путем тестирования значений, установленных в mountflags, с проведением тестов в следующем порядке:
Каждая из этих операций подробно описана далее на этой странице. Для изменения поведения mount() могут быть указаны дополнительные флаги в mountflags, как описано ниже.
Ниже расположенный список дополнительных флагов, которые можно использовать в mountflags. Обратите внимание на то, что некоторые из них или даже все игнорируются операциями. Такие случае будут описаны далее по тексту.
Начиная с Linux 2.4 одни из показанных выше флагов можно устанавливать на точки монтирования (свой набор на каждой), а другие — на суперблок смонтированной файловой системы, то есть все монтирования одной файловой системы имеют одинаковый набор этих флагов (ранее все флаги применялись к суперблоку).
Флаги набора для точки монтирования:
The following flags are per-superblock: MS_DIRSYNC, MS_LAZYTIME, MS_MANDLOCK, MS_SILENT, and MS_SYNCHRONOUS. The initial settings of these flags are determined on the first mount of the filesystem, and will be shared by all subsequent mounts of the same filesystem. Subsequently, the settings of the flags can be changed via a remount operation (see below). Such changes will be visible via all mounts associated with the filesystem.
Начиная с Linux 2.6.16 флаг MS_RDONLY может устанавливаться и сбрасываться на точках монтирования по отдельности, а также на нижележащем суперблоке файловой системы. Смонтированная файловая система будет доступна на запись только, если она сама и её точка монтирования не помечены только для чтения.
Существующие монтирования можно перемонтировать, указав MS_REMOUNT в mountflags. Это позволяет изменить mountflags и data существующих монтирований без необходимости размонтировать и заново монтировать файловую систему. target должен соответствовать указанному при начальном вызове mount().
Аргументы source и filesystemtype игнорируются.
Аргументы mountflags и data должны совпадать со значениями, используемыми в первоначальном вызове mount(), за исключением параметров, которые были преднамеренно изменены.
The following mountflags can be changed: MS_LAZYTIME, MS_MANDLOCK, MS_NOATIME, MS_NODEV, MS_NODIRATIME, MS_NOEXEC, MS_NOSUID, MS_RELATIME, MS_RDONLY, MS_STRICTATIME (whose effect is to clear the MS_NOATIME and MS_RELATIME flags), and MS_SYNCHRONOUS. Attempts to change the setting of the MS_DIRSYNC and MS_SILENT flags during a remount are silently ignored. Note that changes to per-superblock flags are visible via all mounts of the associated filesystem (because the per-superblock flags are shared by all mounts).
Начиная с Linux 3.17, если не одно из значений MS_NOATIME, MS_NODIRATIME, MS_RELATIME, или MS_STRICTATIME не указано в mountflags , то при перемонтировании сохраняются текущие значения этих флагов (а не изменяются на значение по умолчанию MS_RELATIME).
Since Linux 2.6.26, the MS_REMOUNT flag can be used with MS_BIND to modify only the per-mount-point flags. This is particularly useful for setting or clearing the "read-only" flag on a mount without changing the underlying filesystem. Specifying mountflags as:
MS_REMOUNT | MS_BIND | MS_RDONLY
will make access through this mountpoint read-only, without affecting other mounts.
Если mountflags содержит MS_BIND (доступен, начиная с Linux 2.4), то выполняется привязка монтирования. Привязка монтирования делает видимым файл или поддерево каталогов в другой точке внутри одной иерархии каталогов. Привязки монтирования могут быть в разных файловых системах и перекрывают заключения chroot(2).
Аргументы filesystemtype и data игнорируются.
The remaining bits (other than MS_REC, described below) in the mountflags argument are also ignored. (The bind mount has the same mount options as the underlying mount.) However, see the discussion of remounting above, for a method of making an existing bind mount read-only.
По умолчанию, когда каталогу назначена привязка монтирования, монтируется только этот каталог; если существуют другие подмонтирования в дереве каталогов, то им не назначается привязка монтирования. Если также указан флаг MS_REC, то выполняется операция рекурсивной привязки монтирования: всем подмонтированиям в поддереве source (отличным от непривязываемых монтирований) также назначается привязка монтирования в соответствующее расположение к поддереве target.
Если mountflags содержит один из флагов MS_SHARED, MS_PRIVATE, MS_SLAVE, или MS_UNBINDABLE (все доступны начиная с Linux 2.6.15), то тип распространения существующего монтирования изменяется. Если указано сразу несколько из этих флагов, то возвращается ошибка.
При смене типа распространения можно изменять только флаги MS_REC (описан ниже) и MS_SILENT (игнорируется).
Аргументы source, filesystemtype и data игнорируются.
Назначение флагов типа распространения следующее:
By default, changing the propagation type affects only the target mount. If the MS_REC flag is also specified in mountflags, then the propagation type of all mounts under target is also changed.
Дополнительную информацию по типам распространения монтирования (включая тип распространения по умолчанию, назначаемый новым точкам монтирования) смотрите в mount_namespaces(7).
If mountflags contains the flag MS_MOVE (available since Linux 2.4.18), then move a subtree: source specifies an existing mount and target specifies the new location to which that mount is to be relocated. The move is atomic: at no point is the subtree unmounted.
Оставшиеся биты в аргументе mountflags игнорируются, как и аргументы filesystemtype и data.
If none of MS_REMOUNT, MS_BIND, MS_MOVE, MS_SHARED, MS_PRIVATE, MS_SLAVE, or MS_UNBINDABLE is specified in mountflags, then mount() performs its default action: creating a new mount. source specifies the source for the new mount, and target specifies the directory at which to create the mount point.
Используются аргументы filesystemtype и data, дополнительные параметры для изменения поведения могут быть указаны в mountflags.
On success, zero is returned. On error, -1 is returned, and errno is set to indicate the error.
Коды ошибок, описанные ниже, не зависят от типа файловой системы. У каждой файловой системы могут быть свои коды ошибок и своё собственное поведение. Подробности смотрите в исходном коде ядра Linux.
The definitions of MS_DIRSYNC, MS_MOVE, MS_PRIVATE, MS_REC, MS_RELATIME, MS_SHARED, MS_SLAVE, MS_STRICTATIME, and MS_UNBINDABLE were added to glibc headers in glibc 2.12.
Данная функция есть только в Linux и не должна использоваться в программах, которые задуманы как переносимые.
Начиная с Linux 2.4 одна файловая система может быть смонтирована в множество точек монтирования, также множественное монтирование может осуществляться в одну точку.
The mountflags argument may have the magic number 0xC0ED (MS_MGC_VAL) in the top 16 bits. (All of the other flags discussed in DESCRIPTION occupy the low order 16 bits of mountflags.) Specifying MS_MGC_VAL was required before Linux 2.4, but since Linux 2.4 is no longer required and is ignored if specified.
Изначальный флаг MS_SYNC был переименован в MS_SYNCHRONOUS в 1.1.69, когда в <mman.h> был добавлен другой флаг MS_SYNC.
До Linux 2.4 попытка выполнения программ set-UID или set-GID на файловой системе, подключённой с параметром MS_NOSUID, вызывает ошибку EPERM. Начиная с Linux 2.4 биты set-UID и set-GID в этом случае негласно игнорируются.
Starting with Linux 2.4.19, Linux provides mount namespaces. A mount namespace is the set of filesystem mounts that are visible to a process. Mount namespaces can be (and usually are) shared between multiple processes, and changes to the namespace (i.e., mounts and unmounts) by one process are visible to all other processes sharing the same namespace. (The pre-2.4.19 Linux situation can be considered as one in which a single namespace was shared by every process on the system.)
Процесс-потомок, создаваемый fork(2), использует родительское пространство имён монтирования совместно с родителем; пространство имён монтирования сохраняется при вызове execve(2).
Процесс может получить собственное пространство имён монтирования если: он был создан с помощью clone(2) с флагом CLONE_NEWNS; в этом случае его новое пространство имён инициализируется копией пространства имён процесса, который вызвал clone(2); или он вызовет unshare(2) с флагом CLONE_NEWNS; в этом случае пространство имён вызвавшего получит свою копию пространства имён, которое он раньше совместно использовал с другими процессами, и дальнейшие монтирования и размонтирования вызвавшим будут невидимы другим процессам (за исключением потомков, которые вызывающий создаст позже) и наоборот.
For further details on mount namespaces, see mount_namespaces(7).
Each mount has a parent mount. The overall parental relationship of all mounts defines the single directory hierarchy seen by the processes within a mount namespace.
The parent of a new mount is defined when the mount is created. In the usual case, the parent of a new mount is the mount of the filesystem containing the directory or file at which the new mount is attached. In the case where a new mount is stacked on top of an existing mount, the parent of the new mount is the previous mount that was stacked at that location.
The parental relationship between mounts can be discovered via the /proc/[pid]/mountinfo file (see below).
The Linux-specific /proc/[pid]/mounts file exposes the list of mounts in the mount namespace of the process with the specified ID. The /proc/[pid]/mountinfo file exposes even more information about mounts, including the propagation type and mount ID information that makes it possible to discover the parental relationship between mounts. See proc(5) and mount_namespaces(7) for details of this file.
mountpoint(1), chroot(2), ioctl_iflags(2), mount_setattr(2), pivot_root(2), umount(2), mount_namespaces(7), path_resolution(7), findmnt(8), lsblk(8), mount(8), umount(8)
Русский перевод этой страницы руководства был сделан aereiae <aereiae@gmail.com>, Alexey <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Малянов Евгений Викторович <maljanow@outlook.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
5 февраля 2023 г. | Linux man-pages 6.03 |