ln -s vs mount --bind

19

¿Hay alguna diferencia práctica entre usar ln -so mount --bind?

Quiero mover algunas carpetas a otra partición, sin cambiar su configuración de daemon, y me pregunto qué enfoque debería tomar.

Prefiero ln -sya que requiere una configuración mínima (sin /etc/fstabmodificaciones), pero tal vez hay una razón por la que no es común.

SyRenity
fuente

Respuestas:

25

Oh sí. Si ejecuta ln -s, crea un enlace simbólico, que es un inodo que apunta a un determinado objeto del sistema de archivos, razón por la cual los enlaces simbólicos pueden atravesar sistemas de archivos y los enlaces duros no pueden: los enlaces duros no tienen su propio inodo.

Si monta un sistema de archivos con --bind, crea un segundo punto de montaje para un dispositivo o sistema de archivos.

Si visualiza un enlace simbólico como una redirección, visualice un --bindsistema de archivos montado como creando otra puerta de enlace a los datos.

Los enlaces simbólicos y las monturas de unión son un juego de pelota completamente diferente.

El --bindmontaje me parece un poco más robusto y probablemente sea un poco más rápido que trabajar con un enlace simbólico. Por otro lado, no hay inconvenientes serios al usar el enlace simbólico, ya que el impacto en el rendimiento será pequeño (si es que existe).

Editar : He estado pensando en esto, y el éxito en el rendimiento podría ser un poco más grande de lo que pensé originalmente. Si tiene una aplicación que lee muchos archivos diferentes, cada nuevo archivo que se abra requerirá una lectura adicional. Algunas investigaciones aquí sugieren que mi suposición es correcta, por lo que si tiene una aplicación pesada de IO ejecutándose allí, considere la --bindopción de montar por encima de la solución de enlace simbólico.

La razón por la que no es común, es probablemente el hecho de que un enlace simbólico es visible en un ls, mientras que un montaje de enlace solo es visible cuando se mira / proc / mounts o / etc / mtab (que es lo que hace el comando de montaje, si es ejecutado sin parámetros). Aparte de eso, no creo que haya ningún problema. Sin embargo, me interesaría si los hay.

Además : otro problema ln -ses que para algunas aplicaciones, cuando la ruta se desreferencia, puede hacer que la aplicación se resista si "espera" que ciertos elementos estén en lugares específicos.

wzzrd
fuente
Gracias por la explicación completa! Una pequeña pregunta de seguimiento: ¿qué hace realmente el parámetro rbind y cómo se puede usar? Del manual parece que el parámetro admite el montaje de los submontajes en el árbol montado, ¿es correcto? Además, ¿es solo --rbind lo suficiente, o tengo que hacer --bind entonces --rebind? Gracias de nuevo.
SyRenity
2
mount, cuando se invoca sin ningún argumento, imprime el contenido de /etc/mtab, que tiene información ligeramente diferente que /proc/mounts. (En particular, /proc/mounts(enlace simbólico a /proc/self/mounts) siempre muestra los puntos de montaje visibles para el proceso al leerlo)
Grawity
1
@wzzrd - de las preguntas frecuentes "Lo mejor de todo: ¡edite y mejore las preguntas y respuestas existentes!" :) ..la es de ninguna manera un ligero a su respuesta - es una pequeña mejora con la información adicional, por el cual recibirá representante adicional si / cuando se vote arriba :)
Warren
1
@warren, no importa, no estoy enojado :) es solo que agregaste algo de lo que no tengo idea, así que me sentí un poco extraño;)
wzzrd
2
@wzzrd - no quise pisar ningún dedo del pie :) ... el problema específico de la aplicación es algo con lo que me he encontrado con el producto principal que uso
warren
6

Una de las grandes diferencias entre ln -sun montaje de enlace es que puede usar un montaje de enlace para "modificar" un sistema de archivos de solo lectura. Por ejemplo, si hubiera un CD montado /mnt/applicationy quisiera reemplazarlo /mnt/application/badconfigfile.confcon una versión correcta, podría hacer esto:

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf

No sería posible afectar el mismo cambio usando un enlace simbólico porque no puede modificar el sistema de archivos de destino.

Esto también se puede utilizar para un buen efecto si distribuyó un conjunto de software común a través de NFS (o algún tipo de sistema de archivos de clúster) y desea realizar cambios específicos de host en un sistema. Simplemente puede usar un montaje de enlace en el sistema de destino para anular los archivos o directorios según sea necesario.

larsks
fuente
¡Protector de dolor de cabeza! (caso raro, pero vale la pena recordar para ese momento especial)
Jonathan Komar
2

Diferencia práctica n. ° 1 para mí entre ln -s y mount --bind:

vsftpd no permite explorar un directorio a través de un enlace simbólico, pero permite cuando está montado.

No sé qué demonio estás usando, pero puede comportarse de manera similar.

petrus
fuente
1

Se podría notar que, como consecuencia de la unión a una montura, que es en sí misma una unión, que luego se recupera, la unión original permanece intacta, suponiendo que todo permanezca físicamente conectado.

Es decir, si une A a B y une B a C, y luego une D a B, C seguirá unido a A. Eso podría ser lo que desea, o no. Si uno desea que C siga a B, vuelva a montar usando los mismos objetivos, es decir mount -o remount B C, o use --rbinden su lugar. No hay --rebindopcion.

Wiley
fuente