1

Junctions para carpetas de red

Posted by Paco Zarabozo on abril 30, 2011 in Windows |

Muchísima gente, incluyendo expertos en IT, desconoce lo que son los Junction points en Windows (NTFS). Quienes están familiarizados con Linux/Unix, saben lo que es un Symlink, pero muchísimos creen que es una funcionalidad que en Windows no existe, lo cuál es un error.

Para aquellos que no saben lo que es, es similar a un acceso directo. La diferencia radica en que el sistema no lo trata como un accceso directo, sino somo si se tratara de el archivo o la carpeta real en sí. Por ejemplo, si yo tengo la siguiente ruta:

C:\Documents and settings\Paco\Mis documentos\Proyectos\112343\Tareas

…pero quiero acceder a esa ruta desde D:\Tareas, podría crear un acceso directo a dicha carpeta en D:\Tareas. Sin embargo, hay un sinnúmero de motivos por los cuáles yo podría necesitar que el sistema crea que D:\Tareas es una carpeta real. Por ejemplo, algún programa que forzosamente busca esa carpeta, pero yo por cuestiones de espacio, necesito conservarla en su ruta original. Entonces crearía un Junction point para que D:\Tareas sea a la vista de cualquier aplicación una carpeta real. Y si algo se modifica dentro de D:\Tareas, es automáticamente modificado en C:\Documents  and Settings\Paco\Mis documentos\Proyectos\112343\Tareas, ya que en realidad es el mismo punto y ocupa el mismo espacio en el disco duro.

Lo mismo puedo hacer para crear hardlinks a archivos (tal como lo hace el comando ln en Linux). También es necesario utilizar herramientas de terceros o provistas por Microsoft en toolkits de administración. Una vez que creas un link de este tipo, puedos tener el archivo original C:\Documents  and Settings\Paco\Mis documentos\Proyectos\112343\Tareas\Notas.txt y un hardlink a ese archivo en la ruta C:\Notas.txt. Son el mismo archivo. Si modifico uno de ellos el otro se modifica también.

Ciertamente ha existido en el sistema de archivos NTFS desde antes de Windows 2000, pero Microsoft nunca creó documentación al respecto. Existen actualmente herramientas de terceros e incluso algunas provistas por Microsoft para la manipulación de este tipo de links (por ejemplo, junction.exe de SysInternals – ahora de Microsoft).

Todo esto es de gran utilidad para muchísimos fines (mover la ubicación de carpetas de sistema para distribuir el espacio en otros discos, carpetas que un servidor web puede leer, simple comodidad de acceso, etc). Pero te encuentras con un problema cuando lo que intentas hacer es un Junction hacia una carpeta de red o una unidad de red.

Esta es una limitación directa de NTFS. Sin importar la herramienta que se utilice, un Junction hacia una ubicación que no es un disco duro local (como una unidad de red o una carpeta de red) simplemente no funciona. O al menos no funcionaba, hasta la aparición de la nueva versión de NTFS que introdujo Microsoft con Windows Vista y ahora Windows 7.

Desde Windows Vista, existe una herramienta (de línea de comandos/Símbolo del sistema) llamada mklink.exe. Con esta herramienta se pueden crear symlinks, hardlinks, softlinks y junction points. Pero la verdadera novedad es que es posible crear un symlink a una carpeta de red. ¿Por qué querrías hacer esto? Bueno, hay miles de razones diferentes para cada usuario. Pero supongamos lo siguiente:

  • Tengo un equipo de programadores en mi oficina
  • Tengo un servidor de desarrollo en el que se encuentran ciertos archivos que necesito que sean los mismos siempre para todos
  • Necesito cambios en tiempo real antes de pensar en control de versiones
  • El servidor tiene los archivos en la carpeta D:\Archivos
  • Necesito que cada programador, desde su propia máquina, vea/modifique esos archivos en tiempo real como si los tuviera en su propia carpeta local C:\Archivos_del_servidor.

Al crear un symlink en cada máquina hacia esa carpeta del servidor, cada máquina podrá utilizar esos archivos como si se tratara de archivos locales. Esto es invisible para las aplicaciones en general. Cualquier programa podrá abrir esos archivos creyendo que son archivos locales. Si yo un día modifico archivos en el servidor, no tengo que avisarle nada a nadie, todos tendrán los cambios automáticamente.

El uso de la herramienta mklink es muy sencillo. Basta con escribir ese comando en el Símbolo del sistema para que aparezcan instrucciones de uso. Para hacer, por ejemplo, un symlink como el que puse de ejemplo, utilizaría el siguiente comando en cada estación de trabajo:

mklink /d C:\Archivos_del_servidor \\SERVIDOR\d$\Archivos

La respuesta del comando sería la siguiente:

vínculo simbólico creado para C:\Archivos_del_servidor <<===>> \\DEV\d$\Archivos

Utilizando el modificador /J en lugar de /D, se crean Junction points normales, accesibles en versiones anteriores a Windows Vista. Con el modificador /H se crea un hardlink. Si el link que se quiere crear es de un archivo y no de una carpeta, entonces no se aplica ningún modificador en el comando, sólo la ruta del link a crear seguida de la ruta real al archivo.

Si no tienes experiencia con este tipo de cosas, te recomiendo fuertemente que investigues sobre el problema al eliminar Junction points desde el explorador de Windows. Puedes perder la carpeta original al vaciar tu papelera de reciclaje. Para eliminar Junctions hay que tener cuidado. Herramientas como junction.exe de SysInternals permiten la eliminación correcta. Hay muchas herramientas de terceros que lo hacen correctamente también.

Espero les sea de utilidad. 🙂

Etiquetas: , , , , , , ,

1 Comment

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Copyright © 2009-2017 Paco Zarabozo All rights reserved.
This site is using the Desk Mess Mirrored theme, v2.5, from BuyNowShop.com.