stringtranslate.com

Enlaces NTFS

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.

Historia

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 senableel 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.

Tipos

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.

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. 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.

Ejemplos de uso

Usos integrados

Redirección de programas

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.

Ahorro de espacio de almacenamiento

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.

Evitar rutas predefinidas

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.

Herramientas de línea de comandos

Windows viene con varias herramientas capaces de crear y manipular enlaces NTFS.

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

API

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 unlinken Windows demuestra este uso. [17] Alternativamente, el método .NET System.IO.Directory.Delete()también funciona en ellos. [18]

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. [19]

Existen peligros adicionales al acecho en el uso de uniones de directorios NTFS que:

Estructura recursiva

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 Documentsque sigue apuntando a una carpeta C:\Users\USERNAME\Documents\en la instalación activa actual.

Travesía transversal de volumen

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\Pathat 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 listcomando).

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.

Limitaciones

Requisitos de privilegio

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 runascomando. 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_CREATEse proporciona una bandera para este propósito. [21]

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:

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

Ubicaciones definidas por el sistema

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 \Usersni \ProgramDataapuntarla a ella, ya que interrumpe las actualizaciones y las aplicaciones de la Tienda Windows. [22]

La creación de uniones para \Users, \ProgramData \Program Fileso \Program Files (x86)apuntar a otras ubicaciones interrumpe la instalación o actualización de Windows. [23]

La creación de uniones para \Program Fileso 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 ]

Instalador de Windows

Windows Installer 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 .msi fallen con el error 2755 o el error 1632.

Compatibilidad con enlaces simbólicos en Windows XP

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]

Véase también

Referencias

  1. ^ "Enlaces duros y uniones". Windows Developer . Microsoft . 31 de mayo de 2018.
  2. ^ ab "Junction v1.07". Sysinternals . Microsoft . 4 de julio de 2016.
  3. ^ "Nuevo elemento (PowerShell 3.0)". Microsoft Docs . Microsoft . 22 de junio de 2020. 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
  4. ^ "Nuevo elemento (PowerShell 5.0)". Microsoft Docs . Microsoft . 22 de junio de 2020.
  5. ^ "Corregir el problema de eliminación del elemento <enlace simbólico al directorio>". Repositorio de PowerShell . Microsoft . 4 de marzo de 2016 – vía GitHub .
  6. ^ "mklink.c". repositorio de reactos . ReactOS Deutschland eV 3 de octubre de 2017 – vía GitHub.com .
  7. ^ "Dir". Microsoft Docs . Microsoft . 18 de abril de 2012.
  8. ^ "Enlace duro de Fsutil". Microsoft Docs . Microsoft . 18 de abril de 2012.
  9. ^ "Punto de análisis de Fsutil". Documentos de Microsoft . Microsoft . 18 de abril de 2012.
  10. ^ "Descargar herramientas del kit de recursos de Windows Server 2003". Centro de descargas . 2015-03-10. Archivado desde el original el 2015-03-10.
  11. ^ "Cómo crear y manipular puntos de unión NTFS". 9 de marzo de 2015. Archivado desde el original el 9 de marzo de 2015.
  12. ^ "Pscx". Galería de PowerShell . Microsoft . 17 de enero de 2018.
  13. ^ Hill, Keith; Grehan, Oisin (17 de enero de 2018). "README.md". Repositorio pscx – vía GitHub .
  14. ^ "Enlaces NTFS, uniones de directorios y accesos directos de Windows". www.flexhex.com . Archivado desde el original el 25 de enero de 2021 . Consultado el 4 de octubre de 2019 .
  15. ^ "libuv/src/win/fs.c". GitHub . Consultado el 12 de diciembre de 2019 .
  16. ^ "libuv/src/win/fs.c fs__unlink". GitHub . Consultado el 12 de diciembre de 2019 .
  17. ^ "Eliminar unión de PowerShell". StackOverflow . Consultado el 12 de diciembre de 2019 .
  18. ^ "Consideraciones de programación (Windows)". msdn.microsoft.com .
  19. ^ "Formatos de rutas de archivo en sistemas Windows". docs.microsoft.com .
  20. ^ "¡Enlaces simbólicos en Windows 10! - Blog para desarrolladores de WindowsBlog para desarrolladores de Windows". blogs.windows.com . 2 de diciembre de 2016.
  21. ^ "Reubicación del directorio Users y del directorio ProgramData en una unidad distinta a la que contiene el directorio Windows" . Consultado el 12 de marzo de 2015 .
  22. ^ "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 .
  23. ^ Hermann Schinagl (23 de agosto de 2013). "ln - enlaces duros de línea de comandos - Enlaces simbólicos para Windows XP".
  24. ^ "リ ン ク / ジ ャ ン ク シ ョ ン 作 成 ツ ー ル". emk.nombre .

Enlaces externos