mount(2)

NAZWA
mount - montuje system plików

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#include <sys/mount.h>

int mount(const char *source, const char *target,
          const char *filesystemtype, unsigned long mountflags,
          const void *_Nullable data);

OPIS
mount() dołącza system plików podany jako source (często jest to ścieżka odnosząca się do urządzenia, ale może być również ścieżką katalogu lub pliku, albo atrapą) do położenia (katalogu lub pliku) określonego ścieżką target.

Do montowania systemów plików wymagane są odpowiednie przywileje (Linux: przywilej CAP_SYS_ADMIN (ang. capability)).

Obsługiwane przez jądro wartości argumentu filesystemtype są wypisane w /proc/filesystems (np. „btrfs”, „ext4”, „jfs”, „xfs”, „vfat”, „fuse”, „tmpfs”, „cgroup”, „proc”, „mqueue”, „nfs”, „cifs”, „iso9660”). Kolejne typy mogą stać się dostępne po załadowaniu odpowiednich modułów.

Argument data jest interpretowany odmiennie przez poszczególne systemy plików. Zwykle jest to łańcuch oddzielonych przecinkiem opcji akceptowanych przez dany system plików. W podręczniku mount(8) opisano opcje dostępne dla każdego typu systemu plików. Argument ten można podać również jako NULL, gdy brak jest opcji.

Wywołanie do mount() dokonuje wielu ogólnych typów działań, w zależności od bitów podanych w mountflags. Wybór operacji do wykonania jest dokonywany po sprawdzeniu bitów ustawionych w mountflags, a sprawdzenia te mają miejsce w poniższej kolejności:

•   Montuje ponownie (przemontowuje) istniejące montowanie: mountflags zawiera MS_REMOUNT.

•   Tworzy montowanie z podpięciem: mountflags zawiera MS_BIND.

•   Zmienia propagację typu istniejącego montowania: mountflags obejmuje jedną z: MS_SHARED, MS_PRIVATE, MS_SLAVE lub MS_UNBINDABLE.

•   Przemieszcza istniejące montowanie do nowego położenia: mountflags zawiera MS_MOVE.

•   Tworzy nowe montowanie: mountflags nie zawiera żadnego z powyższych znaczników.

Wszystkie powyższe operacje są opisane w dalszej części podręcznika. Kolejne znaczniki można podać w mountflags, w celu modyfikacji zachowania mount(), zgodnie z opisem poniżej.

  Dodatkowe znaczniki montowań
Poniższa lista opisuje dodatkowe znaczniki, które można podać w mountflags. Proszę zauważyć, że część operacji ignoruje niektóre, lub wszystkie, z tych znaczników, zgodnie z opisem w dalszej części podręcznika.

MS_DIRSYNC (od Linuksa 2.5.19)
    Czyni zmiany katalogów w tym systemie plików synchronicznymi (tę właściwość można pozyskać dla indywidualnych katalogów lub poddrzew za pomocą chattr(1)).

MS_LAZYTIME (od Linuksa 4.0)
    Redukuje aktualizację znaczników czasowych (atime, mtime, ctime) i-węzłów na dysku, zarządzając tymi zmianami jedynie w pamięci. Znaczniki czasowe na dysku są aktualizowane tylko, gdy:

    •   i-węzeł musi być zaktualizowany z powodu innej zmiany, niezwiązanej ze znacznikami czasowymi;

    •   aplikacja użyje fsync(2), syncfs(2) lub sync(2);

    •   przywrócony (po usunięciu) i-węzeł jest wyrzucany z pamięci; albo

    •   minęło ponad 24 godziny od czasu zapisania i-węzła na dysk.

    Ta opcja montowania znacznie redukuje konieczność aktualizowania znaczników czasowych i-węzłów, zwłaszcza mtime i atime. Jednak w przypadku załamania systemu, pola atime i mtime na dysku, mogą zawierać nieaktualne informacje odnośnie zdarzeń do 24 godzin wstecz.

    Przykładami obciążeń, gdzie opcja ta może dać znaczne korzyści, są częste losowe zapisy do prealokowanych plików, jak również przypadki, gdy włączona jest również opcja montowania MS_STRICTATIME (zaleta łączenia MS_STRICTATIME i MS_LAZYTIME jest taka, że stat(2) zwróci poprawnie zaktualizowany atime, lecz aktualizacje atime zostaną zapisane na dysku tylko w wyżej wymienionych przypadkach).

