"cruce de directorios" frente a "enlace simbólico de directorios"?

En el contexto de NTFS:

MKLINK [[/D] | [/H] | [/J]] Objetivo del enlace

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

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

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

  1. Dado que un "directorio" es en realidad sólo un archivo, ¿cuál sería la diferencia entre un enlace simbólico de directorio y un enlace simbólico de archivo?
Comentarios sobre la pregunta (1)
Solución

Un junction no es definitivamente lo mismo que un enlace simbólico de directorio, aunque se comportan de manera similar. La principal diferencia es que, si se trata de un servidor remoto, los junctions se procesan en el servidor y los enlaces simbólicos de directorio se procesan en el cliente. Vea también 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 Alice usted pone un punto de unión c:\myjp y un enlace simbólico de directorio c:\mysymlink, ambos apuntando a c:\targetfolder. Mientras estés usando Alice no notarás mucha diferencia entre ellos. Pero si usted'está usando 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: por defecto, el sistema no sigue los enlaces simbólicos en volúmenes remotos, por lo que en la mayoría de los casos el segundo ejemplo dará como resultado "Archivo no encontrado" o *"El enlace simbólico no puede seguirse porque su tipo está desactivado.")

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

También hay que tener en cuenta que la creación de un enlace simbólico requiere un privilegio especial (por defecto, sólo disponible para los procesos elevados) mientras que la creación de una unión sólo requiere acceso al sistema de archivos.

Comentarios (28)

Las conversaciones complejas hacen daño al cerebro... Me gustan los gráficos:

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

Por ejemplo

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] [ruta de enlace] [ruta de destino] 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 usted desbloquea el acceso a los enlaces simbólicos remotos en su máquina local, entonces esto funcionaría .. pero sólo en la máquina local donde está desbloqueado

Comentarios (4)

Los enlaces simbólicos tienen más funcionalidad, mientras que los empalmes casi parecen una característica heredada debido a sus limitaciones, pero las implicaciones de seguridad de estas limitaciones son específicamente la razón por la que se podría preferir un empalme sobre 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 los cruces podrían considerarse más seguros porque están limitados a rutas locales. Así que, si quieres un enlace local y puedes vivir con una ruta absoluta, probablemente estés mejor con un enlace; de lo contrario, considera un enlace simbólico por sus habilidades adicionales.

**La afirmación de la diferencia en velocidad/complejidad proviene de una afirmación no verificada en la entrada de Wikipedia sobre puntos de reparación de NTFS (una buena lectura).


Otras comparaciones de enlaces NTFS

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

Tomado de aquí (una buena lectura introductoria)

[]

De la página de SS64 en MKLink

[]


Comentarios sobre la terminología

*Las funciones son enlaces simbólicos

Las uniones y los enlaces simbólicos realmente hacen lo mismo de la misma manera (repartir puntos), aparte de las diferencias mencionadas en cómo se procesan. De hecho, técnicamente, un Junction es un enlace simbólico, y a veces la documentación puede llamar a un Junction un enlace simbólico, como es el caso aquí. Así que, esto es algo que hay que tener en cuenta con respecto a la terminología.

NTFS

Aunque el OP lo especifica, vale la pena señalar que "enlace simbólico" es un término muy general que no es específico de NTFS. Así que, para ser específicos, esta comparación es sobre NTFS Junctions vs. NTFS Symbolic Links.

Comentarios (2)