Si mount(2)
nécessaire la création d'un nouveau répertoire pour être le point de montage, on ne pouvait pas monter quoi que ce soit dans un système de fichiers en lecture seule. Ce serait stupide, alors nous pouvons l'exclure.
Si mount créait éventuellement un nouveau répertoire comme point de montage, ce serait étrange. Ce n'est pas comme si le montage / démontage se produisait tout le temps, donc ajouter une logique supplémentaire dans le noyau pour effectuer ces deux étapes avec un seul appel système ne constituerait pas une accélération importante. Il suffit de laisser à l’espace utilisateur le pouvoir de faire un mkdir(2)
appel système s’il le souhaite. La réponse de Dmitry indique qu'avoir mount(2)
fait les deux choses le rendrait non atomique. Et vous voulez un argument supplémentaire pour mount(2)
avec des drapeaux de mode comme open(2)
prend, pour O_CREAT
, O_EXCL
etc. Il serait tout simplement ridicule par rapport à laisser l'espace utilisateur le faire.
Ou peut-être demandez-vous si mount(8)
(le programme traditionnel qui effectue des mount(2)
appels système) le fait? Ce serait possible, mais il y a déjà un très bon mkdir(1)
travail, et la conception d'Unix est basée sur de bons petits outils pouvant être combinés. Si vous voulez un outil qui fait les deux, il est facile d'écrire un script shell pour le construire à partir de deux outils plus simples. (Ou, comme le dit muru, le fait udisksctl
déjà, vous n'avez donc pas à l'écrire.) De plus, Linux utilise normalement la syntaxe mount(8)
d'util-linux mount -o x-mount.mkdir[=mode]
avec sa x-
syntaxe pour les options de l'espace utilisateur, plutôt que les options à transmettre au système de fichiers.
Maintenant la question la plus intéressante: pourquoi faut-il un répertoire sur le système de fichiers parent?
Comme le souligne la réponse de pjc50 (aucune relation, même s'il a mes initiales!), L'affichage des points de montage dans les listes de répertoires exigerait un contrôle supplémentaire à chaque passage readdir()
.
Disposer de points de montage en tant que répertoires dans le répertoire qui les contient (sur le système de fichiers parent) est une bonne astuce. readdir()
ne doit pas remarquer que c'est un point de montage du tout. Cela ne se produit que si le point de montage est utilisé comme composant de chemin. La résolution du chemin doit bien sûr vérifier la table de montage pour chaque composant de répertoire d'un chemin.
udisksctl
. Pourquoi utilisermount
?