MS_MANDLOCK
    Pozwala na blokowanie obowiązujące (przymusowe) w tym systemie plików (blokowanie obowiązujące musi być wciąż włączone w danym pliku, jak opisano w fcntl(2)). Od Linuksa 4.5, ta opcja montowania wymaga przywileju CAP_SYS_ADMIN oraz jądra skonfigurowanego z opcją CONFIG_MANDATORY_FILE_LOCKING. Blokowanie obowiązujące, od Linuksa 5.15, jest w pełni przestarzałe, zatem znacznik ten również należy uważać za przestarzały.

MS_NOATIME
    Nie aktualizuje czasu dostępu dla (wszystkich typów) plików w tym systemie plików.

MS_NODEV
    Nie zezwala na dostęp do (plików specjalnych) urządzeń w tym systemie plików.

MS_NODIRATIME
    Nie aktualizuje czasu dostępu do katalogów w tym systemie plików. Znacznik udostępnia podzbiór funkcjonalności zapewnianej przez MS_NOATIME tj. MS_NOATIME wymusza MS_NODIRATIME.

MS_NOEXEC
    Nie zezwala na wykonywanie programów z tego systemu plików.

MS_NOSUID
    Nie honoruje bitów set-user-ID i set-group-ID, ani przywilejów plikowych (ang. file capabilities) przy wykonywaniu programów z tego systemu plików. Dodatkowo, przejścia domeny SELinux wymagają uprawnienia nosuid_transition, co z kolei wymaga również przywileju zasad nnp_nosuid_transition.

MS_RDONLY
    Montuje system plików tylko do odczytu.

MS_REC (od Linuksa 2.4.11)
    Używane w połączeniu z MS_BIND do utworzenia rekurencyjnego montowania z podpięciem oraz w połączeniu ze znacznikami typu propagacji, aby rekurencyjnie zmienić typ propagacji we wszystkich montowaniach poddrzewa. Więcej szczegółów podano niżej.

MS_RELATIME (od Linuksa 2.6.20)
    Gdy uzyskiwany jest dostęp do pliku w tym systemie plików, aktualizuje czas ostatniego dostępu do pliku (atime) tylko, gdy aktualna wartość atime jest mniejsza lub równa czasowi ostatniej modyfikacji (mtime) lub czasowi ostatniej zmiany statusu (ctime). Opcja jest przydatna dla programów takich jak mutt(1), które muszą wiedzieć, kiedy plik został odczytany po jego ostatniej modyfikacji. Od Linuksa 2.6.30, jądro domyślnie stosuje zachowanie zapewniane przez ten znacznik (chyba, ze podano MS_NOATIME), a do uzyskania tradycyjnego zachowania konieczne jest podanie znacznika MS_STRICTATIME. Dodatkowo, od Linuksa 2.6.30, czas ostatniego dostępu do pliku jest zawsze aktualizowany, gdy jest starszy niż 1 dzień.

MS_SILENT (od Linuksa 2.6.17)
    Powstrzymuje wypisywanie pewnych (printk()) ostrzeżeń w dzienniku jądra. Znacznik ten zastępuje błędnie nazwany i przestarzały znacznik MS_VERBOSE (dostępny od Linuksa 2.4.12), który ma takie samo znaczenie.

MS_STRICTATIME (od Linuksa 2.6.30)
    Zawsze aktualizuje czas ostatniego dostępu (atime) przy uzyskiwaniu dostępu do plików w tym systemie plików (było to domyślne zachowanie przed Linuksem 2.6.30). Podanie tego znacznika przesłania efekt ustawienia znaczników MS_NOATIME i MS_RELATIME.

MS_SYNCHRONOUS
    Czyni zapisy w tym systemie plików synchronicznymi (tak, jakby w przypadku wszystkich otwarć plików w tym systemie plików podawano znacznik O_SYNC do open(2)).

