Articulo de referencia

Enlaces NTFS

Los enlaces NTFS son la abstracción utilizada en el sistema de archivos NTFS (el sistema de archivos predeterminado para todas las versiones de Microsoft Windows pertenecientes ...

Los enlaces NTFS son la abstracción utilizada en el sistema de archivos NTFS (el sistema de archivos predeterminado para todas las versiones de Microsoft Windows pertenecientes a la familia Windows NT) para asociar nombres de ruta y ciertos tipos de metadatos con entradas en la Tabla Maestra de Archivos (MFT) de NTFS. NTFS adopta, en términos generales, un patrón similar al de los sistemas de archivos Unix típicos en la forma en que almacena y referencia datos y metadatos de archivos. Las entradas en la MFT corresponden tanto a inodos (nodos de índice) como a entradas de directorio en un sistema de archivos Unix típico.

En NTFS, una entidad en el sistema de archivos existe fundamentalmente como un registro almacenado en la MFT de un volumen NTFS, siendo la MFT la base de datos central del sistema de archivos NTFS y cualquier atributo y flujo NTFS asociado con dicho registro. Un enlace en NTFS es en sí mismo un registro, almacenado en la MFT, que "apunta" a otro registro de la MFT: el destino del enlace. Los enlaces son las "entradas" de archivo en el árbol de archivos jerárquico del volumen: una ruta de acceso NTFS comofoo.exeo\foobar\baz.txtes un enlace. Si el volumen que contiene dichas rutas de acceso se asignara aD:En un sistema Windows, estos podrían ser referenciados comoD:\foo.exeyD:\foobar\baz.txt(Compárese con los sistemas de archivos Unix típicos, donde un enlace es una entrada en un directorio —siendo los directorios simplemente un tipo de archivo almacenado en el sistema de archivos— que apunta a otro enlace o a un inodo).

NTFS admite tres tipos de enlaces: enlaces duros, uniones y enlaces simbólicos. [ 1 ]

Los enlaces duros tienen un comportamiento típico. Un enlace duro apunta a un registro MFT. Dicho registro será el de un archivo "normal", como un archivo de texto o un ejecutable (siempre que el volumen NTFS esté en un estado normal y correcto). Compárese con un sistema de archivos Unix típico , donde un enlace duro apunta a un inodo. Al igual que en dichos sistemas de archivos, un enlace duro NTFS no puede apuntar a un directorio.

Un evento típico de creación de un nuevo archivo en un volumen NTFS, entonces, simplemente implica que NTFS asigne y cree un nuevo registro MFT para almacenar los metadatos del nuevo archivo, incluyendo información sobre cualquiera de los clústeres de datos asignados al archivo y los flujos de datos del archivo; un registro MFT para un enlace físico que apunta al primer registro MFT recién creado como su destino ; almacenar una referencia al enlace físico en un archivo de directorio; y establecer el contador de referencias de ambos registros MFT en 1Cualquier nombre de archivo proporcionado durante la creación del archivo se almacena en el enlace físico. Un registro MFT puede tener como destino hasta 1024 enlaces físicos. Cada vez que se crea correctamente un nuevo enlace físico que apunta a un registro MFT previamente existente, se incrementa el contador de referencias del destino.

De forma simétrica, las tareas inmediatas realizadas por NTFS en un evento típico de eliminación de archivos , al eliminar un enlace físico, son las siguientes: eliminar la referencia al enlace del archivo de directorio que lo contiene (el directorio raíz, si corresponde); y decrementar por 1los recuentos de referencias del registro MFT al que apunta el enlace y, de la entrada que contiene el enlace físico en sí . Cualquier registro MFT que ahora tenga un recuento de referencias de 0, ahora se encuentra en estado "eliminado": todos sus recursos asociados son considerados "libres" por NTFS, para ser sobrescritos libremente y utilizados según sea necesario.

Cruces

Las uniones son puntos de análisis NTFS y funcionan de forma similar a los enlaces simbólicos en Unix o Linux, pero solo se definen para directorios y solo pueden ser rutas absolutas en sistemas de archivos locales (a diferencia de los sistemas de archivos remotos a los que se accede). Se crean y se comportan de forma similar a los enlaces duros, con la excepción de que si el directorio de destino se renombra, se mueve o se elimina, el enlace dejará de ser válido. [ 1 ] [ 2 ]

Los enlaces simbólicos son puntos de análisis que funcionan de forma similar a los puntos de unión o enlaces simbólicos en Unix o Linux, y aceptan rutas relativas y rutas a archivos, además de directorios. La compatibilidad con directorios y rutas UNC se añadió en NTFS 3.1.

Todos los enlaces NTFS están diseñados para ser transparentes para las aplicaciones. Esto significa que la aplicación que accede a un enlace será redirigida automáticamente por el controlador del sistema de archivos, sin necesidad de ningún tratamiento especial. Para los usuarios, aparecen como directorios o archivos normales. Esto también genera un efecto de alias: las escrituras en un enlace se transfieren al archivo o entrada MFT subyacente vinculado .

Los enlaces simbólicos contienen la ruta al directorio o archivo enlazado, y una etiqueta que identifica el controlador que implementa el comportamiento. Dado que registran la ruta, pueden enlazar a archivos en otros volúmenes o incluso a archivos remotos. Sin embargo, esto también significa que si el archivo referenciado se elimina o se renombra, el enlace deja de ser válido, y si el archivo o directorio referenciado se reemplaza por otro, el enlace apuntará al nuevo archivo o directorio.

En comparación con los archivos de acceso directo

Un enlace simbólico NTFS no es lo mismo que un archivo de acceso directo de Windows , que es un archivo normal, generalmente con la extensión .LNK. . Este último puede crearse en cualquier sistema de archivos (como el anterior FAT32 ), puede contener metadatos (como un icono que se muestra al ver el acceso directo en Eliminar vínculos) y no es transparente para las aplicaciones.

Las implementaciones de entornos tipo Unix para Windows, como Cygwin y MinGW, pueden usar archivos de acceso directo para emular enlaces simbólicos cuando el sistema operativo anfitrión no los admite, si están configuradas para ello.

Ejemplos de uso

Usos integrados

  • El Almacén de Componentes de Windows ( WinSxS ) utiliza enlaces físicos para realizar un seguimiento de las diferentes versiones de DLL almacenadas una al lado de la otra en el disco duro.
  • Las instalaciones básicas de Windows Server 2008 utilizaban enlaces simbólicos para la redirección de \Users\All Users\ → \ProgramData\.
  • Desde Windows Vista , todas las versiones de Windows han utilizado un esquema específico de directorios integrados y emplean enlaces ocultos para mantener la compatibilidad con versiones anteriores de Windows XP. Algunos ejemplos de estos enlaces son:
    • C:\Documents and Settingsseñalando aC:\Users
    • %USERPROFILE%\Application Dataseñalando a%USERPROFILE%\AppData\Roaming
    • %USERPROFILE%\My Documents\My Picturesseñalando a%USERPROFILE%\Pictures

Redirección del programa

Al establecer un punto de unión que apunte a un directorio que contenga una versión específica de un programa, es posible agregar otra versión del programa y redirigir el punto de unión para que apunte a la versión deseada.

Ahorrando espacio de almacenamiento

El contenido de un punto de unión prácticamente no ocupa espacio de almacenamiento (simplemente apunta al directorio original). Si un administrador necesita múltiples puntos de acceso a un directorio grande, los puntos de unión pueden ser una solución eficaz. No se deben confundir los puntos de unión con copias , ya que simplemente apuntan al original. Si es necesario modificar directorios por separado, no se puede usar un punto de unión, puesto que no proporciona una copia independiente del directorio ni de los archivos que contiene.

Asimismo, los enlaces simbólicos y los enlaces duros son útiles para combinar el contenido de archivos individuales.

Eludir las rutas predefinidas

Dado que reinstalar Windows (o instalar una nueva versión) suele requerir borrar el contenido del C:disco, es conveniente crear varias particiones para que solo sea necesario borrar una durante la instalación. Sin embargo, algunos programas no permiten al usuario elegir el directorio de instalación o instalan algunos de sus archivos en el C:disco aunque estén instalados en otro. Al crear un punto de unión, se puede engañar al programa para que se instale en un directorio diferente.

Herramientas de línea de comandos

Windows incluye varias herramientas capaces de crear y manipular enlaces NTFS.

  • PowerShell : ElNew-Itemcmdlet de Windows PowerShell que puede crear archivos, carpetas, uniones y enlaces duros vacíos. [ 3 ] En PowerShell 5.0 y posteriores, también puede crear enlaces simbólicos. [ 4 ] LosGet-ItemyGet-ChildItemse pueden usar para consultar objetos del sistema de archivos y, si son enlaces NTFS, encontrar información sobre ellos. ElRemove-Itemcmdlet puede eliminar dichos elementos, aunque se ha registrado un error que impide que este cmdlet funcione correctamente. [ 5 ]
  • Símbolo del sistema de Windows : A partir de Windows Vista y Windows Server 2008, elmklinkcomando interno puede crear uniones, enlaces duros y enlaces simbólicos. [ 6 ] Este comando también está disponible en ReactOS . [ 7 ] Además, el venerabledircomando puede mostrar y filtrar puntos de unión mediante el/aLmodificador. [ 8 ] Finalmente, elrdcomando (también conocido comormdir) puede eliminar puntos de unión.
  • fsutil.exe: Una utilidad de línea de comandos introducida con Windows 2000. Su hardlinksubcomando puede crear enlaces duros o listar los enlaces duros asociados a un archivo. [ 9 ] Otro subcomando reparsepointpuede consultar o eliminar puntos de reanálisis , los objetos del sistema de archivos que componen los puntos de unión, los enlaces duros y los enlaces simbólicos. [ 10 ]

Además, las siguientes utilidades pueden crear enlaces NTFS, aunque no vienen incluidas con Windows.

  • linkd : Es un componente del Kit de recursos para Windows 2000 y Windows Server 2003. [ 11 ] Puede crear puntos de unión. [ 12 ]
  • unión: Una utilidad de línea de comandos gratuita de Microsoft que permite crear o eliminar uniones. [ 2 ]
  • Extensiones de la comunidad de PowerShell (PSCX): alojado en Microsoft PowerShell Gallery, [ 13 ] este módulo agrega varios cmdlets para trabajar con vínculos NTFS, incluidos: New-Hardlink, New-Junction, Get-ReparsePoint, Remove-ReparsePoint y New-Symlink. [ 14 ]

API

Para crear enlaces duros, las aplicaciones pueden usar la función CreateHardLink() de la API de Windows . Todas las versiones de la familia Windows NT pueden usar GetFileInformationByHandle() para determinar la cantidad de enlaces duros asociados con un archivo. Puede haber hasta 1024 enlaces asociados con una entrada MFT. De manera similar, la función CreateSymbolicLink() puede crear enlaces simbólicos. Las uniones son más complejas de crear, requieren el llenado manual de la información del punto de reanálisis . [ 15 ] Las uniones están definidas solo para directorios: aunque la API no falla cuando se crea una unión que apunta a un archivo, la unión no se interpretará correctamente cuando se use posteriormente.

Las uniones y los enlaces simbólicos que apuntan a directorios se pueden eliminar con RemoveDirectory() .

Peligros

Consistencia

Los enlaces simbólicos y las uniones NTFS pueden apuntar a destinos inexistentes porque el sistema operativo no garantiza continuamente que el destino exista. [ 16 ]

El uso de uniones de directorios NTFS conlleva riesgos adicionales, entre los que se incluyen:

  • incluir enlaces que hagan referencia a sus propias carpetas principales, como crear un enlace duro X:\path\to\parentque apunte a X:\path\o X:\path\to\, o
  • especifique los destinos utilizando letras de unidades de volumen, como X:, en X:\some\path\.

Estructura recursiva

El problema en el primer caso es que crea rutas recursivas, lo que implica una recursión infinita en la estructura de directorios. Al introducir la reentrada, la presencia de una o más uniones de directorios cambia la estructura del sistema de archivos de un árbol propio simple a un grafo dirigido , pero el enlace recursivo complica aún más el carácter teórico de grafos, pasando de acíclico a cíclico. Dado que ahora se pueden encontrar los mismos archivos y directorios a través de múltiples rutas, las aplicaciones que recorren estructuras reentrantes o recursivas de forma ingenua pueden dar resultados incorrectos o incoherentes, o incluso no terminar nunca. Peor aún, si eliminan recursivamente , dichos programas pueden intentar eliminar un padre del directorio que están recorriendo actualmente.

Tenga en cuenta que ambas condiciones mencionadas anteriormente existen en el sistema de enlaces duros establecidos en la C:unidad en la configuración predeterminada de Windows. Por ejemplo, cada instalación de Windows 10 define la ruta recursiva:

C:\ProgramData\ C:\ProgramData\Application Data\ C:\ProgramData\Application Data\Application Data\ C:\ProgramData\Application Data\Application Data\Application Data\ C:\ProgramData\Application Data\Application Data\Application Data\Application Data\ C:\ProgramData\Application Data\Application Data\Application Data\Application Data\Application Data\ ...

Cada ruta adicional en este conjunto aparentemente infinito es una ruta válida de Windows que apunta a la misma ubicación. En la práctica, las rutas están limitadas por el límite de 260 caracteres de DOS (o el nuevo límite de 32 767 caracteres), pero el truncamiento puede resultar en rutas y nombres de archivo incompletos o no válidos. Cuando se archiva una copia de una instalación de Windows, con las uniones de directorios intactas, en otro volumen del mismo equipo (o peor aún, de otro ), la copia archivada puede incluir carpetas activas de la instalación en ejecución. Por ejemplo, según el método de copia, una copia de seguridad de una unidad de Windows X:\archive\...incluirá un enlace físico X:\archive\Users\USERNAME\My Documentsque apunta a la carpeta C:\Users\USERNAME\Documents\de la instalación activa actual.

Recorrido a través del volumen

La segunda forma de referencia errónea de destino diferida, aunque conceptualmente más simple, puede tener consecuencias más graves. Cuando una estructura de volumen o directorio autoconsistente que contiene enlaces duros que utilizan nombres de ruta de letras de unidad de volumen se copia o se mueve a otro volumen (o cuando se reasigna la letra de unidad de un volumen por algún otro medio), dichos enlaces pueden dejar de apuntar al destino correspondiente en la estructura copiada . Nuevamente, los resultados dependen del software utilizado para la copia; mientras que algunos programas pueden intervenir modificando cualquier enlace duro completamente incluido en la copia para preservar la coherencia estructural, otros pueden ignorar, copiar exactamente o incluso acceder a los enlaces duros, copiando su contenido.

Los problemas graves surgen si los enlaces duros se copian exactamente de tal manera que, en la nueva copia, se convierten en enlaces duros entre volúmenes que siguen apuntando a archivos y carpetas originales en el volumen de origen. Los enlaces duros involuntarios entre volúmenes, como los de una carpeta de "archivo" que aún apuntan a ubicaciones en el volumen original (según la letra de la unidad), son una catástrofe inminente. Por ejemplo, eliminar lo que posteriormente se presume que es un directorio de archivo sin usar en un volumen de copia de seguridad en desuso puede resultar en la eliminación de datos de usuario activos o archivos del sistema.

Una medida preventiva para el riesgo de la letra de unidad es utilizar la sintaxis de ruta GUID de volumen, [ 17 ] en lugar de rutas que contengan letras de unidad de volumen, al especificar la ruta de destino para una unión de directorio. Por ejemplo, considere crear un alias para X:\Some\Other\Pathen X:\Some\Path\Foo:

X:\Some\Path> linkd Foo X:\Some\Other\Path

Como se describió anteriormente, si la estructura de carpetas que contiene el enlace resultante se mueve a un disco con una letra de unidad distinta de X:, o si se cambia la letra en la X:propia unidad, el contenido de los datos en la ubicación de destino es vulnerable a la corrupción accidental o al uso malicioso. Una versión más resistente de este enlace puede mitigar parcialmente este riesgo haciendo referencia al volumen de destino mediante su identificador GUID (que se puede obtener ejecutando el fsutil volume listcomando).

X:\Some\Path> linkd Foo \\?\Volume{12345678-abcd-1234-abcd-1234567890ab}\Some\Other\Path

De este modo, se garantiza que la conexión seguirá siendo válida aunque X:se cambie la letra de la unidad por cualquier medio.

En cuanto a una forma proactiva de evitar desastres en las uniones de directorios, el comando dir /AL /S /B "X:\Some\Path"puede usarse para obtener, para un análisis cuidadoso antes de confirmar cualquier alteración irreversible del sistema de archivos, una lista de todos los enlaces duros "debajo" de una ubicación determinada del sistema de archivos. Si bien por definición cada enlace en la lista resultante tiene un nombre de ruta que comienza con X:\Some\Path\, si alguno de esos enlaces duros contiene un destino que no está incluido en X:\Some\Path, entonces el ámbito especificado se ha escapado y el directorio de inicio que especificó no está completamente incluido. Puede indicarse una precaución adicional en este caso, ya que el directorio especificado incluye archivos y directorios que residen en otros volúmenes físicos, o cuyo propio recorrido de padre a raíz no incluye el directorio especificado.

Limitaciones

Requisitos de privilegio

La configuración de seguridad predeterminada de Windows impide que los administradores sin privilegios elevados y todos los usuarios que no sean administradores creen enlaces simbólicos, pero no uniones. Este comportamiento se puede cambiar ejecutando "secpol.msc", la consola de administración de directivas de seguridad local (en: Configuración de seguridad\Directivas locales\Asignación de derechos de usuario\Crear enlaces simbólicos). También se puede solucionar ejecutando cmd.exe con la opción "Ejecutar como administrador" o mediante el runascomando. A partir de la compilación 14972 de Windows 10 Insiders, se eliminó el requisito de privilegios de administrador elevados en el "Modo desarrollador" de Windows, lo que permite crear enlaces simbólicos sin necesidad de elevar la consola a administrador. A nivel de API, SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEse proporciona una bandera para este propósito. [ 18 ]

Tiempo de arranque

El proceso de inicio de Windows no admite puntos de unión, por lo que es imposible redirigir ciertas carpetas del sistema:

  • Windows
  • \Windows\System32
  • \Windows\System32\Config

Otros archivos críticos de arranque del sistema, como el archivo de imagen de suspensión hiberfil.sys, tampoco admiten la redirección.

Ubicaciones definidas por el sistema

Técnicamente es posible redirigir las siguientes ubicaciones de carpetas del sistema no críticas:

  • Usuarios
  • Documentos y configuración
  • Datos del programa
  • Archivos de programa
  • Archivos de programa (x86)

Hacer esto puede provocar problemas de fiabilidad o compatibilidad de Windows a largo plazo. No se recomienda crear enlaces simbólicos para otra unidad \Usersy apuntar a ella, ya que interrumpe las actualizaciones y las aplicaciones de la Tienda Windows. [ 19 ]\ProgramData

Crear enlaces simbólicos para \Users, \ProgramData \Program Fileso \Program Files (x86)apuntar a otras ubicaciones interrumpe la instalación o actualización de Windows. [ 20 ]

Crear enlaces simbólicos \Program Fileso apuntar a otra unidad interrumpe el Servicio basado en componentes\Program Files (x86) de Windows, que crea enlaces duros a los archivos desde su repositorio \Windows\SxS hasta su directorio de instalación.

Instalador de Windows

El Instalador de Windows no es totalmente compatible con los enlaces simbólicos. La redirección \Windows\Installerprovocará que la mayoría de los instaladores de Windows basados ​​en archivos .msi fallen con el error 2755 y/o el error 1632.

Dado que Windows XP utiliza la misma versión del formato NTFS que las versiones posteriores, es posible habilitar la compatibilidad con enlaces simbólicos. Para usar enlaces simbólicos NTFS en Windows 2000 y XP, existe un controlador de terceros que lo hace instalándose como un filtro del sistema de archivos. [ 21 ] [ 22 ]

Historia

Los enlaces simbólicos a directorios o volúmenes, denominados puntos de unión y puntos de montaje, se introdujeron con NTFS 3.0, incluido en Windows 2000. A partir de NTFS 3.1, se pueden crear enlaces simbólicos para cualquier tipo de objeto del sistema de archivos. NTFS 3.1 se introdujo junto con Windows XP , pero esta funcionalidad no estaba disponible (a través de ntfs.sys) para las aplicaciones en modo usuario. Sin embargo, se podían instalar controladores de filtro de terceros , como senableel controlador de código abierto de Masatoshi Kimura , para que la función estuviera disponible también en modo usuario. El archivo ntfs.sys lanzado con Windows Vista puso esta funcionalidad a disposición de las aplicaciones en modo usuario de forma predeterminada.

Desde NTFS 3.1, un enlace simbólico también puede apuntar a un archivo o a una ruta de red SMB remota . Si bien los puntos de unión NTFS solo admiten rutas absolutas en unidades locales, los enlaces simbólicos NTFS permiten crear enlaces mediante rutas relativas. Además, la implementación de enlaces simbólicos NTFS ofrece compatibilidad total con enlaces entre sistemas de archivos. Sin embargo, la funcionalidad que permite los enlaces simbólicos entre hosts requiere que el sistema remoto también los admita, lo que limita su compatibilidad a Windows Vista y versiones posteriores del sistema operativo Windows.

Véase también

Referencias

  1. 1 2 "Junction v1.07" . Sysinternals . Microsoft . 4 de julio de 2016.
  2. "New-Item (PowerShell 3.0)" . Microsoft Docs . Microsoft . 22 de junio de 2020. Si la ubicación se encuentra en una unidad del sistema de archivos, se permiten los siguientes valores: Si la ubicación se encuentra en una unidad del sistema de archivos, se permiten los siguientes valores: Archivo[,] Directorio[,] Unión[,] Enlace duro
  3. "New-Item (PowerShell 5.0)" . Microsoft Docs . Microsoft . 22 de junio de 2020.
  4. "Corregir Remove-Item < enlace simbólico al directorio > " . Repositorio de PowerShell . Microsoft . 4 de marzo de 2016 vía GitHub .
  5. "mklink.c" . repositorio reactos . ReactOS Alemania eV 3 de octubre de 2017 vía GitHub.com .
  6. "Dir" . Microsoft Docs . Microsoft . 18 de abril de 2012.
  7. "Enlace duro de Fsutil" . Documentación de Microsoft . Microsoft . 18 de abril de 2012.
  8. «Punto de análisis de Fsutil» . Documentos de Microsoft . Microsoft . 18 de abril de 2012.
  9. "Descargar herramientas del kit de recursos de Windows Server 2003" . Centro de descargas . 10 de marzo de 2015. Archivado del original el 10 de marzo de 2015.
  10. "Cómo crear y manipular puntos de unión NTFS" . 9 de marzo de 2015. Archivado del original el 9 de marzo de 2015.
  11. "Pscx" . Galería de PowerShell . Microsoft . 17 de enero de 2018.
  12. ^ Colina, Keith; Grehan, Oisin (17 de enero de 2018). "README.md" . repositorio pscx - a través de GitHub .
  13. "Implementaciones de una función CreateJunctionW()" . eskamation.de . Consultado el 26 de mayo de 2025 .
  14. "Consideraciones de programación (Windows)" . msdn.microsoft.com . 4 de marzo de 2021.
  15. "Formatos de ruta de archivo en sistemas Windows" . docs.microsoft.com . 14 de diciembre de 2022.
  16. "Enlaces simbólicos en Windows 10 - Blog para desarrolladores de Windows" . blogs.windows.com . 2 de diciembre de 2016.
  17. "Reubicación del directorio Usuarios y del directorio ProgramData a una unidad distinta de la que contiene el directorio Windows" . Consultado el 12 de marzo de 2015 .
  18. "Se produce un error al intentar instalar Windows 8.1 debido a la redirección de la carpeta Usuarios o Archivos de programa a otra partición" . Consultado el 12 de marzo de 2015 .
  19. Hermann Schinagl (23 de agosto de 2013). "ln - enlaces duros de línea de comandos - Enlaces simbólicos para Windows XP" .
  20. ^ "リンク/ジャンクション作成ツール" . emk.nombre .
  • Documentación sobre enlaces simbólicos NTFS en MSDN
  • Función CreateSymbolicLink en la API de Win32
  • fsutil hardlink create - crea un enlace físico ( Windows 2000 y versiones posteriores)
  • Artículo de la base de conocimientos de Microsoft : "Cómo crear y manipular puntos de unión NTFS" ( versión archivada )
  • Utilidad de línea de comandos Junction de Microsoft TechNet
  • Artículo de Codeproject : análisis del código fuente de una utilidad para puntos de unión, dirigido a programadores.
  • Artículo de PC Mag archivado el 11/12/2008 en Wayback Machine sobre cómo agregar cualquier directorio al menú de inicio (permitiendo una vista previa dentro del menú de inicio como un submenú).