it-swarm-es.com

"directorio de unión" vs "directorio enlace simbólico"?

En el contexto de NTFS:

MKLINK [[/D] | [/H] | [/J]] Link Target

/D Crea un enlace simbólico de directorio. Por defecto es un enlace simbólico de archivo.
/H Crea un enlace fijo en lugar de un enlace simbólico.
/J Crea una unión de directorio.
Link especifica el nuevo nombre del enlace simbólico.
Target especifica la ruta (relativa o absoluta) a la que se refiere el nuevo enlace.

  1. ¿No es una unión de directorio exactamente lo mismo que una enlace simbólico de directorio?

    ¿Cuál es la diferencia entre mklink /D f1 f2 y mklink /J f1 f2?

  2. Dado que un "directorio" es en realidad solo un archivo , ¿cuál sería la diferencia entre un enlace simbólico de directorio y un enlace simbólico de archivo?

374
Pacerier

Una unión definitivamente no es lo mismo que un enlace simbólico de directorio, aunque se comportan de manera similar. La principal diferencia es que, si está mirando un servidor remoto, las uniones se procesan en el servidor y los enlaces simbólicos del directorio se procesan en el cliente . También vea el comentario de Matthew sobre el hecho de que esto significa que los enlaces simbólicos en el sistema de archivos local pueden apuntar a sistemas de archivos remotos.

Supongamos que en una máquina llamada Alicia pusieras un punto de unión c:\myjp y un enlace simbólico de directorio c:\mysymlink, ambos apuntando a c:\targetfolder. Mientras usas a Alice no notarás mucha diferencia entre ellos. Pero si está utilizando otra máquina llamada Bob, entonces el punto de unión

\\Alice\c$\myjp apuntará a \\Alice\c$\targetfolder

pero el enlace simbólico

\\Alice\c$\mysymlink apuntará a \\Bob\c$\targetfolder

(Advertencia: de forma predeterminada, el sistema no sigue los enlaces simbólicos en los volúmenes remotos, por lo que en la mayoría de los casos, el segundo ejemplo resultará en "Archivo no encontrado" o "El enlace simbólico no puede ser seguido porque su tipo está deshabilitado. ")

La diferencia entre un enlace simbólico de directorio y un enlace simbólico de archivo es simplemente que uno representa un directorio y otro representa un archivo. Dado que el destino del enlace no necesita existir cuando se crea el enlace, el sistema de archivos debe saber si debe informar a las aplicaciones que es un directorio o no.

También se debe tener en cuenta que la creación de un enlace simbólico requiere un privilegio especial (de forma predeterminada, solo está disponible para procesos elevados), mientras que la creación de una unión solo requiere acceso al sistema de archivos.

351
Harry Johnston

La conversación compleja duele el cerebro - Me gustan los gráficos:

Supongamos que cualquier MyLink es un enlace simbólico y cualquier MyJunc es una unión que apunta a Target as created.

p.ej.

mklink /D MyLink C:\T_Dir para crear un enlace simbólico al directorio de destino

mklink /J MyJunc C:\T_Dir para crear una unión de directorios con el directorio de destino

Donde la sintaxis es mklink [/J,/D] [link path] [target path] como se escribe en la máquina local


 link path    |   target path   |         When accessed ..
              |                 |  (locally)    |    (remotely)
              |                 |               |
C:\MyLink     |   C:\T_Dir      |  C:\T_Dir     |  [leads back to local]
C:\MyJunc     |   C:\T_Dir      |  C:\T_Dir     |  [leads to remote]
              |                 |
\\Svr\MyLink  |   C:\T_Dir      |   C:\T_Dir    |  [leads back to local]
\\Svr\MyJunc  |   C:\T_Dir      |  *** Must create and point local ***
              |                 |
C:\MyLink     |  \\Sv2\T_Dir    |  \\Sv2\T_Dir  |   Error*1
C:\MyJunc     |  \\Sv2\T_Dir    |  *** Error - Must point local ***
              |                 |
\\Svr\MyLink  |  \\Sv2\T_Dir    |  Error*1
\\Svr\MyJunc  |  \\Sv2\T_Dir    |  *** Must create link using target device ***

Error * 1: si desbloquea el acceso a los enlaces simbólicos remotos en su máquina local, esto funcionará ... pero solo en la máquina local donde está desbloqueada

52
Still.Tony

Los enlaces simbólicos tienen una mayor funcionalidad, mientras que las uniones casi parecen ser una característica heredada debido a sus limitaciones, pero las implicaciones de seguridad de estas limitaciones son específicamente la razón por la cual una unión puede ser preferida a un enlace simbólico. La orientación remota hace que los enlaces simbólicos sean más funcionales, pero también eleva su perfil de seguridad, mientras que las uniones pueden considerarse más seguras porque están restringidas a rutas locales . Entonces, si quieres un enlace local y puedes vivir con una ruta absoluta, probablemente estés mejor con un cruce; de lo contrario, considere un enlace simbólico para sus habilidades añadidas.

 enter image description here

** La declaración de la diferencia en velocidad/complejidad proviene de una declaración no verificada en la entrada Wikipedia en los puntos de análisis NTFS (una buena lectura). *


Otras comparaciones de enlaces NTFS

Aquí hay algunas otras comparaciones sobre el tema, pero estas pueden ser engañosas al considerar uniones porque no enumeran los beneficios que enumero arriba.

Tomado de aquí (una buena lectura introductoria)

 enter image description here

Desde página SS64 en MKLink

 enter image description here


Comentarios acerca de Terminología

Las uniones son enlaces simbólicos

Las uniones y los enlaces simbólicos realmente hacen lo mismo de la misma manera (puntos de reparse), aparte de las diferencias mencionadas anteriormente en la forma en que se procesan. De hecho, técnicamente, una unión es un enlace simbólico, y algunas veces la documentación podría llamar a una unión un enlace simbólico, como es el caso aquí . Entonces, eso es algo de lo que hay que tener cuidado con respecto a la terminología.

NTFS

A pesar de que el OP especifica esto, vale la pena señalar que "enlace simbólico" es un término muy general que no es específico de NTFS. Entonces, para ser específicos, esta comparación es acerca de las uniones NTFS contra los enlaces simbólicos de NTFS.

38
u8it