MS_NOSYMFOLLOW (od Linuksa 5.10)
    Nie podąża za dowiązaniami symbolicznymi przy rozwiązywaniu ścieżek. Dowiązania symboliczne mogą być wciąż tworzone, a readlink(1), readlink(2), realpath(1) i realpath(3) wciąż działają poprawnie.

Od Linuksa 2.4, niektóre z powyższych znaczników są ustawiane na dane montowanie; inne tyczą się superbloku montowanego systemu plików — co oznacza, że wszystkie kolejne montowania tego samego systemu plików będą dzielić te znaczniki (wcześniej wszystkie znaczniki lądowały w superbloku).

Znaczniki ustawiane na dane montowanie to:

•   Od Linuksa 2.4: MS_NODEV, MS_NOEXEC i MS_NOSUID są ustawiane na dane montowanie.

•   Dodatkowo, od Linuksa 2.6.16: MS_NOATIME i MS_NODIRATIME.

•   Dodatkowo, od Linuksa 2.6.20: MS_RELATIME.

Następujące znaczniki są przypisane do superbloku: MS_DIRSYNC, MS_LAZYTIME, MS_MANDLOCK, MS_SILENT i MS_SYNCHRONOUS. Początkowe ustawienie tych znaczników zależy od pierwszego montowania systemu plików i będzie dzielone przez wszystkie kolejne montowania tego systemu plików. Ustawienia tych znaczników można zmienić następnie operacją ponownego montowania (przemontowania; zob. niżej). Zmiany te będą widoczne we wszystkich montowaniach związanych z systemem plików.

Od Linuksa 2.6.16, MS_RDONLY może być ustawiony lub usunięty zarówno w danym montowaniu jak i w superbloku systemu plików. Zamontowany system plików będzie dostępny do zapisu tylko, gdy ani system plików, ani punkt montowania nie ma znacznika tylko do odczytu.

  Ponowne montowanie (przemontowanie) istniejącego montowania
Istniejące montowanie może zostać zamontowane ponownie (przemontowane), podając MS_REMOUNT w mountflags. Można w ten sposób zmienić mountflags i data istniejącego montowania, bez potrzeby odmontowywania i montowania systemu plików. Cel target powinien mieć tę samą wartość, jaką podano w pierwotnym wywołaniu mount().

Argumenty source i filesystemtype są ignorowane.

Argumenty mountflags i data powinny być zgodne z wartościami użytymi w pierwotnym wywołaniu mount() — poza tymi wartościami, które chce się zmienić.

Następujące mountflags mogą być zmieniane: MS_LAZYTIME, MS_MANDLOCK, MS_NOATIME, MS_NODEV, MS_NODIRATIME, MS_NOEXEC, MS_NOSUID, MS_RELATIME, MS_RDONLY, MS_STRICTATIME (co powoduje usunięcie znaczników MS_NOATIME i MS_RELATIME) oraz MS_SYNCHRONOUS. Próby zmiany ustawień MS_DIRSYNC i MS_SILENT podczas przemontowania są po cichu ignorowane. Proszę zauważyć, że zmiany znaczników w superbloku są widoczne we wszystkich montowaniach związanych z danym systemem plików (ponieważ znaczniki superbloku są dzielone przez wszystkie montowania).

Od Linuksa 3.17, jeśli w mountflags nie podano żadnej z opcji: MS_NOATIME, MS_NODIRATIME, MS_RELATIME, ani MS_STRICTATIME, to operacja przemontowania zachowuje istniejące wartości tych znaczników (zamiast powracać do MS_RELATIME).

Od Linuksa 2.6.26 znacznik MS_REMOUNT można stosować łącznie z MS_BIND do modyfikacji wyłącznie znaczników na dane montowanie. To szczególnie przydatne w przypadku ustawiania lub usuwania znacznika „tylko do odczytu” na montowaniu bez zmieniania parametrów podrzędnego systemu plików. Argument data jest ignorowany. Istniejące znaczniki na dane montowanie są usuwane i zastępowane tymi z mountflags. Oznacza to, że jeśli chce się zachować jakieś z istniejących znaczników na dane montowanie, konieczne jest ujęcie ich w mountflags, razem ze znacznikami na dane montowanie, które chce się ustawić (lub ze znacznikami, które chce się usunąć). Podanie następujących mountflags:

    MS_REMOUNT | MS_BIND | MS_RDONLY

