stringtranslate.com

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 que pertenecen a la familia Windows NT ) para asociar nombres de rutas y ciertos tipos de metadatos con entradas en la Tabla maestra de archivos (MFT) de NTFS. NTFS adopta en líneas generales un patrón similar a los sistemas de archivos típicos de Unix en la forma en que almacena y hace referencia a los datos de archivos y metadatos; la diferencia más significativa es que en NTFS, la MFT "reemplaza" a los inodos , cumpliendo la mayoría de las funciones que los inodos cumplen en un sistema de archivos típico de Unix.

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 MFT: el destino del enlace. Los enlaces son las "entradas" de archivo en el árbol de archivos jerárquico del volumen: un nombre de ruta NTFS como\foo.exeo\foobar\baz.txt es un enlace. Si el volumen que contiene dichas rutas se asignara aD:En un sistema Windows, estos podrían denominarse comoD:\foo.exeyD:\foobar\baz.txt. (Compare y contraste con los sistemas de archivos Unix típicos, donde un enlace es una entrada en un directorio (los directorios en sí mismos son simplemente un tipo de archivo almacenado en el sistema de archivos) que apunta a otro enlace o a un inodo).

Tipos de enlaces

NTFS tiene cuatro tipos de enlaces, que se corresponden con los conceptos genéricos de enlaces físicos y enlaces blandos que suelen seguir los sistemas de archivos modernos.

Enlaces duros

Los enlaces duros tienen un comportamiento típico. Un enlace duro "apunta" a un registro MFT. Ese registro de destino será el registro de un archivo "normal", como un archivo de texto o un ejecutable (suponiendo que el volumen NTFS se encuentra en un estado "saludable" normal). Compárese con un sistema de archivos Unix típico , donde un enlace duro apunta a un inodo . Como 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 de archivo de la nueva entidad de archivo (incluidos todos los grupos de datos asignados al archivo y los flujos de datos del archivo); un registro MFT para un enlace duro que apunta al primer registro MFT recién creado como su destino ; almacenar una referencia al enlace duro en un archivo de directorio; y establecer el recuento de referencia de ambos registros MFT en 1Cualquier nombre de archivo proporcionado como parte del evento de creación de archivo se almacena en el enlace físico. Un registro MFT puede ser el destino de hasta 1024 enlaces físicos; cada vez que se crea correctamente un nuevo enlace físico que apunta a un registro MFT existente previamente, se incrementa el recuento de referencias del destino.

Simétricamente, las tareas inmediatas realizadas por NTFS en un evento típico de eliminación de archivo , al eliminar un vínculo duro, son simplemente: eliminar la referencia al vínculo del archivo de directorio que lo contiene (el directorio raíz, si corresponde); y disminuir en 1los recuentos de referencia del registro MFT al que se dirige el enlace y de la entrada que contiene el enlace físico en sí . Cualquier registro MFT que ahora tenga un recuento de referencia de 0, ahora está en el estado "eliminado": todos sus recursos asociados son considerados "libres" por NTFS, para ser sobrescritos y utilizados libremente según sea necesario.

Puntos de unión

Los puntos de unión son puntos de análisis de NTFS y funcionan de manera 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 manera similar a los enlaces físicos, excepto que si el directorio de destino se renombra, se mueve o se elimina, el enlace ya no será válido. [1] [2]

Enlaces simbólicos

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

Todos los enlaces NTFS están pensados ​​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 tratamiento especial. Para los usuarios, aparecen como directorios o archivos normales. Esto también produce 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 se elimina o se cambia el nombre del archivo al que se hace referencia, 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.

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 actuales y activos.

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]

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.

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 . 10 de marzo de 2015. Archivado desde el original el 10 de marzo de 2015.
  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. ^ Colina, Keith; Grehan, Oisin (17 de enero de 2018). "README.md". repositorio pscx - a través de 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 . 4 de marzo de 2021.
  19. ^ "Formatos de rutas de archivo en sistemas Windows". docs.microsoft.com . 14 de diciembre de 2022.
  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