Other Alias
umount2ОБЗОР
#include <sys/mount.h>
int umount(const char *target);
int umount2(const char *target, int flags);
ОПИСАНИЕ
Вызовы umount() и umount2() удаляют подключение (самого верхнего уровня) к файловой системе, примонтированной к target.Для размонтирования файловых систем требуются права (Linux: мандат CAP_SYS_ADMIN).
В Linux 2.1.116 добавлен системный вызов umount2(), который, подобно umount(), размонтирует заданный объект, но позволяет указать дополнительные флаги flags, контролирующие поведение операции:
- MNT_FORCE (начиная с Linux 2.1.116)
- Принудительно размонтировать даже если файловая система занята. Может привести к потере данных. (Только для смонтированной NFS.)
- MNT_DETACH (начиная с Linux 2.4.11)
- Выполнить отложенное размонтирование: сделать точку монтирования недоступной для новых подключений, немедленно размонтировать файловую систему и все файловые системы, смонтированные ниже по дереву и по таблице монтирования, и выполнить настоящее размонтирование только когда точка доступа станет свободной.
- MNT_EXPIRE (начиная Linux 2.6.8)
- Пометить точку монтирования как недействительную. Если точка монтирования в это время не используется, то первоначальный вызов umount2() с этим флагом завершится с ошибкой EAGAIN, но пометит точку монтирования как недействительную. Точка монтирования остаётся недействительной до тех пор, пока какой-нибудь процесс не запросит к ней доступ. Второй вызов umount2() с флагом MNT_EXPIRE размонтирует недействительную точку монтирования. Этот флаг нельзя указывать вместе с MNT_FORCE или MNT_DETACH.
- UMOUNT_NOFOLLOW (начиная с Linux 2.6.34)
- Не следовать по ссылке, если target является символьной ссылкой. Это флаг помогает избежать проблем с безопасностью в программах принадлежащих root и с установленным битом set-user-ID, которые позволяют непривилегированным пользователям размонтировать файловые системы.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.ОШИБКИ
Коды ошибок, описанные ниже, не зависят от типа файловой системы. У каждой файловой системы могут быть свои коды ошибок и своё собственное поведение. Подробности смотрите в исходном коде ядра Linux.- EAGAIN
- Вызов umount2() с флагом MNT_EXPIRE успешно пометил незанятую файловую систему как недействительную.
- EBUSY
- Объект target не может быть размонтирован, так как он занят.
- EFAULT
- Объект target указывает вне адресного пространства, доступного пользователю.
- EINVAL
- Значение target не является точкой монтирования.
- EINVAL
- Вызов umount2() был вызван с флагом MNT_EXPIRE и с MNT_DETACH или MNT_FORCE.
- EINVAL (начиная с Linux 2.6.34)
- Вызов umount2() был сделан с неверным значением флага flags.
- ENAMETOOLONG
- Значение пути длиннее чем MAXPATHLEN.
- ENOENT
- Указан пустой путь или одна из его частей не существует.
- ENOMEM
- Ядро не может выделить свободную страницу для копирования имени файла или данных.
- EPERM
- Вызывающий процесс не имеет требуемых привилегий.
ВЕРСИИ
Флаги MNT_DETACH и MNT_EXPIRE доступны в glibc начиная с версии 2.11.СООТВЕТСТВИЕ СТАНДАРТАМ
Эти функции есть только в Linux, и они не должны использоваться в переносимых программах.ЗАМЕЧАНИЯ
Вызов umount() и общие точки монтирования
Действия на точку монтирования, являющуюся общей, включая операции umount(2), будут переданы каждой общей точке монтирования в этой группе и каждой подчинённой точке монтирования в этой группе. Это означает, что umount(2) члена из набора общих точек монтирования приведёт к размонтированию всех в его членов, а также всех их подчинённых.Это распространение действия размонтирования может быть особенно удивительным в системах, где каждая точка монтирования является общей по умолчанию. В таких системах рекурсивно привязываемое монтирование корневого каталога файловой системы в подкаталог, а затем размонтирование этого подкаталога с MNT_DETACH приведёт к тому, что каждая точка монтирования в пространстве имён монтирования будет отложенно размонтирована.
Чтобы umount(2) также не делал, перед вызовом umount(2) точка монтирования может быть перемонтирована с помощью вызова mount(2) с аргументом mount_flags, в который добавлены MS_REC и MS_PRIVATE.