Jeśli mount(2)
wymagane jest utworzenie nowego katalogu, który będzie punktem podłączenia, nie można zamontować niczego w systemie plików tylko do odczytu. To byłoby głupie, więc możemy to wykluczyć.
Gdyby mount opcjonalnie utworzył nowy katalog jako punkt podłączenia, byłoby to dziwne. Nie jest tak, że montowanie / odmontowywanie odbywa się cały czas, więc umieszczenie dodatkowej logiki w jądrze, aby wykonać te dwa kroki za pomocą jednego wywołania systemowego, nie byłoby ważnym przyspieszeniem. Wystarczy pozostawić przestrzeń użytkownika, aby wykonać mkdir(2)
połączenie systemowe, jeśli chce. Odpowiedź Dmitry'ego wskazuje, że mount(2)
zrobienie obu rzeczy sprawiłoby, że nie byłby to atom. A ty chcesz dodatkowy argument mount(2)
z flagi trybu podoba open(2)
trwa, dla O_CREAT
, O_EXCL
itp byłoby to po prostu głupie porównaniu do przestrzeni użytkownika pozwalając zrobić.
A może pytałeś o to, czy mount(8)
(tradycyjny program, który wykonuje mount(2)
wywołania systemowe) to robi? Byłoby to możliwe, ale już doskonale nadaje się mkdir(1)
do tego zadania, a konstrukcja Uniksa polega na dobrych małych narzędziach, które można łączyć. Jeśli potrzebujesz narzędzia, które spełnia oba te warunki, łatwo jest napisać skrypt powłoki, aby zbudować to narzędzie z dwóch prostszych narzędzi. (Lub, jak skomentował Muru, udisksctl
już to robi, więc nie musisz tego pisać). Ponadto, normalny Linux mount(8)
z util-linux obsługuje mount -o x-mount.mkdir[=mode]
używanie jego x-
składni dla opcji przestrzeni użytkownika, a nie opcji, które mają być przekazywane do systemu plików.
Teraz bardziej interesujące pytanie: dlaczego w ogóle nadrzędny system plików musi mieć katalog?
Jak wskazuje odpowiedź pjc50 (brak relacji, nawet jeśli ma moje inicjały!), Posiadanie punktów montowania wyświetlanych na listach katalogów wymagałoby wtedy dodatkowej kontroli każdego readdir()
.
Posiadanie punktów montowania, ponieważ katalogi w katalogu je zawierającym (na nadrzędnym FS) to niezła sztuczka. readdir()
wcale nie musi zauważać, że jest to punkt montowania. Dzieje się tak tylko wtedy, gdy punkt montowania jest używany jako komponent ścieżki. Rozdzielczość ścieżki oczywiście musi sprawdzać tabelę montowania dla każdego elementu katalogu ścieżki.
udisksctl
. Dlaczego warto korzystaćmount
?