Pregunta "Unión de directorio" vs "enlace simbólico de directorio"?


En el contexto de NTFS:

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

/D      Crea un enlace simbólico de directorio. El valor predeterminado 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 de enlace simbólico.
Target  especifica la ruta (relativa o absoluta) a la que se refiere el nuevo enlace.

  1. No es un unión de directorio exactamente lo mismo que 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 una archivo, ¿cuál sería la diferencia entre un enlace simbólico de directorio y un enlace simbólico de archivo?


336


origen


Relacionado: superuser.com/q/347930/24500 - surfasb


Respuestas:


Un cruce 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á buscando un servidor remoto, las uniones se procesan en el servidor y los enlaces simbólicos de 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 debieras poner un punto de unión c:\myjp y un enlace simbólico de directorio c:\mysymlink, ambos apuntando a c:\targetfolder. Mientras usa Alice, no notará mucha diferencia entre ellos. Pero si está usando otra máquina llamada Bob, entonces el punto de unión

\\Alice\c$\myjp señalará a \\Alice\c$\targetfolder

pero el enlace simbólico

\\Alice\c$\mysymlink señalará a \\Bob\c$\targetfolder

(Advertencia: de forma predeterminada, el sistema no sigue enlaces simbólicos en volúmenes remotos, por lo que en la mayoría de los casos el segundo ejemplo realmente dará como resultado "Archivo no encontrado" o "El enlace simbólico no se puede seguir 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 uno representa un archivo. Como el objetivo del enlace no necesita existir cuando se crea el enlace, el sistema de archivos necesita saber si debe indicar 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 privilegios especiales (por defecto, solo está disponible para procesos elevados) mientras que la creación de un cruce solo requiere acceso al sistema de archivos.


315



Para ser claros: puede haber otras diferencias funcionales más sutiles entre uniones de directorios y enlaces simbólicos de directorios. Lo remoto vs. lo local es simplemente lo más obvio desde el punto de vista de un usuario (a diferencia de un desarrollador). - Harry Johnston
@MatthewSteeples te refieres a que si creo un enlace simbólico C:\testlink (lo que apunta a C:\test en mi computadora) y alguien a distancia acceda a mi computadora y haga clic en C:\testlink, se resolvería a la C:\test en su computadora, mientras que si creo una unión de directorio C:\testlink (lo que apunta a C:\test en mi computadora), y alguien acceda remotamente a mi computadora y hace clic en C:\testlink) lo conduciría a la C:\test ¿en mi computadora? ¿O lo hice al revés? - Pacerier
@Pacerier en este contexto sí, pero los enlaces simbólicos le permiten tener una carpeta en su computadora que apunta a un recurso compartido de red (porque están resueltos del lado del cliente). Por ejemplo, C: \ MyNetworkShare podría apuntar a \\ Alice \ Share - Matthew Steeples
@MatthewSteeples pero no podríamos crear una unión de directorio C:\MyNetworkShare que apunta a \\Alice\Share ¿también? - Pacerier
@Pacerier, no, los puntos de unión deben ser locales. - Harry Johnston


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

Asumir cualquier MyLink es un enlace simbólico y cualquier MyJunc es un cruce 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 directorio al 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 desbloqueó el acceso a enlaces simbólicos remotos en su máquina local, entonces esto funcionaría ... pero solo en la máquina local donde está desbloqueado


42



Eso es muy raro. Incluso los enlaces simbólicos relativos no funcionan de forma remota. P.ej. Creo un directorio d:\_tmp\data. Crea un enlace como ese: d:\_tmp>mklink /d data-link data. El usuario remoto tiene acceso completo a d:\_tmp y todas sus subcarpetas PERO aún no podrá abrir d:\_tmp\data-link. - Nux
Esto se debe a que cuando un enlace simbólico se evalúa desde el lado del cliente, estaría apuntando a d: \ _ tmp \ data en el cliente, no en el servidor. - apraetor
Creo que la razón por la que es extraño está claro. Pero estoy de acuerdo con @Nux en que es raro, al menos en el caso de los enlaces simbólicos relativos. - Jon Coombs


Tenía la impresión de que las uniones estaban a la vuelta de la esquina por razones de legado y que los enlaces simbólicos eran mucho mejores (las cosas parecen ser así por su valor nominal). Resulta que eso no es del todo cierto. Hay algunas buenas razones para usar un cruce en lugar de un enlace simbólico. La principal diferencia se reduce a la seguridad y las rutas remotas vs. locales. Sí, la orientación remota hace que los enlaces simbólicos sean más funcionales, pero también aumenta su perfil de seguridad. 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 por sus habilidades adicionales.

enter image description here

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


Otras comparaciones de enlaces NTFS

Aquí hay algunas otras comparaciones sobre el tema, pero pueden ser engañosas cuando se consideran los cruces porque no enumeran los beneficios que enumero más arriba.

Tomado de aquí (una buena lectura introductoria)

enter image description here

De 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 están haciendo lo mismo de la misma manera (puntos de análisis), además de las diferencias antes mencionadas sobre cómo se procesan. De hecho, técnicamente, un cruce es un enlace simbólico y, a veces, la documentación puede llamar a un cruce un enlace simbólico. como es el caso aquí. Entonces, eso es algo que hay que tener en cuenta con respecto a la terminología.

NTFS

Aunque el OP especifica esto, vale la pena señalar que el "enlace simbólico" es un término muy general que no es específico de NTFS. Por lo tanto, para ser específicos, esta comparación se trata de uniones NTFS vs enlaces simbólicos NTFS.


13