Si se mount(2)
requiere la creación de un nuevo directorio para ser el punto de montaje, no podría montar nada bajo un sistema de archivos de solo lectura. Eso sería tonto, por lo que podemos descartarlo.
Si mount creara opcionalmente un nuevo directorio para ser el punto de montaje, sería extraño. No es como montar / desmontar todo el tiempo, por lo que poner lógica adicional en el núcleo para realizar estos dos pasos con una sola llamada al sistema no sería una aceleración importante. Simplemente déjelo al espacio del usuario para hacer una mkdir(2)
llamada al sistema si lo desea. La respuesta de Dmitry señala que mount(2)
hacer ambas cosas lo haría no atómico. Y te gustaría un argumento adicional para mount(2)
con banderas modo como open(2)
se lleva, para O_CREAT
, O_EXCL
, etc. Sólo sería tonto en comparación con dejar el espacio de usuario hacerlo.
¿O tal vez estabas preguntando sobre cómo hacer esto mount(8)
(el programa tradicional que hace mount(2)
llamadas al sistema)? Eso sería posible, pero ya hay un producto perfectamente bueno mkdir(1)
para el trabajo, y el diseño de Unix se trata de buenas herramientas pequeñas que se pueden combinar. Si desea una herramienta que haga ambas cosas, es fácil escribir un script de shell para construir esa herramienta a partir de dos herramientas más simples. (O, como comentó muru, udisksctl
ya lo hace, por lo que no tiene que escribirlo). Además, Linux es normal mount(8)
desde util-linux admite el mount -o x-mount.mkdir[=mode]
uso de su x-
sintaxis para las opciones de espacio de usuario, en lugar de las opciones que se pasan al sistema de archivos.
Ahora la pregunta más interesante: ¿por qué tiene que haber un directorio en el sistema de archivos principal?
Como señala la respuesta de pjc50 (¡sin relación, a pesar de que tiene mis iniciales!), Hacer que los puntos de montaje aparezcan en los listados del directorio requeriría una verificación adicional en cada uno readdir()
.
Tener puntos de montaje como directorios en el directorio que los contiene (en el FS primario) es un buen truco. readdir()
no tiene que notar que es un punto de montaje en absoluto. Eso solo sucede si el punto de montaje se usa como un componente de ruta. La resolución de ruta, por supuesto, tiene que verificar la tabla de montaje para cada componente de directorio de una ruta.
udisksctl
. ¿Por qué usarmount
?