uczyni dostęp do tego punktu montowania tylko do odczytu (usuwając wszystkie inne znaczniki na dane montowanie), bez zmieniania innych montowań tego systemu plików.

  Tworzenie montowania z podpięciem (bind mount)
Jeśli mountflags obejmuje MS_BIND (dostępny od Linuksa 2.4), to dokonywane jest montowanie z podpięciem. Montowanie z podpięciem czyni poddrzewo katalogów widocznym w innym punkcie pojedynczej hierarchii katalogów. Montowania z podpięciem mogą przekraczać granice systemów plików i rozciągać się na więzienia chroot(2).

Argumenty filesystemtype i data są ignorowane.

Pozostałe bity (poza MS_REC, opisanym poniżej) w argumencie mountflags również są ignorowane (montowanie z podpięciem ma te same opcje montowania jak podstawowe montowanie). W rozdziale dotyczącym ponownego montowania (przemontowania) opisano sposób uczynienia istniejącego montowania z podpięciem, montowaniem tylko do odczytu.

Domyślnie, gdy katalog jest montowany z podpięciem, montowany jest tylko ten katalog; jeśli w drzewie katalogów istnieją kolejne podmontowania, nie są one montowane z podpięciem. Jeśli poda się również znacznik MS_REC, to dokonywana jest rekurencyjna operacja montowania z podpięciem — wszystkie podmontowania w poddrzewie w source (inne niż montowania bez podpięcia) są również montowane z podpięciem, w odpowiednim położeniu poddrzewa target.

  Zmiana typu propagacji istniejącego montowania
Jeśli mountflags obejmuje jeden z: MS_SHARED, MS_PRIVATE, MS_SLAVE lub MS_UNBINDABLE (wszystkie dostępne od Linuksa 2.6.15), to zmieniana jest propagacja istniejącego montowania. Jeśli poda się więcej niż jeden z tych znaczników, wystąpi błąd.

Jedyne inne znaczniki, jakie można podać przy zmianie typu propagacji to: MS_REC (opisany poniżej) oraz MS_SILENT (który jest ignorowany).

Argumenty source, filesystemtype i data są ignorowane.

Znaczenie znaczników typu propagacji jest następujące:

MS_SHARED
    Czyni montowanie dzielonym. Zdarzenia zamontowania i odmontowania znajdujące się bezpośrednio pod tym montowaniem będą propagowane do innych montowań, które są członkami grupy równoległych montowań. Propagacja oznacza tu, że to samo zamontowanie lub odmontowanie nastąpi automatycznie we wszystkich innych montowaniach w grupie równoległych montowań. Zatem zdarzenia zamontowania i odmontowania, które wystąpią w równoległych montowaniach, będą propagowane również na niniejsze montowanie.

MS_PRIVATE
    Czyni montowanie prywatnym. Zdarzenia zamontowania i odmontowania nie propagują z tego montowania, ani na to montowanie.

MS_SLAVE
    Jeśli jest to montowanie dzielone, będące członkiem grupy montowań równoległych, zawierającej innych członków, konwertuje je na montowanie podległe. Jeśli jest to montowanie dzielone, będące członkiem grupy montowań równoległych, niezawierającej innych członków, konwertuje je na montowanie prywatne. W innych przypadkach typ propagacji montowania jest pozostawiany bez zmian.

    Gdy montowanie jest podległe, zdarzenia zamontowania i odmontowania propagują na to montowanie z (nadrzędnej) grupy montowań równoległych, której montowanie było pierwotnie członkiem. Zdarzenia zamontowania i odmontowania pod tym montowaniem nie propagują na inne.

    Montowanie może być podległe wobec innej grupy montowań równoległych, a w tym samym czasie dzielić zdarzenia montowania i odmontowania z grupą montowań równoległych, której jest członkiem.

