ИМЯ
umount, 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)
- Попросить
      файловую
      систему
      прервать
      ожидающие
      запросы
      перед
      попыткой
      размонтирования.
      Это может
      позволить
      выполнить
      размонтирование
      без
      ожидания
      недоступного
      сервера, но
      может
      привести к
      потере
      данных.
      Если после
      прерывания
      запросов
      некоторые
      процессы
      продолжат
      обращаться
      к файловой
      системе,
      размонтирование
      не будет
      выполнено.
      В Linux 4.12 MNT_FORCE
      поддерживается
      только в
      следующих
      файловых
      системах: 9p
      (начиная с Linux
      2.6.16), ceph (начиная
      с Linux 2.6.34), cifs
      (начиная с Linux
      2.6.12), fuse (начиная
      с Linux 2.6.16), lustre
      (начиная с Linux
      3.11) и NFS
      (начиная с Linux
      2.1.116).
- 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(), будут
    переданы
    каждой
    общей
    точке
    монтирования
    в этой
    группе и
    каждой
    подчинённой
    точке
    монтирования
    в этой
    группе. Это
    означает,
    что umount()
    члена из
    набора
    общих
    точек
    монтирования
    приведёт к
    размонтированию
    всех в его
    членов, а
    также всех
    их
    подчинённых.
Это
    распространение
    действия
    размонтирования
    может быть
    особенно
    удивительным
    в системах,
    где каждая
    точка
    монтирования
    является
    общей по
    умолчанию.
    В таких
    системах
    рекурсивно
    привязываемое
    монтирование
    корневого
    каталога
    файловой
    системы в
    подкаталог,
    а затем
    размонтирование
    этого
    подкаталога
    с MNT_DETACH
    приведёт к
    тому, что
    каждая
    точка
    монтирования
    в
    пространстве
    имён
    монтирования
    будет
    размонтирована
    в
    отложенном
    режиме.
Чтобы umount()
    также не
    делал,
    перед
    вызовом umount()
    точка
    монтирования
    может быть
    перемонтирована
    с помощью
    вызова mount() с
    аргументом
    mount_flags, в
    который
    добавлены
    MS_REC и MS_PRIVATE.
Историческая
  справка
Изначально
    функция umount()
    вызывалась
    как umount(device) и
    возвращала
    ENOTBLK при
    попытке
    работы с
    любым не
    блочным
    устройством.
    В Linux 0.98p4 был
    добавлен
    вызов umount(dir)
    для
    поддержки
    анонимных
    устройств.
    В Linux 2.3.99-pre7 был
    убран
    вызов umount(device),
    остался
    только umount(dir)
    (теперь
    устройства
    могут быть
    подключены
    более чем к
    одной
    точке,
    поэтому
    указания
    только
    устройства
    недостаточно).