El sistema de archivos NTFS define varias formas de redirigir archivos y carpetas, por ejemplo, para hacer que un archivo apunte a otro archivo o a su contenido sin hacer una copia de este. El objeto al que se apunta se denomina destino. Dicho archivo se denomina enlace físico o simbólico según la forma en que se almacene en el sistema de archivos.
Los enlaces simbólicos a directorios o volúmenes, llamados puntos de unión y puntos de montaje, se introdujeron con NTFS 3.0 que se envió con 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 la funcionalidad no se puso a disposición (a través de ntfs.sys) para las aplicaciones en modo usuario. Sin embargo, se podían instalar controladores de filtros de terceros, como senable
el controlador de código abierto de Masatoshi Kimura, para que la función estuviera disponible también en modo usuario. El ntfs.sys lanzado con Windows Vista hizo que la funcionalidad estuviera disponible para 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 . Mientras que los puntos de unión NTFS sólo admiten rutas absolutas en unidades locales, los enlaces simbólicos NTFS permiten la vinculación mediante rutas relativas. Además, la implementación del enlace simbólico NTFS proporciona compatibilidad total con enlaces entre sistemas de archivos. Sin embargo, la funcionalidad que permite enlaces simbólicos entre hosts requiere que el sistema remoto también los admita, lo que limita efectivamente su compatibilidad a Windows Vista y sistemas operativos Windows posteriores.
Hay tres clases de enlaces:
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 sin problemas por el controlador del sistema de archivos y no se necesita ningún manejo especial. Para los usuarios, aparecen como directorios o archivos normales. Esto también genera un efecto de alias: las escrituras en un enlace pasarán la escritura al archivo subyacente vinculado o a la entrada MFT .
Los enlaces simbólicos y los puntos de unión contienen la ruta al archivo vinculado y una etiqueta que identifica el controlador que implementa el comportamiento. Debido a que registran la ruta, pueden vincularse a archivos en otros volúmenes o incluso a archivos remotos. Sin embargo, esto también significa que si el archivo al que se hace referencia se elimina o se le cambia el nombre, el enlace deja de ser válido y, si el archivo o directorio al que se hace referencia se reemplaza por otro, el enlace ahora hará referencia al nuevo archivo o directorio.
Los enlaces duros crean una nueva entrada de directorio que hace referencia al mismo registro MFT y aumentan el recuento de referencias del registro MFT. Esto significa que están restringidos a archivos del mismo sistema de archivos, pero el archivo original se puede eliminar sin invalidar el enlace duro, ya que la eliminación reduce el recuento de referencias en uno y el archivo no se elimina en la MFT hasta que el recuento llega a cero.
Un enlace simbólico NTFS no es lo mismo que un archivo de acceso directo de Windows, que es un archivo normal. Este último puede crearse en cualquier sistema de archivos (como el anterior FAT32 ), puede contener metadatos (como un icono para mostrar cuando se visualiza el acceso directo en Eliminar enlaces) 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 donde el sistema operativo host no los admite, si está configurado para hacerlo.
C:\Documents and Settings
apuntando aC:\Users
%USERPROFILE%\Application Data
apuntando a%USERPROFILE%\AppData\Roaming
%USERPROFILE%\My Documents\My Pictures
apuntando a%USERPROFILE%\Pictures
Al establecer un punto de unión que apunte a un directorio que contenga una versión particular de un software, puede ser posible agregar otra versión del software y redirigir el punto de unión para que apunte a la versión deseada.
El contenido de una unión prácticamente no utiliza espacio de almacenamiento (simplemente apunta al directorio original). Si un administrador necesita tener varios puntos de entrada a un directorio grande, los puntos de unión pueden ser una solución eficaz. Los puntos de unión no deben confundirse con una copia de algo, ya que las uniones simplemente apuntan al original. Si es necesario modificar los directorios por separado, no se puede utilizar una unión, ya que no proporciona una copia distinta del directorio o los archivos que contiene.
Asimismo, los enlaces simbólicos y los enlaces duros son útiles para fusionar el contenido de archivos individuales.
Dado que la reinstalación de Windows (o la instalación de una nueva versión) suele requerir la eliminación del contenido de la C:
unidad, resulta ventajoso crear varias particiones para que solo sea necesario eliminar una partición durante la instalación. Sin embargo, algunos programas no permiten al usuario elegir el directorio de instalación o instalar algunos de sus archivos en la C:
unidad incluso cuando están instalados en una unidad diferente. Al crear un punto de unión, se puede engañar al programa para que se instale en un directorio diferente.
Windows viene con varias herramientas capaces de crear y manipular enlaces NTFS.
New-Item
de Windows PowerShell que puede crear archivos, carpetas, uniones y vínculos físicos vacíos. [3] En PowerShell 5.0 y versiones posteriores, también puede crear vínculos simbólicos. [4] LosGet-Item
yGet-ChildItem
se pueden utilizar para interrogar objetos del sistema de archivos y, si son vínculos NTFS, buscar información sobre ellos. ElRemove-Item
cmdlet puede eliminar dichos elementos, aunque se ha registrado un error que impide que este cmdlet funcione correctamente. [5]mklink
comando interno puede crear uniones, enlaces duros y enlaces simbólicos. [6] Este comando también está disponible en ReactOS . [7] Además, el venerabledir
comando puede mostrar y filtrar puntos de unión a través del/aL
conmutador. [8] Finalmente, elrd
comando (también conocido comormdir
) puede eliminar puntos de unión.hardlink
subcomando puede crear vínculos físicos o enumerar vínculos físicos asociados con un archivo. [9] Otro subcomando, reparsepoint
, puede consultar o eliminar puntos de análisis , los objetos del sistema de archivos que forman puntos de unión, vínculos físicos y vínculos simbólicos. [10]Además, las siguientes utilidades pueden crear enlaces NTFS, aunque no vengan con Windows.
Para crear enlaces duros, las aplicaciones pueden usar la función .mw-parser-output .monospaced{font-family:monospace,monospace}CreateHardLink() de la API de Windows . Todas las versiones de la familia Windows NT pueden usar GetFileInformationByHandle()
para determinar el número 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 análisis . [15] Se encuentra un ejemplo de código en libuv . [16] Las uniones se definen solo para directorios: aunque la API no falla cuando uno crea una unión que apunta a un archivo, la unión no se interpretará correctamente cuando se use más tarde.
Las uniones y los enlaces simbólicos, incluso aquellos que apuntan a directorios, se pueden eliminar con pNtSetInformationFile
. La implementación de Libuv unlink
en Windows demuestra este uso. [17] Alternativamente, el método .NET System.IO.Directory.Delete()
también funciona en ellos. [18]
Los enlaces simbólicos y las uniones NTFS pueden apuntar a destinos inexistentes porque el sistema operativo no garantiza continuamente que el destino exista. [19]
Existen peligros adicionales al acecho en el uso de uniones de directorios NTFS que:
X:\path\to\parent
que apunte a X:\path\
o X:\path\to\
, oX:
, en X:\some\path\
.El problema en el primer caso es que crea rutas recursivas, lo que implica además 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 gráfico dirigido , pero la vinculación recursiva complica aún más el carácter teórico de los gráficos 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 manera ingenua pueden dar resultados incorrectos o incoherentes, o pueden no terminar nunca. Peor aún, si se elimina de forma recursiva , 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 vínculos físicos 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:\Datos de programa\C:\ProgramData\Datos de aplicación\C:\ProgramData\Datos de aplicación\Datos de aplicación\C:\ProgramData\Datos de aplicación\Datos de aplicación\Datos de aplicación\C:\ProgramData\Datos de aplicación\Datos de aplicación\Datos de aplicación\Datos de aplicación\C:\ProgramData\Datos de aplicación\Datos de aplicación\Datos de aplicación\Datos de aplicación\Datos de aplicación\ ...
Cada nombre de ruta adicional en este conjunto aparentemente infinito es una ruta de Windows válida real que hace referencia a la misma ubicación. En la práctica, los nombres de ruta están limitados por el límite de ruta de DOS de 260 caracteres (o el límite más reciente de 32.767 caracteres), pero el truncamiento puede dar como resultado nombres de ruta y de archivo incompletos o no válidos. Siempre que se archiva una copia de una instalación de Windows, con las uniones de directorios intactas, en otro volumen en el mismo equipo (o peor aún, en otro ), la copia archivada puede seguir incorporando carpetas activas de la instalación en ejecución. Por ejemplo, según el método utilizado para copiar, una copia de seguridad de una unidad de Windows X:\archive\...
incluirá un vínculo físico llamado X:\archive\Users\USERNAME\My Documents
que sigue apuntando a una carpeta C:\Users\USERNAME\Documents\
en la instalación activa actual.
La segunda forma de referencia errónea a un destino diferido, aunque conceptualmente es más simple, puede tener consecuencias más graves. Cuando un volumen o una estructura de 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 la letra de unidad de un volumen se reasigna por algún otro medio), dichos enlaces pueden dejar de apuntar al destino correspondiente en la estructura copiada . Nuevamente, los resultados dependen del software que se utilizó para copiar; 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 atravesar enlaces duros, copiando su contenido.
Los problemas graves se producen 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 entre volúmenes no intencionados, como los enlaces duros en una carpeta de "archivo" que siguen apuntando a ubicaciones en el volumen original (según la letra de la unidad), son catástrofes a punto de ocurrir. Por ejemplo, eliminar lo que mucho después se supone que es un directorio de archivo sin usar en un volumen de copia de seguridad en desuso puede provocar la eliminación de datos de usuario o archivos de sistema activos actuales.
Una medida preventiva para el riesgo de letras de unidad es utilizar la sintaxis de ruta GUID de volumen, [20] en lugar de rutas que contengan letras de unidad de volumen, al especificar la ruta de destino para una unión de directorios. Por ejemplo, considere crear un alias para X:\Some\Other\Path
at 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 la letra se cambia en la X:
propia unidad, el contenido de datos en la ubicación de destino es vulnerable a la corrupción accidental o al abuso malintencionado. Una versión más resistente de este enlace puede mitigar parcialmente este riesgo haciendo referencia al volumen de destino por su valor de identificador GUID (que se puede descubrir ejecutando el fsutil volume list
comando).
X:\Some\Path> linkd Foo \\?\Volume{12345678-abcd-1234--abcdefghijkl}\Some\Other\Path
Al hacerlo, se garantiza que la unión seguirá siendo válida si X:
se cambia la letra de la unidad por cualquier medio.
En cuanto a un medio proactivo para evitar desastres de unión de directorios, el comando dir /AL /S /B "X:\Some\Path"
se puede utilizar para obtener, para un análisis cuidadoso antes de realizar cualquier alteración irreversible del sistema de archivos, una lista de todos los enlaces duros "por debajo" de una determinada ubicación 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 se ha escapado el ámbito especificado y el directorio de inicio que especificó no está incluido en su totalidad. En este caso, se puede indicar una precaución adicional, ya que el directorio especificado incluye archivos y directorios que residen en otros volúmenes físicos o cuyo propio recorrido principal a la raíz no incluye el directorio especificado.
La configuración de seguridad predeterminada de Windows no permite que los administradores no elevados y todos los no administradores creen enlaces simbólicos, pero no uniones. Este comportamiento se puede cambiar ejecutando "secpol.msc", la consola de administración de la política de seguridad local (en: Configuración de seguridad\Políticas locales\Asignación de derechos de usuario\Crear enlaces simbólicos). Se puede solucionar iniciando cmd.exe con la opción Ejecutar como administrador o el runas
comando. A partir de la compilación 14972 de Windows 10 Insiders, el requisito de privilegios de administrador elevados se eliminó en el "Modo de desarrollador" de Windows, lo que permite crear enlaces simbólicos sin necesidad de elevar la consola como administrador. En el nivel de API, SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
se proporciona una bandera para este propósito. [21]
El proceso de inicio de Windows no admite puntos de unión, por lo que es imposible redirigir ciertas carpetas del sistema:
Otros archivos de arranque críticos del sistema, como el archivo de imagen de suspensión hiberfil.sys
, tampoco admiten la redirección.
Es técnicamente posible redirigir las siguientes ubicaciones de carpetas del sistema no críticas:
Hacer esto puede generar problemas de compatibilidad o confiabilidad de Windows a largo plazo. No se recomienda crear uniones para otra unidad \Users
ni \ProgramData
apuntarla a ella, ya que interrumpe las actualizaciones y las aplicaciones de la Tienda Windows. [22]
La creación de uniones para \Users, \ProgramData \Program Files
o \Program Files (x86)
apuntar a otras ubicaciones interrumpe la instalación o actualización de Windows. [23]
La creación de uniones para \Program Files
o apuntar a otra unidad interrumpe el servicio basado en componentes\Program Files (x86)
de Windows , que vincula de forma permanente los archivos de su repositorio \Windows\SxS a su directorio de instalación. [ cita requerida ]
Windows Installer no es totalmente compatible con los enlaces simbólicos. La redirección \Windows\Installer
provocará que la mayoría de los instaladores de Windows basados en .msi fallen con el error 2755 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 utilizar 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. [24] [25]
Si su ubicación está en una unidad FileSystem, se permiten los siguientes valores: Si su ubicación está en una unidad FileSystem, se permiten los siguientes valores: Archivo[,] Directorio[,] Unión[,] Vínculo duro