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
- Команда,
з якої
викликано
функцію, не
має
потрібних
прав
доступу.
MNT_DETACH і
MNT_EXPIRE
доступні у
glibc,
починаючи
з версії 2.11.
Ці функції
є
специфічними
для Linux. Ними
не слід
користуватися
у
програмах,
які
підлягають
портуванню
на інші
операційні
системи.
Спільне
монтування
спричиняє
переспрямування
будь-яких
дій із
монтуванням,
зокрема
дій
umount(), до
будь-якого
спільного
монтування
у групі
вузлів та
будь-якого
підлеглого
монтування
у цій групі
вузлів. Це
означає, що
виконання
umount() для
будь-якого
вузла у
наборі
спільних
монтувань
спричинятиме
демонтування
усіх його
вузлів, а
також
демонтування
усіх його
підлеглих
монтувань.
Таке
поширення
дій з
демонтування
може бути
дещо
несподіваним
у системах,
де усі
монтування
є типово
спільними.
У таких
системах
рекурсивне
монтування
з
прив'язуванням
кореневого
каталогу
файлової
системи до
підкаталогу,
а наступне
демонтування
цього
підкаталогу
за
допомогою
MNT_DETACH
призведе
до
лінивого
демонтування
усіх
монтувань
у просторі
назв
монтування.
Щоб
заборонити
поширення
umount() у цей
спосіб,
монтування
можна
повторно
змонтувати
за
допомогою
виклику
mount(2)
із
аргументом
прапорці_монтування,
який
включатиме
одразу
MS_REC і
MS_PRIVATE, перед
викликом
umount().
Виклик
початкової
версії
функції
umount()
здійснювався
як
umount(пристрій)
і повертав
ENOTBLK при
виклику із
чимось
відмінним
від
блокового
пристрою. У
Linux 0.98p4 було
додано
виклик
umount(dir)
для
реалізації
підтримки
анонімних
пристроїв.
У Linux 2.3.99-pre7 виклик
umount(пристрій)
було
вилучено —
лишився
лише
виклик
umount(катало)
(оскільки з
того часу
пристрої
можна було
монтувати
у декілька
місць, тому
визначення
пристрою
стало
недостатньо).
mount(2),
mount_namespaces(7),
path_resolution(7),
mount(8),
umount(8)
Український
переклад
цієї
сторінки
посібника
виконано Maxim V.
Dziumanenko <
[email protected]> і Yuri Chornoivan
<
[email protected]>
Цей
переклад є
безкоштовною
документацією;
будь ласка,
ознайомтеся
з умовами
GNU
General Public License Version 3 НЕ
НАДАЄТЬСЯ
ЖОДНИХ
ГАРАНТІЙ.
Якщо ви
знайшли
помилки у
перекладі
цієї
сторінки
підручника,
будь ласка,
надішліть
електронний
лист до
списку
листування
перекладачів:
[email protected]