Если в качестве точки монтирования mount(2)
требовалось создать новый каталог, вы не могли монтировать что-либо в файловой системе только для чтения. Это было бы глупо, поэтому мы можем исключить это.
Если mount при необходимости создает новый каталог для точки монтирования, это будет странно. Это не так, как монтирование / размонтирование происходит постоянно, поэтому добавление дополнительной логики в ядро для выполнения этих двух шагов с помощью одного системного вызова не будет важным ускорением. Просто оставьте это в пользовательском пространстве, чтобы сделать mkdir(2)
системный вызов, если он этого хочет. В ответе Дмитрия указывается, что mount(2)
выполнение обоих этих действий сделает его неатомарным. И вы хотите дополнительный аргумент mount(2)
с режимом флагов , как open(2)
требуется, для O_CREAT
, O_EXCL
и т.д. Это будет просто глупо по сравнению с позволяя пользовательское пространства сделать это.
Или, может быть, вы спрашивали о том, чтобы mount(8)
(традиционная программа, mount(2)
выполняющая системные вызовы) это делала? Это было бы возможно, но это уже идеально подходит mkdir(1)
для этой работы, а дизайн Unix - это хорошие небольшие инструменты, которые можно комбинировать. Если вам нужен инструмент, который выполняет обе функции, то легко написать сценарий оболочки, чтобы построить этот инструмент из двух более простых инструментов. (Или, как прокомментировал muru, это udisksctl
уже сделано , поэтому вам не нужно его писать.) Кроме того, обычный Linux mount(8)
из util-linux поддерживает mount -o x-mount.mkdir[=mode]
использование своего x-
синтаксиса для параметров для пользовательского пространства, а не для параметров, передаваемых в файловую систему.
Теперь более интересный вопрос: почему в родительской файловой системе вообще должен быть каталог?
Как указывает ответ pjc50 (никакого отношения, даже если у него есть мои инициалы!), Отображение точек монтирования в списках каталогов потребует дополнительной проверки для каждого readdir()
.
Наличие точек монтирования существует в виде каталогов в директории, содержащей их (на родительской FS), это хороший трюк. readdir()
не должен заметить, что это точка монтирования вообще. Это происходит только в том случае, если точка монтирования используется в качестве компонента пути. Разумеется, разрешение пути должно проверять таблицу монтирования для каждого компонента каталога пути.
udisksctl
. Зачем использоватьmount
?