umount(2)

НАЗВА
umount, umount2 — демонтування файлової системи

БІБЛІОТЕКА
Стандартна бібліотека C (libc, -lc)

КОРОТКИЙ ОПИС
#include <sys/mount.h>

int umount(const char *ціль);
int umount2(const char *ціль, int прапорці);

ОПИС
umount() і umount2() вилучають долучення (найвищої) файлової системи, яку змонтовано до цілі.

Для демонтування файлових систем потрібні відповідні права доступу (Linux: можливість CAP_SYS_ADMIN).

У Linux 2.1.116 додано системний виклик umount2(), який, подібно до umount(), демонтує ціль, але уможливлює додаткове керування прапорцями поведінкою виконаної дії:

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)
    Не розіменовувати ціль, якщо вона є символічним посиланням. Цей прапорець надає змогу уникнути проблем із захистом у програмах із set-user-ID-root, які надають змогу непривілейованим користувачам демонтувати файлові системи.

ПОВЕРНУТЕ ЗНАЧЕННЯ
Якщо функцію буде успішно виконано, буде повернуто нуль. Якщо станеться помилка, буде повернуто -1 і встановлено errno для позначення помилки.

ПОМИЛКИ
Значення помилок, які вказано нижче, є результатом обчислення кодів помилок, які є незалежними від типу файлової системи. У кожного типу файлової системи можуть бути власні спеціалізовані коди помилок і власна спеціалізована поведінка. Див. початковий код ядра Linux, щоб дізнатися більше.

EAGAIN
    Виклик umount2(), що вказує MNT_EXPIRE, успішно позначив незайняту файлову систему як таку, строк дії якої завершено.

EBUSY
    ціль не вдалося демонтувати, оскільки її було зайнято виконанням дій.

EFAULT
    ціль вказує на місце поза адресним простором користувача.

EINVAL
    ціль не є точкою монтування.

EINVAL
    ціль заблоковано; див. mount_namespaces(7).

EINVAL
    umount2() було викликано з MNT_EXPIRE і або MNT_DETACH, або MNT_FORCE.

EINVAL (починаючи з Linux 2.6.34)
    umount2() було викликано із некоректним значенням прапорця у прапорцях.

ENAMETOOLONG
    Довжина шляху перевищує MAXPATHLEN.

ENOENT
    Шлях є порожнім або містить компонент, якого не існує.

ENOMEM
    Ядру не вдалося розмістити у пам'яті вільну сторінку для копіювання туди назв файлів або даних.

EPERM
    Команда, з якої викликано функцію, не має потрібних прав доступу.

СТАНДАРТИ
Linux.

ЖУРНАЛ
MNT_DETACH і MNT_EXPIRE доступні у glibc, починаючи з версії 2.11.

Виклик початкової версії функції umount() здійснювався як umount(пристрій) і повертав ENOTBLK при виклику із чимось відмінним від блокового пристрою. У Linux 0.98p4 було додано виклик umount(dir) для реалізації підтримки анонімних пристроїв. У Linux 2.3.99-pre7 виклик umount(пристрій) було вилучено — лишився лише виклик umount(катало) (оскільки з того часу пристрої можна було монтувати у декілька місць, тому визначення пристрою стало недостатньо).

ПРИМІТКИ

  umount() і монтування спільного використання
Спільне монтування спричиняє переспрямування будь-яких дій із монтуванням, зокрема дій umount(), до будь-якого спільного монтування у групі вузлів та будь-якого підлеглого монтування у цій групі вузлів. Це означає, що виконання umount() для будь-якого вузла у наборі спільних монтувань спричинятиме демонтування усіх його вузлів, а також демонтування усіх його підлеглих монтувань.

Таке поширення дій з демонтування може бути дещо несподіваним у системах, де усі монтування є типово спільними. У таких системах рекурсивне монтування з прив'язуванням кореневого каталогу файлової системи до підкаталогу, а наступне демонтування цього підкаталогу за допомогою MNT_DETACH призведе до лінивого демонтування усіх монтувань у просторі назв монтування.

Щоб заборонити поширення umount() у цей спосіб, монтування можна повторно змонтувати за допомогою виклику mount(2) із аргументом прапорці_монтування, який включатиме одразу MS_REC і MS_PRIVATE, перед викликом umount().

ДИВ. ТАКОЖ
mount(2), mount_namespaces(7), path_resolution(7), mount(8), umount(8)

ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано Maxim V. Dziumanenko <mvd@mylinux.com.ua> і Yuri Chornoivan <yurchor@ukr.net>

Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html). НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.

Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.