如果mount(2)
需要创建新目录作为挂载点,则无法在只读文件系统下挂载任何内容。那将是愚蠢的,所以我们可以排除这一点。
如果mount 可以选择创建一个新目录作为安装点,那将很奇怪。并不是一直都在进行挂载/卸载,因此在内核中添加额外的逻辑以使用单个系统调用来完成这两个步骤并不是很重要的。如果需要,只需留给用户空间进行mkdir(2)
系统调用。德米特里(Dmitry)的答案指出,同时mount(2)
做这两种事情会使它变得非原子性。而你想要一个额外的参数mount(2)
与模式标志一样open(2)
重视,对O_CREAT
,O_EXCL
等等。这纯粹是愚蠢相比,让用户空间做。
或者,也许您是在问让mount(8)
(进行mount(2)
系统调用的传统程序)执行此操作?那是可能的,但是已经有一个非常好的mkdir(1)
工作,而Unix的设计都是关于可以组合的好的小型工具。如果您想要一个能同时实现这两个功能的工具,则可以很容易地编写一个shell脚本,以使用两个更简单的工具构建该工具。(或者,如大师所说,udisksctl
已经这样做了,所以您不必编写它。)而且,mount(8)
util-linux的Linux正常模式支持mount -o x-mount.mkdir[=mode]
使用它的x-
语法来表示用户空间的选项,而不是将选项传递给文件系统。
现在,更有趣的问题是:为什么在父文件系统上根本没有目录?
就像pjc50的答案指出了(没有关系,即使他有我的名字缩写!),在目录列表中显示挂载点也将需要对每个目录进行额外检查readdir()
。
将挂载点作为目录存在于包含它们的目录中(在父FS上)是一个不错的技巧。 readdir()
完全不必注意它是一个安装点。仅当将安装点用作路径组件时,才会发生这种情况。当然,路径解析必须检查安装表中路径的每个目录组件。
udisksctl
。为什么要使用mount
?