Para conservar un espacio de nombres, cree un punto de montaje de enlace en el que /proc/PID?

Para conservar un espacio de nombres, cree un punto de montaje de enlace en el que /proc/PID?

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

De forma predeterminada, un nuevo espacio de nombres sigue existiendo sólo mientras tenga al menos un proceso miembro. Un espacio de nombres se puede hacer persistente (es decir, fijarlo para que exista incluso cuando no tiene procesos miembro) montando mediante enlace el archivo de tipo /proc/PID/ns/ns correspondiente.

¿Qué PID se utiliza en la ruta del archivo de la fuente de montaje del enlace? ¿No es el objetivo de un punto de montaje de enlace al crear espacios de nombres que el espacio de nombres no dependa de la existencia de un PID?

Si creo un espacio de nombres de red usando clone()la CLONE_NEWNETbandera y luego creo un montaje de enlace usando el PID del nuevo proceso que se creó, y luego elimino el nuevo proceso, pensaría que el /proc/PID/ns/netarchivo desaparece, pero luego /var/run/netns/<netns name>también se eliminaría y el espacio de nombres de la red no persistiría.

Respuesta1

El software de usuario, que se ejecuta en procesos, no puede crear espacios de nombres fuera de ningún proceso.

Por lo tanto, utiliza el PID del proceso de creación del espacio de nombres (o uno de sus hijos).

Si creo un espacio de nombres de red con clone() usando el indicador CLONE_NEWNET y luego creo un montaje de enlace usando el PID del nuevo proceso que se creó, y luego elimino el nuevo proceso, pensaría que /proc/PID/ns/ el archivo net desaparece,

Tomemos aquí "archivo" entre comillas grandes. La entrada del sistema de archivos virtual desaparece, pero...

pero luego /var/run/netns/ también se eliminaría

"eliminar" es algo que se hace con archivos reales y no se aplica aquí. El PID desaparecería, pero las cosas a las que podría acceder como alguna entrada del sistema de archivos virtual bajo una ruta que contenga ese PID se volverían inaccesibles.esoforma. Pero:

pero luego /var/run/netns/ también se eliminaría y el espacio de nombres de la red no persistiría.

es incorrecto, porque el montaje de enlace agregaría una referencia interna del kernel al espacio de nombres, de modo que no quede sin uso y, por lo tanto, persistirá.

información relacionada