MS_UNBINDABLE
    Czyni to montowanie niepodpinalnym. Działa to w ten sposób jak montowanie prywatne, tyle że dodatkowo nie da się go zamontować z podpięciem. Gdy dokonywane jest rekurencyjne montowanie z podpięciem (mount() ze znacznikami MS_BIND i MS_REC) w poddrzewie katalogów, wszelkie niepodpinalne montowania w poddrzewie są automatycznie wycinane (tj. nie są replikowane) przy replikacji tego poddrzewa w celu utworzenia poddrzewa docelowego.

Domyślnie, zmiana typu propagacji wpływa jedynie na montowanie target. Jeśli w mountflags poda się również znacznik MS_REC, to zmieni się typ propagacji również wszystkich montowań poniżej celu target.

Więcej informacji o typach propagacji montowań (w tym domyślnym typie propagacji montowań przypisywanym nowym montowaniom) znajduje się w podręczniku mount_namespaces(7).

  Przesuwanie montowania
Jeśli mountflags zawiera znacznik MS_MOVE (dostępny od Linuksa 2.4.18), to nastąpi przesunięcie poddrzewa: source określa dotychczasowe montowanie, a target podaje nowe położenie, do którego to montowanie ma być przemieszczone. Przesunięcie jest niepodzielne, w żadnej chwili poddrzewo nie jest odmontowane.

Pozostałe bity w argumencie mountflags są ignorowane, podobnie jak argumenty filesystemtype i data.

  Tworzenie nowego montowania
Jeśli w mountflags nie jest podany żaden ze znaczników: MS_REMOUNT, MS_BIND, MS_MOVE, MS_SHARED, MS_PRIVATE, MS_SLAVE lub MS_UNBINDABLE, to mount() dokonuje swojej domyślnej akcji: tworzenia nowego montowania. source określa źródło nowego montowania, a target podaje katalog, w którym zostanie utworzony punkt montowania.

Używane są argumenty filesystemtype i data, a w mountflags można podać kolejne bity, aby zmodyfikować zachowanie wywołania.

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.

EACCES
    Składowa ścieżki była nieprzeszukiwalna (zob. też path_resolution(7)).

EACCES
    Próbowano zamontować system plików tylko do odczytu, bez podania znacznika MS_RDONLY.

    System plików może być tylko do odczytu z wielu powodów, w tym: istnienia na dysku optycznym tylko do odczytu; istnienia na urządzeniu z fizycznym przełącznikiem, ustawionym w pozycji tylko do odczytu; skompilowania implementacji systemu plików tylko z obsługą odczytu; wystąpienia przy pierwotnym zamontowaniu systemu plików błędów, które spowodowały oznaczenie go jako tylko do odczytu, z brakiem możliwości zamontowania jako do odczytu i zapisu (do momentu naprawienia tych błędów).

    Niektóre systemy plików, przy próbie zamontowania systemu tylko do odczytu, w zamian zwracają błąd EROFS.

EACCES
    Urządzenie blokowe source jest położone w systemie plików zamontowanym z opcją MS_NODEV.

EBUSY
    Próbowano ułożyć nowe montowanie bezpośrednio na istniejącym punkcie montowania, który utworzono w tej przestrzeni nazw montowań z tymi samymi argumentami source i target.

EBUSY
    source nie może być przemontowany tylko do odczytu, ponieważ wciąż utrzymuje pliki otwarte do zapisu.

EFAULT
    Jeden z argumentów wskaźnikowych wskazuje poza przestrzeń adresową użytkownika.

EINVAL
    source ma nieprawidłowy superblok.

EINVAL
    Próbowano dokonać operacji przemontowania (MS_REMOUNT), lecz source nie było zamontowane w target.

EINVAL
    Próbowano dokonać operacji przesunięcia (MS_MOVE), lecz drzewo montowań pod source zawiera montowania nieprzypinalne, a target jest montowaniem z typem propagacji MS_SHARED.

EINVAL
    Próbowano dokonać operacji przesunięcia (MS_MOVE), lecz montowanie macierzyste montowania source, ma typ propagacji MS_SHARED.

EINVAL
    Próbowano dokonać operacji przesunięcia (MS_MOVE), lecz source nie było montowaniem lub wynosiło „/”.

