Um einen Namespace dauerhaft zu speichern, erstellen Sie einen Bind-Mount-Punkt auf welchem ​​/proc/PID?

Um einen Namespace dauerhaft zu speichern, erstellen Sie einen Bind-Mount-Punkt auf welchem ​​/proc/PID?

Aushttps://man7.org/linux/man-pages/man1/n.1.html:

Standardmäßig bleibt ein neuer Namespace nur so lange bestehen, wie er mindestens einen Mitgliedsprozess hat. Ein Namespace kann persistent gemacht werden, d. h., er kann auch dann bestehen bleiben, wenn er keine Mitgliedprozesse hat, indem die entsprechende Datei /proc/PID/ns/ns-type gebunden gemountet wird.

Welche PID wird im Dateipfad der Bind-Mount-Quelle verwendet? Geht es bei der Erstellung von Namespaces nicht gerade darum, dass ein Bind-Mount-Punkt nicht von der Existenz einer PID abhängig ist?

clone()Wenn ich mithilfe des Flags einen Netzwerk-Namespace erstelle CLONE_NEWNETund dann ein Bind-Mount mit der PID des neu erstellten Prozesses erstelle und anschließend den neuen Prozess beende, würde ich denken, dass die /proc/PID/ns/netDatei verschwindet, doch dann /var/run/netns/<netns name>würde sie ebenfalls gelöscht und der Netzwerk-Namespace bliebe nicht bestehen.

Antwort1

In Prozessen ausgeführte Userland-Software kann außerhalb von Prozessen keine Namespaces erstellen.

Daher verwenden Sie die PID des Namespace-erstellenden Prozesses (oder eines seiner untergeordneten Prozesse).

Wenn ich mit clone() unter Verwendung des Flags CLONE_NEWNET einen Netzwerk-Namespace erstelle und dann einen Bind-Mount unter Verwendung der PID des neu erstellten Prozesses erstelle und dann den neuen Prozess beende, würde ich denken, dass die Datei /proc/PID/ns/net verschwindet.

Nehmen wir hier "Datei" mit großen Anführungszeichen. Der Eintrag im virtuellen Dateisystem verschwindet, aber ...

aber dann würde auch /var/run/netns/ gelöscht werden

"Löschen" ist etwas, das Sie mit tatsächlichen Dateien machen, und es ist hier nicht anwendbar. Die PID würde verschwinden, aber Dinge, auf die Sie als virtueller Dateisystemeintrag unter einem Pfad zugreifen könnten, der diese PID enthält, würden unzugänglich werdenDasWeg. Aber:

aber dann würde auch /var/run/netns/ gelöscht und der Netzwerk-Namespace würde nicht bestehen bleiben.

ist falsch, da das Bind-Mount eine kernelinterne Referenz zum Namespace hinzufügen würde, sodass dieser nicht ungenutzt bleibt und somit bestehen bleibt.

verwandte Informationen