| mount(2) | System Calls Manual | mount(2) |
mount - montuje system plików
Standardowa biblioteka C (libc, -lc)
#include <sys/mount.h>
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *_Nullable data);
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:
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.
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.
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:
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.
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że być użyty łącznie z MS_BIND, aby zmodyfikować jedynie znaczniki przypisane do danego montowania. Jest to szczególnie przydatne w ustawianiu lub usuwaniu znacznika „tylko do odczytu” bez zmieniania samego systemu plików. Podanie następujących mountflags:
MS_REMOUNT | MS_BIND | MS_RDONLY
uczyni dostęp do tego punktu montowania tylko do odczytu, bez zmieniania innych montowań.
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.
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:
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).
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.
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.
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i ustawiane errno, wskazując błąd.
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.
Linux.
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.
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).
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).
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).
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 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 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.
| 13 czerwca 2024 r. | Linux man-pages 6.9.1 |