Wenn die Erstellung eines neuen Verzeichnisses als Einhängepunkt mount(2)
erforderlich ist, können Sie unter einem schreibgeschützten Dateisystem nichts einhängen. Das wäre dumm, also können wir das ausschließen.
Wenn mount optional ein neues Verzeichnis als Mountpoint erstellen würde, wäre das seltsam. Es ist nicht so, dass das Ein- und Aushängen ständig passiert. Daher wäre es keine wichtige Beschleunigung, zusätzliche Logik in den Kernel zu integrieren, um diese beiden Schritte mit einem einzigen Systemaufruf auszuführen. Überlassen Sie es einfach dem Benutzerraum, um einen mkdir(2)
Systemaufruf zu tätigen , wenn dies gewünscht wird. Die Antwort von Dmitry weist darauf hin, dass mount(2)
es nicht atomar wäre , wenn man beide Dinge tun würde. Und würden Sie an ein zusätzliches Argument wollen mount(2)
mit Modus - Flags wie open(2)
nimmt, für O_CREAT
, O_EXCL
usw. Es wäre einfach albern sein im Vergleich zu lassen User-Space tun es.
Oder haben Sie sich gefragt, mount(8)
ob (das traditionelle Programm, das mount(2)
Systemaufrufe ausführt) dies tun soll? Das wäre möglich, aber es gibt bereits ein perfektes mkdir(1)
Werkzeug für den Job, und im Design von Unix dreht sich alles um gute kleine Werkzeuge, die kombiniert werden können. Wenn Sie ein Tool suchen, das beides kann, ist es einfach, ein Shell-Skript zu schreiben, um dieses Tool aus zwei einfacheren Tools zu erstellen. (Oder, wie muru bemerkte, udisksctl
tut dies bereits, so dass Sie es nicht schreiben müssen.) Außerdem mount(8)
unterstützt Linuxs Standard von util-linux die mount -o x-mount.mkdir[=mode]
Verwendung seiner x-
Syntax für Optionen für den Benutzerbereich anstelle von Optionen, die an das Dateisystem übergeben werden sollen.
Nun die interessantere Frage: Warum muss es überhaupt ein Verzeichnis im übergeordneten Dateisystem geben?
Wie die Antwort von pjc50 zeigt (keine Beziehung, obwohl er meine Initialen hat!), Würde es dann eine zusätzliche Überprüfung erfordern, wenn Mount-Punkte in Verzeichnislisten angezeigt werden readdir()
.
Mount-Punkte als Verzeichnisse in dem Verzeichnis zu haben, das sie enthält (auf dem übergeordneten FS), ist ein netter Trick. readdir()
muss nicht bemerken, dass es sich überhaupt um einen Einhängepunkt handelt. Dies geschieht nur, wenn der Einhängepunkt als Pfadkomponente verwendet wird. Die Pfadauflösung muss natürlich die Mount-Tabelle für jede Verzeichniskomponente eines Pfades überprüfen.
udisksctl
. Warum benutzenmount
?