EINVAL
    Żądano operacji podpięcia (MS_BIND), gdzie source odnosi się do magicznego dowiązania przestrzeni nazw montowań (tj. dowiązania magicznego /proc/pid/ns/mnt lub montowania z podpięciem do takiego dowiązania), przy czym typ propagacji montowania macierzystego wobec target wynosił MS_SHARED, a żądany typ propagacji montowania z przypięciem mógłby spowodować zapętlenie zależności, co w przyszłości uniemożliwiłoby zwolnienie przestrzeni nazw montowań.

EINVAL
    mountflags obejmuje więcej niż jeden z: MS_SHARED, MS_PRIVATE, MS_SLAVE lub MS_UNBINDABLE.

EINVAL
    mountflags obejmuje MS_SHARED, MS_PRIVATE, MS_SLAVE lub MS_UNBINDABLE oraz zawiera znacznik inny niż MS_REC lub MS_SILENT.

EINVAL
    Próbowano zamontować z podpięciem montowanie niepodpinalne.

EINVAL
    W nieuprzywilejowanej przestrzeni nazw montowań (tj. przestrzeni nazw montowań będącej własnością przestrzeni nazw użytkownika, utworzonej przez nieuprzywilejowanego użytkownika), próbowano zamontować z podpięciem (MS_BIND), bez podania (MS_REC), co spowodowałoby ujawnienie drzewa systemu plików, pod jednym z podmontowań podpinanego katalogu.

ELOOP
    Podczas rozwiązywania ścieżki napotkano zbyt wiele dowiązań.

ELOOP
    Próbowano dokonać operacji przesunięcia, a target jest potomkiem source.

EMFILE
    (Gdy nie jest wymagane urządzeń blokowe:) Tablica urządzeń atrap jest pełna.

ENAMETOOLONG
    Ścieżka była dłuższa od MAXPATHLEN.

ENODEV
    filesystemtype nie jest skonfigurowany w jądrze.

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.

ENOSPC
    Po wykonaniu tego wywołania systemowego, liczba montowań przekroczyłaby limit w niektórych przestrzeniach nazw montować. Limit jest kontrolowany przez plik /proc/sys/fs/mount-max, szczegóły opisano w podręczniku proc_sys_fs(5). Proszę zauważyć, że limit ten dotyczy zarówno przestrzeni nazw montowań, gdzie występuje operacja montowania, jak i wszelkich przestrzeni nazw montowań, do których montowanie propagowałoby. Więcej informacji o przestrzeniach nazw montowań i propagacji montowań opisano w podręczniku mount_namespaces(7).

ENOTBLK
    source nie jest urządzeniem blokowym (a było ono wymagane).

ENOTDIR
    target lub przedrostek source nie jest katalogiem.

ENXIO
    Główny numer urządzenia blokowego source jest poza zakresem.

EPERM
    Wywołujący nie ma wymaganych przywilejów.

EPERM
    Próbowano zmodyfikować (MS_REMOUNT) znacznik MS_RDONLY, MS_NOSUID lub MS_NOEXEC, albo jeden ze znaczników „atime” (MS_NOATIME, MS_NODIRATIME, MS_RELATIME) istniejącego montowania, lecz montowanie jest zablokowane; zob. mount_namespaces(7).

EROFS
    Próbowano zamontować system plików tylko do odczytu bez podania znacznika MS_RDONLY. Zob. EACCES wyżej.

STANDARDY
Linux.

HISTORIA
Definicje MS_DIRSYNC, MS_MOVE, MS_PRIVATE, MS_REC, MS_RELATIME, MS_SHARED, MS_SLAVE, MS_STRICTATIME i MS_UNBINDABLE dodano do nagłówków glibc w glibc 2.12.

Od Linuksa 2.4 pojedynczy system plików może być zamontowany w wielu punktach montowań, a wiele montowań może być ułożonych w tym samym punkcie montowań.

