Enlaces simbólicos tienen limitaciones en la forma en funciones como ls
, mv
y cp
pueden funcionar en ellos porque comandos iniciados shell diferencia gusta cd
, estas funciones no tienen información sobre cómo el usuario accede al directorio con respecto a la trayectoria lógica (ver relacionada poste ). Parece que usar la mount --bind
opción en su lugar puede evitar esto, ofreciendo una mayor funcionalidad y compatibilidad con samba y otros servidores de archivos porque el directorio montado tendrá dos rutas físicas independientes, en lugar de un enlace.
Me gustaría reemplazar todos mis enlaces simbólicos con referencias usando la mount --bind
opción, pero esto significaría montar más de 150 puntos en fstab. ¿Hay algún problema de rendimiento que pueda surgir de este o cualquier otro inconveniente que deba considerar?
Respuestas:
Con
mount --bind
, existe un árbol de directorios en dos (o más) lugares en la jerarquía de directorios. Esto puede causar varios problemas. Las copias de seguridad y otras copias de archivos seleccionarán todas las copias. Se hace difícil especificar que desea copiar un sistema de archivos: terminará copiando los archivos montados en enlace dos veces. Las búsquedas confind
,grep -r
,locate
, etc, atravesarán todas las copias, y así sucesivamente.No obtendrá ninguna "mayor funcionalidad y compatibilidad" con los montajes de enlace. Se parecen a cualquier otro directorio, que la mayoría de las veces no es un comportamiento deseable. Por ejemplo, Samba expone enlaces simbólicos como directorios por defecto; no hay nada que ganar con el uso de un montaje de enlace. Por otro lado, los montajes de enlace pueden ser útiles para exponer jerarquías de directorios a través de NFS.
No tendrá problemas de rendimiento con los montajes de enlace. Lo que tendrá es dolores de cabeza de administración. Los montajes de enlace tienen sus usos, como hacer que un árbol de directorios sea accesible desde un chroot, o exponer un directorio oculto por un punto de montaje (generalmente es un uso transitorio mientras se está remodelando una estructura de directorio). No los use si no los necesita.
Solo root puede manipular montajes de enlace. No se pueden mover por medios ordinarios; bloquean su ubicación y los directorios de antepasados.
En términos generales, si pasa un enlace simbólico a un comando, el comando actúa en el enlace en sí mismo si funciona en archivos, y en el destino del enlace si funciona en el contenido del archivo. Esto también se aplica a los directorios. Esto suele ser lo correcto. Algunos comandos tienen opciones a los enlaces simbólicos a tratar de manera diferente, por ejemplo
ls -L
,cp -d
,rsync -l
. Independientemente de lo que intente hacer, es mucho más probable que los enlaces simbólicos sean la herramienta correcta, en lugar de que los montajes de enlace sean la herramienta correcta.fuente
Además de lo que @Gilles escribió anteriormente, vale la pena señalar que algunas utilidades podrían considerar un directorio montado en un enlace como un sistema de archivos separado. Esto puede tener implicaciones de rendimiento o funcionalidad si el programa ya no puede suponer que el mismo número de inodo se refiere al mismo archivo (lo que no ocurre, si están en diferentes sistemas de archivos), un movimiento no puede optimizarse como enlace en target-then-unlink-source, etc.
fuente
df
en mi sistema ni siquiera considera los directorios montados en enlace de forma predeterminada, pero si se le pregunta específicamente, se trata como otro montaje del mismo sistema de archivos. (Lo cual, si me preguntas, es el comportamiento esperado para una herramienta con el propósito de df.)También debe usar montajes de enlace en lugar de enlaces simbólicos cuando confía en un soporte que puede no estar siempre en su lugar (por ejemplo, un disco externo) y desea asegurarse de que la estructura de directorios original esté en su lugar, incluso si el soporte falla o se elimina.
Por ejemplo, si quiero mantener / var / tmp en una tarjeta SD, usaré el montaje de enlace, ya que algunos programas esperarán que / var / tmp sea un directorio válido incluso si se quita la tarjeta.
fuente
Intenté bind mount para solucionar un problema al instalar algunos paquetes con
pacman
(archlinux, más sobre eso aquí ) en un sistema donde/var
(así como/home
y/usr/local
) eran enlaces simbólicos (a través de sistemas de archivos: SSD a SATA).Al principio se veía genial, pero, como señaló Gilles,
locate
siempre daba múltiples resultados para un solo archivo, a pesar de laPRUNE_BIND_MOUNTS = "yes"
línea/etc/updatedb.conf
.Excavando un poco más, descubrí que los montajes de unión más complejos se pueden podar correctamente:
Sin la opción PRUNE_BIND_MOUNT, habría obtenido 3 resultados:
Otro problema con los montajes de enlace:
Por supuesto, se puede añadir manualmente montaje de vínculos (mounpoint u objetivo) a
PRUNEPATHS
en/etc/updatedb.conf
.Además, se pueden usar
mountpoint
variosstat
comandos o funciones en herramientas para mejorar el recorrido del sistema de archivos como se propone aquífuente
Cuando se trata de montajes de enlace de archivo, se comportan más cerca de los enlaces duros que de los enlaces simbólicos. Esto puede tener consecuencias algo sutiles, por ejemplo:
Hasta ahora todo bien, pero ahora considere cuántos programas (editores, scripts escritos correctamente, etc.) realmente modifican los archivos:
Si
2.txt
hubiera sido un enlace simbólico1.txt
, el último comando tendría salida1new
, que es lo que probablemente se esperaría.Esto puede causar algunos problemas sutiles: en lo systemd se utiliza
BindReadOnlyPaths=
para hacer un uso determinado servicio de un diferenteresolv.conf
archivo que el resto del sistema, pero que resultó ser escamosa en raro y difícil de diagnosticar maneras, porqueresolvconf
sería reemplazar el archivo de origen detrás de la El servicio ha vuelto.fuente