Se è mount(2)
richiesta la creazione di una nuova directory come punto di montaggio, non è possibile montare nulla in un file system di sola lettura. Sarebbe stupido, quindi possiamo escluderlo.
Se mount opzionalmente creasse una nuova directory come mountpoint, sarebbe strano. Non è come montare / smontare avvenga continuamente, quindi inserire una logica aggiuntiva nel kernel per eseguire questi due passaggi con una singola chiamata di sistema non sarebbe un importante aumento di velocità. Lascialo allo spazio utente per effettuare una mkdir(2)
chiamata di sistema se ne desidera una. La risposta di Dmitry sottolinea che mount(2)
fare entrambe le cose lo renderebbe non atomico. E che ci si vuole un argomento in più per mount(2)
con le bandiere del modo come open(2)
avviene, per O_CREAT
, O_EXCL
ecc sarebbe solo stupido paragonato a lasciare user-space farlo.
O forse ti stavi chiedendo di fare mount(8)
(il tradizionale programma che effettua mount(2)
chiamate di sistema)? Ciò sarebbe possibile, ma esiste già un ottimo strumento mkdir(1)
per il lavoro e il design di Unix è incentrato su buoni piccoli strumenti che possono essere combinati. Se vuoi uno strumento che fa entrambe le cose, è facile scrivere uno script di shell per costruire quello strumento con due strumenti più semplici. (O, come ha commentato Muru, lo udisksctl
fa già, quindi non è necessario scriverlo.) Inoltre, il normale Linux mount(8)
da util-linux supporta l' mount -o x-mount.mkdir[=mode]
utilizzo della sua x-
sintassi per le opzioni per userspace, piuttosto che le opzioni da passare al filesystem.
Ora la domanda più interessante: perché ci deve essere una directory sul filesystem genitore?
Come sottolinea la risposta di pjc50 (nessuna relazione, anche se ha le mie iniziali!), Avere punti di mount mostrati negli elenchi delle directory richiederebbe un controllo extra su ogni readdir()
.
Avere punti di mount esistono come directory nella directory che li contiene (sul FS padre) è un bel trucco. readdir()
non è necessario notare che si tratta di un mount point. Ciò accade solo se il punto di montaggio viene utilizzato come componente del percorso. Naturalmente la risoluzione del percorso deve controllare la tabella di montaggio per ogni componente della directory di un percorso.
udisksctl
. Perché l'usomount
?