Argument mountflags może mieć liczbę magiczną 0xC0ED (MS_MGC_VAL) w górnych 16 bitach (wszelkie inne znaczniki opisane w OPISIE zajmują dolne 16 bitów mountflags). Podanie MS_MGC_VAL było wymagane przed Linuksem 2.4, lecz od Linuksa 2.4 nie jest już konieczne i jest ignorowane, jeśli jest obecne.

Pierwotny znacznik MS_SYNC został przemianowany na MS_SYNCHRONOUS w 1.1.69, gdy w <mman.h> dodano odmienny MS_SYNC.

Przed Linuksem 2.4 próba wykonania programu set-user-ID lub set-group-ID w systemie plików zamontowanym z MS_NOSUID zawiodłaby z błędem EPERM. Od Linuksa 2.4, bity set-user-ID i set-group-ID są w takim przypadku po cichu ignorowane.

UWAGI

  Przestrzenie nazw montowań
Od Linuksa 2.4.19, Linux zapewnia przestrzenie nazw montowań. Przestrzeń nazw montowań jest zbiorem zamontowanych systemów plików widocznych dla procesu. Przestrzenie nazw montowań mogą być (i zwykle są) dzielone pomiędzy wieloma procesami, a zmiany w przestrzeni nazw (tj. zamontowania i odmontowania) dokonywane przez jeden proces, są widoczne dla innych procesów dzielących tę samą przestrzeń nazw (sytuacja sprzed Linuksa 2.4.19 może być rozważana, jak gdyby istniała pojedyncza przestrzeń nazw dzielona przez wszystkie procesy w systemie).

Proces potomny utworzony przez fork(2) dziedziczy przestrzeń montowań procesu macierzystego; przestrzeń nazw montowań jest zachowywana przez execve(2).

Proces może uzyskać prywatną przestrzeń nazw montowań jeśli: utworzono go za pomocą znacznika CLONE_NEWNS clone(2), gdy jego nowa przestrzeń nazw jest inicjowana jako kopia przestrzeni nazw procesu, który wywołał clone(2); albo jeśli wywoła unshare(2) ze znacznikiem CLONE_NEWNS, który powoduje, że przestrzeń nazw montowań wywołującego uzyskuje prywatną kopię przestrzeni nazw, którą wcześniej dzieliła z innymi procesami, dzięki czemu przyszłe zamontowania i odmontowania dokonane przez wywołującego są niewidoczne dla innych procesów (z wyjątkiem procesów potomnych, które wywołujący następnie utworzy) i na odwrót.

Więcej informacji o przestrzeni nazw montowań znajduje się w podręczniku mount_namespaces(7).

  Relacje rodzicielskie pomiędzy montowaniami
Każde montowanie ma montowanie macierzyste. Cała relacja rodzicielska wszystkich montowań definiuje pojedynczą hierarchię katalogów widoczną przez proces w przestrzeni nazw montowań.

Montowanie macierzyste nowego montowania jest definiowane przy jego utworzeniu. W typowym przypadku, montowaniem macierzystym nowego montowania jest to, zawierające system plików z katalogiem lub plikiem, do którego dołączane jest nowe montowanie. W przypadku, gdy nowe montowanie jest ułożone na istniejącym montowaniu, montowaniem macierzystym nowego montowania jest poprzednie montowanie ułożone w tym położeniu.

Relacje rodzicielskie pomiędzy montowaniami można sprawdzić za pomocą pliku /proc/pid/mountinfo (zob. niżej).

  /proc/pid/mounts i /proc/pid/mountinfo
Typowo linuksowy plik /proc/pid/mounts ujawnia listę montowań w przestrzeni nazw montowań procesu o danym pid. Plik /proc/pid/mountinfo ujawnia nawet więcej informacji o montowaniach, w tym o typie propagacji oraz informacje o identyfikatorze montowania, które umożliwiają odkrycie relacji rodzicielskich między montowaniami. Więcej informacji o tym pliku znajduje się w podręcznikach proc(5) oraz mount_namespaces(7).

ZOBACZ TAKŻE
mountpoint(1), chroot(2), FS_IOC_SETFLAGS(2const), mount_setattr(2), pivot_root(2), umount(2), mount_namespaces(7), path_resolution(7), findmnt(8), lsblk(8), mount(8), umount(8)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: 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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.