umount(2) | System Calls Manual | umount(2) |
NAZWA
umount, umount2 - odmontowuje system plików
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <sys/mount.h>
int umount(const char *target); int umount2(const char *target, int flags);
OPIS
umount() i umount2() usuwają dołączenie (najwyżej ułożonego) systemu plików zamontowanego w celu target.
Do odmontowywania systemów plików wymagane są odpowiednie przywileje (Linux: przywilej CAP_SYS_ADMIN (ang. capability)).
Linux 2.1.116 dodał wywołanie systemowe umount2(), które, podobnie jak umount(), odmontowuje cel, lecz dozwala podanie dodatkowych flags, które kontrolują zachowanie operacji:
- MNT_FORCE (od Linuksa 2.1.116)
- Prosi system plików o przerwanie trwających żądań, przed próbą odmontowania. Można w ten sposób ukończyć odmontowanie bez czekania na niedostępny serwer, lecz może to prowadzić do utraty danych. Jeśli po przerwaniu żądań, jakieś procesy mają wciąż aktywne odniesienia do systemu plików, odmontowanie wciąż zawiedzie. Według stanu na Linuksa 4.12, MNT_FORCE jest obsługiwane jedynie w następujących systemach plików: 9p (od Linuksa 2.6.16), ceph (od Linuksa 2.6.34), cifs (od Linuksa 2.6.12), fuse (od Linuksa 2.6.16), lustre (od Linuksa 3.11) oraz NFS (od Linuksa 2.1.116).
- MNT_DETACH (od Linuksa 2.4.11)
- Dokonuje leniwego odmontowania: czyni montowanie niedostępnym dla nowych dostępów, niezwłocznie odłącza od siebie wzajemnie system plików i wszystkie systemy plików poniżej niego oraz odłącza go z tabeli montowań, natomiast rzeczywiste odmontowanie przeprowadza, gdy montowanie przestanie być zajęte.
- MNT_EXPIRE (od Linuksa 2.6.8)
- Oznacza montowanie jako wygasłe. Jeśli montowanie nie jest aktualnie używane, pierwotne wywołanie do umount2() z tym znacznikiem zawiedzie z błędem EAGAIN, lecz oznaczy montowanie jako wygasłe. Montowanie pozostaje wygasłym tak długo, jak nie jest osiągane przez żaden proces. Drugie wywołanie umount2() podające MNT_EXPIRE odmontowuje wygasłe montowanie. Znacznika tego nie można łączyć z MNT_FORCE ani MNT_DETACH.
- UMOUNT_NOFOLLOW (od Linuksa 2.6.34)
- Nie rozwiązuje target, jeśli jest dowiązaniem symbolicznym. Znacznik ten pozwala uniknąć problemów z bezpieczeństwem w programach set-user-ID-root, które pozwalają na odmontowanie systemów plików użytkownikom nieuprzywilejowanym.
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i ustawiane errno, wskazując błąd.
BŁĘDY
Podane poniżej wartości błędów, stanowią błędy niezależne od typu systemu plików. Każdy typ systemu plików może mieć swoje specjalne błędy i swoje specjalne zachowania. Więcej szczegółów w kodzie źródłowym jądra Linux.
- EAGAIN
- Wywołanie umount2() podające MNT_EXPIRE pomyślnie oznaczyło niezajęty system plików jako wygasły.
- EBUSY
- target nie mógł być odmontowany, ponieważ jest zajęty.
- EFAULT
- target wskazuje poza przestrzeń adresową użytkownika.
- EINVAL
- target nie jest punktem montowania.
- EINVAL
- target jest zablokowany; zob. mount_namespaces(7).
- EINVAL
- umount2() wywołano z MNT_EXPIRE oraz z MNT_DETACH lub MNT_FORCE.
- EINVAL (od Linuksa 2.6.34)
- umount2() wywołano z nieprawidłową wartością znacznika we flags.
- ENAMETOOLONG
- Ścieżka była dłuższa od MAXPATHLEN.
- ENOENT
- Ścieżka była pusta lub miała nieistniejącą składową.
- ENOMEM
- Jądro nie mogło zaalokować wolnej strony, w celu skopiowania do niej nazw plików lub danych.
- EPERM
- Wywołujący nie ma wymaganych przywilejów.
STANDARDY
Linux.
HISTORIA
MNT_DETACH i MNT_EXPIRE są dostępne od glibc 2.11.
Pierwotna funkcja umount() była wywoływana jako umount(device) i zwróciłaby ENOTBLK, gdyby wywołano ją z czymś innym niż urządzenie blokowe. W Linuksie 0.98p4, dodano wywołanie umount(dir), aby obsłużyć urządzenia anonimowe. W Linuksie 2.3.99-pre7, usunięto wywołanie umount(device), pozostawiając jedynie umount(dir) (ponieważ urządzenia mogą być obecnie montowane w więcej niż jednym miejscu, zatem podanie urządzenia nie jest wystarczające).
UWAGI
umount() i montowania dzielone
Montowania dzielone powodują, że wszelka aktywność na montowaniu, w tym operacje umount(), są przekierowywane do każdego montowania dzielonego w grupie montowań równoległych i do każdego montowania podległego (slave mount) w tej grupie. Oznacza to, że umount() każdego montowania równoległego w zbiorze montowań dzielonych spowoduje odmontowanie wszystkich montowań równoległych oraz jednocześnie odmontowanie wszelkich ich montowań podległych.
Ta propagacja odmontowania może być szczególnie zaskakująca w systemach, w których każde montowanie jest domyślnie dzielone. W takich systemach, rekurencyjne montowanie z podpięciem, katalogu głównego systemu plików do podkatalogu, a następnie odmontowanie tego podkatalogu ze znacznikiem MNT_DETACH, spowoduje leniwe odmontowania każdego montowania w przestrzeni nazw montowań.
Aby zapewnić, że umount() nie będzie propagowane w ten sposób, przed wywołaniem umount(), montowanie można przemontować za pomocą wywołania mount(2) z argumentem mount_flags, który zawiera MS_REC oraz MS_PRIVATE.
ZOBACZ TAKŻE
mount(2), mount_namespaces(7), path_resolution(7), mount(8), umount(8)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
2 maja 2024 r. | Linux man-pages 6.8 |