Voy a cortar el automontador FreeBSD en pedazos pequeños y hervirlos en aceite

40

Estoy tratando de exponer una jerarquía de directorios de inicio a varias cárceles de FreeBSD. Los directorios de inicio se configuran de modo que cada uno sea un conjunto de datos ZFS único. Las cárceles se utilizan para el trabajo de desarrollo y, por lo tanto, se crean y destruyen regularmente.

Mi primer pensamiento fue simplemente usar nullfs para montar /homedentro de la cárcel, pero nullfs no proporciona ninguna forma de acceder a los sistemas de archivos subordinados.

Mi segundo pensamiento fue exportar los directorios a través de NFS y luego ejecutar el demonio automounter (amd) dentro de cada cárcel. Esto hubiera funcionado ... si fuera posible realizar montajes NFS dentro de una cárcel. Pero no lo es.

Mi tercer pensamiento fue ejecutar amd en el host y proporcionar montajes nullfs en las cárceles ... pero el soporte amd para nullfs no existe.

Mi cuarto pensamiento fue volver a exportar los directorios usando NFS, porque por supuesto amd funciona con NFS, ¿verdad? Desafortunadamente, en lugar de montar un directorio en el punto de montaje de destino, a amd le gusta montar cosas en una ubicación temporal ( /.amd_mnt/...) y luego crear un enlace simbólico ... que, por supuesto, es inútil dentro del entorno de la cárcel.

Entonces, ¿podrías usar nullfs para exponer un subdirectorio de /.amd_mntla cárcel? ¡No! Esto nos lleva de nuevo a mi primer intento, en el que encontramos que no hay forma de acceder a sistemas de archivos subordinados usando nullfs .

Y entonces mi cabeza explotó.

¿Hay una buena solución para lo que estoy tratando de hacer? Una mala solución sería ejecutar un script después de arrancar la cárcel que crearía múltiples puntos de montaje nullfs para cada directorio de inicio, pero esto es bastante torpe: necesitaría ejecutarse periódicamente para tener en cuenta los directorios nuevos o los directorios eliminados. Así que, básicamente, tendría que escribir un mal montador automático.

Tiene que haber una mejor manera. ¡Ayúdame, Serverfault, eres mi única esperanza!

ACTUALIZACIÓN 1 : Se me ocurrió que podría resolver parte del problema pam_mount, aunque en el mejor de los casos sería incompleto. Además, de la documentación no está claro si pam_mountpuede o no crear automáticamente el punto de montaje de destino. Si requiere que el punto de montaje exista a priori, esta solución no sería mejor que el mal montador automático que ya he propuesto.

ACTUALIZACIÓN 2 : Como se explica en las respuestas a continuación, la configuración VFCF_JAILen el sistema de archivos NFS permite que las cárceles realicen montajes NFS. Desafortunadamente, el automontador continúa comportándose de manera inútil, y cuando se ejecuta en una cárcel parece ser muy bueno para engancharse de tal manera que es necesario reiniciar el sistema para eliminar la entrada del proceso.

larsks
fuente
1
Y si está dispuesto a transferir esas funciones a FreeBSD, sería increíble. En serio, el comportamiento del montador automático de Linux estándar también sería perfecto para esto, ya que realmente monta sistemas de archivos en el punto de montaje de destino, en lugar de usar enlaces simbólicos.
Larsks
44
Culpo a una grave falta de tiempo. Y quizás solo un poco de falta de motivación ...>.>
Ignacio Vazquez-Abrams
15
+1 Solo por el increíble título. :)
Shauna
44
Me preocupa cuán específico es su método particular de ejecución
Mark Henderson
2
Oh, @Wilshire, no eres divertido.
larsks

Respuestas:

26

¡Hola, Lars! Esa es una pregunta fascinante que ha formulado, y después de un poco de investigación, puedo haber encontrado una respuesta para usted.

De acuerdo con esta y otras publicaciones, es posible establecer el VFCF_JAIL atributo en el proveedor del sistema de archivos NFS, lo que en teoría permitiría a las cárceles realizar montajes NFS. Esto puede, a su vez, permitir que uno corra y dentro de la cárcel ... lo que resolvería perfectamente este problema.

Intentaré reconstruir el kernel esta tarde para ver cómo funcionan las cosas. No es necesariamente la mejor solución (ya que significa que debe asegurarse de que este cambio persista en futuras actualizaciones del kernel), pero sería interesante si funciona.

Y recuerda...

           ___________    ____                                           
    ______/   \__//   \__/____\                             
  _/   \_/  :           //____\\                             
 /|      :  :  ..      /        \                         
| |     ::     ::      \        /                             
| |     :|     ||     \ \______/     Don't try to rebuild the
| |     ||     ||      |\  /  |        kernel remotely because
 \|     ||     ||      |   / | \         you know you're just
  |     ||     ||      |  / /_\ \        going to hose the server.
  | ___ || ___ ||      | /  /    \    
   \_-_/  \_-_/ | ____ |/__/      \   
                _\_--_/    \      /   
               /____             /  
              /     \           /    
              \______\_________/     
larsks
fuente
66
Gracias Lars. Desearía haber seguido tu consejo, porque ahora no puedo acceder al servidor y tendré que esperar hasta llegar a casa para probar esto.
larsks
10
+1 para los LOL. También considere esto como un derecho de paso: conducir a su servidor en medio de la noche para arrancar KERNEL.OLD (o KERNEL.GENERIC: mantiene un GENERIC actualizado en sus sistemas, ¿no? debería comenzar.) enseña muchas lecciones ...
voretaq7
También tengo a mano una copia de arranque en red de mfsbsd , que me ha salvado de una serie de problemas relacionados con el cargador de arranque.
Larsks
1
La configuración VFCF_JAILhizo que los montajes NFS funcionaran, pero el automontador continúa aturdiéndome.
Larsks
1
Eh, he estado usando automount para directorios de inicio durante más de una década en varios entornos y estoy contento con eso. Eso sí, este es el montador automático de Linux (y Solaris), no AMD.
Larsks