Enlace duro

Entrada de directorio (en un sistema de archivos basado en directorios) que asocia un nombre con un archivo

En informática , un enlace duro es una entrada de directorio (en un sistema de archivos basado en directorios ) que asocia un nombre a un archivo . Por lo tanto, cada archivo debe tener al menos un enlace duro. La creación de enlaces duros adicionales para un archivo hace que el contenido de ese archivo sea accesible a través de rutas adicionales (es decir, a través de nombres diferentes o en directorios diferentes). [1] Esto causa un efecto de alias : un proceso puede abrir el archivo por cualquiera de sus rutas y cambiar su contenido. Por el contrario, un enlace blando o "acceso directo" a un archivo no es un enlace directo a los datos en sí, sino más bien una referencia a un enlace duro u otro enlace blando.

En muchos sistemas, cada directorio es en sí mismo un archivo especial que contiene una lista de nombres de archivos en lugar de otros datos. Por lo tanto, es posible crear múltiples enlaces duros a directorios, lo que podría crear una estructura de directorio circular, en lugar de una estructura ramificada como un árbol . Por ese motivo, algunos sistemas de archivos prohíben la creación de enlaces duros adicionales a directorios.

Los sistemas operativos compatibles con POSIX , como Linux , Android , macOS y la familia Windows NT [2] , admiten múltiples enlaces duros al mismo archivo, según el sistema de archivos. Por ejemplo, NTFS y ReFS admiten enlaces duros, [3] mientras que FAT no.

Operación

Una ilustración del concepto de enlace duro

Supongamos que dos enlaces físicos, denominados "LINK A.TXT" y "LINK B.TXT", apuntan a los mismos datos físicos. Un editor de texto abre "LINK A.TXT", lo modifica y lo guarda. Cuando el editor (o cualquier otra aplicación) abre "LINK B.TXT", puede ver los cambios realizados en "LINK A.TXT", ya que ambos nombres de archivo apuntan a los mismos datos. Por lo tanto, desde el punto de vista de un usuario, se trata de un archivo con varios nombres de archivo. Al editar cualquier nombre de archivo se modifican "todos" los archivos, sin embargo, al eliminar "cualquier" nombre de archivo excepto el último, se conserva el archivo.

Sin embargo, algunos editores, como GNU Emacs , rompen el concepto de enlace duro. Al abrir un archivo para editarlo, por ejemplo, "LINK B.TXT", emacs cambia el nombre de "LINK B.TXT" a "LINK B.TXT~", carga "LINK B.TXT~" en el editor y guarda el contenido modificado en un "LINK B.TXT" recién creado. Ahora, "LINK A.TXT" y "LINK B.TXT" ya no comparten los mismos datos. (Este comportamiento se puede cambiar utilizando la variable emacs backup-by-copying).

Se puede crear cualquier cantidad de enlaces físicos a los datos. Para acceder a los datos, el usuario solo necesita especificar el nombre de cualquier enlace existente; el sistema operativo resolverá la ubicación de los datos reales. Incluso si el usuario elimina uno de los enlaces, los datos siguen siendo accesibles a través de cualquier otro enlace que quede. Una vez que el usuario elimina todos los enlaces, si ningún proceso tiene abierto el archivo, el sistema operativo libera el espacio en disco que alguna vez ocupó el archivo.

Recuento de referencias

Ilustración simplificada de enlaces duros en un sistema de archivos Unix típico. Nótese que los archivos "A" y "D" apuntan a la misma entrada de índice en la tabla de inodos del sistema de archivos , lo que hace que su recuento de referencia sea 2.

La mayoría de los sistemas de archivos que admiten enlaces duros utilizan el conteo de referencias . El sistema almacena un valor entero con cada sección de datos lógicos que representa la cantidad total de enlaces duros que se han creado para apuntar a los datos. Cuando se crea un nuevo enlace, este valor se incrementa en uno. Cuando se elimina un enlace, el valor se reduce en uno. Cuando el contador llega a cero, el sistema operativo libera la sección de datos lógicos. (Es posible que el SO no lo haga inmediatamente, por ejemplo, cuando hay identificadores de archivos pendientes abiertos, por razones de rendimiento o para habilitar el comando de recuperación ).

Este es un método simple para que el sistema de archivos realice un seguimiento del uso de un área determinada de almacenamiento, ya que los valores cero indican espacio libre y los valores distintos de cero indican espacio utilizado. El mantenimiento de este valor garantiza que no habrá enlaces duros colgantes que apunten a ninguna parte. La sección de datos y el inodo asociado se conservan siempre que un único enlace duro (referencia de directorio) apunte a ellos o cualquier proceso mantenga abierto el archivo asociado.

En los sistemas operativos compatibles con POSIX , el recuento de referencias de un archivo o directorio se devuelve mediante las llamadas del sistema stat() o fstat() en el st_nlinkcampo de struct stat.

Limitaciones

Para evitar bucles en el sistema de archivos y mantener la interpretación del ..archivo " " (directorio principal) consistente, los sistemas operativos generalmente no permiten enlaces duros a directorios. UNIX System V los permitía, pero sólo el superusuario tenía permiso para hacer tales enlaces. [4] Mac OS X v10.5 (Leopard) y versiones posteriores utilizan enlaces duros en directorios sólo para el mecanismo de respaldo de Time Machine . [5]

Los enlaces duros se pueden crear únicamente con archivos que se encuentren en el mismo volumen, es decir, dentro del mismo sistema de archivos. (Los distintos volúmenes pueden tener distintos sistemas de archivos. No existe garantía de que el sistema de archivos del volumen de destino sea compatible con los enlaces duros).

El número máximo de enlaces duros a un solo archivo está limitado por el tamaño del contador de referencia. En sistemas tipo Unix, el contador es 4.294.967.295 (en máquinas de 32 bits) o 18.446.744.073.709.551.615 (en máquinas de 64 bits). En algunos sistemas de archivos, el número de enlaces duros está limitado de forma más estricta por su formato en disco. Por ejemplo, a partir de Linux 3.11, el sistema de archivos ext4 limita el número de enlaces duros en un archivo a 65.000. [6] Los límites de Windows imponen un límite de 1024 enlaces duros a un archivo en volúmenes NTFS . [7]

En Linux Weekly News , Neil Brown criticó los enlaces duros por requerir mucho mantenimiento, ya que complican el diseño de programas que manejan árboles de directorios, incluidos archivadores y herramientas de uso de disco. Estas aplicaciones deben tener cuidado de desduplicar archivos que están vinculados varias veces en una jerarquía . Brown señala que Plan 9 de Bell Labs , el sucesor previsto de Unix, no incluye el concepto de enlace duro. [8]

Soporte de plataforma

Windows NT 3.1 y versiones posteriores admiten vínculos físicos en el sistema de archivos NTFS . [9] Windows 2000 introduce una CreateHardLink()función para crear vínculos físicos, pero sólo para archivos, no para directorios. [10] La DeleteFile()función puede eliminarlos.

Para crear un enlace físico en Windows, los usuarios finales pueden usar:

Para interrogar a un archivo por sus enlaces duros, los usuarios finales pueden usar:

  • La fsutilutilidad [11]
  • Los cmdlets Get-Itemy Get-ChildItemde PowerShell. Estos cmdlets representan cada archivo con un objeto; PowerShell agrega una propiedad LinkType de solo lectura a cada uno de ellos. Esta propiedad contiene la HardLinkcadena " " si el archivo asociado tiene varios vínculos físicos. [14]

La Tienda de componentes de Windows utiliza vínculos físicos para realizar un seguimiento de las diferentes versiones de los componentes almacenados en la unidad de disco duro.

En sistemas tipo Unix , la link() llamada al sistema puede crear vínculos físicos adicionales a archivos existentes. Para crear vínculos físicos, los usuarios finales pueden utilizar:

  • La utilidad ln
  • La utilidad de enlace
  • El New-Itemcmdlet de PowerShell [13]

Para interrogar a un archivo por sus enlaces duros, los usuarios finales pueden usar:

  • El statcomando
  • El ls -lcomando
  • Los cmdlets Get-Itemy Get-ChildItemde PowerShell (ver arriba) [14]

El software de emulación o compatibilidad tipo Unix que se ejecuta en Microsoft Windows, como Cygwin y Subsistema para aplicaciones basadas en UNIX , permiten el uso de interfaces POSIX.

OpenVMS admite enlaces duros en el sistema de archivos ODS-5 . [15] A diferencia de Unix, VMS puede crear enlaces duros a directorios.

Véase también

  • Enlace simbólico : apunta a un enlace físico, no a los datos del archivo en sí; por lo tanto, funciona en todos los volúmenes y sistemas de archivos.
  • Enlaces NTFS : detalla los cuatro tipos de enlaces que admite NTFS: enlaces físicos, enlaces simbólicos, puntos de unión y puntos de montaje de volumen.
  • Acceso directo : un archivo pequeño que apunta a otro en una ubicación local o remota
    • Alias : Implementación de un acceso directo en macOS
    • Sombra : implementación de un acceso directo en OS/2
  • freedup – El freedupcomando libera espacio en disco al reemplazar almacenes de datos duplicados con enlaces duros generados automáticamente

Referencias

  1. ^ Pitcher, Lew. "Preguntas y respuestas: La diferencia entre enlaces duros y blandos".
  2. ^ "Extensión de Shell de enlace".
  3. ^ "Descripción general del sistema de archivos resiliente (ReFS)". Microsoft Learn . 26 de octubre de 2022 – vía Microsoft Docs .
  4. ^ Bach, Maurice J. (1986). El diseño del sistema operativo UNIX . Prentice Hall. pág. 128. ISBN 9780132017992.
  5. ^ Pond, James (31 de agosto de 2013). "Cómo hace Time Machine su magia". Almacén de eventos del sistema de archivos, enlaces duros. Archivado desde el original el 21 de junio de 2019. Consultado el 19 de mayo de 2019 .
  6. ^ "Árbol de fuentes del kernel de Linux, fs/ext4/ext4.h, línea 229".
  7. ^ "Función CreateHardLinkA (winbase.h)". Desarrollo de aplicaciones de Windows . 13 de octubre de 2021 – vía Microsoft Docs .
  8. ^ Brown, Neil (23 de noviembre de 2010). "Fantasmas del pasado de Unix, parte 4: diseños de alto mantenimiento". Linux Weekly News . Consultado el 20 de abril de 2014 .
  9. ^ "Cómo funcionan los enlaces duros". Microsoft Docs . 6 de enero de 2011.
  10. ^ "Función CreateHardLink". Desarrollo de Windows . Microsoft . 10 de marzo de 2011. Archivado desde el original el 2 de julio de 2011 – vía MSDN . Establece un vínculo físico entre un archivo existente y un archivo nuevo. Esta función solo se admite en el sistema de archivos NTFS y solo para archivos, no para directorios.{{cite web}}: CS1 maint: URL no apta ( enlace )
  11. ^ ab "Fsutil hardlink". Desarrollo de aplicaciones de Windows . Microsoft . 18 de abril de 2012, a través de Microsoft Docs.
  12. ^ "Mklink". Microsoft Docs . Microsoft . 18 de abril de 2012.
  13. ^ ab "New-Item (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: File[,] Directory[,] Junction[,] HardLink
  14. ^ ab "FileSystemProvider.cs". PowerShell / Repositorio de PowerShell . Microsoft . 20 de noviembre de 2021. Líneas 8139–8234 – vía GitHub .
  15. ^ "OpenVMS System Manager's Manual, Vol. I" (PDF) . VSI. Agosto de 2019 . Consultado el 23 de enero de 2021 .
Obtenido de "https://es.wikipedia.org/w/index.php?title=Enlace_duro&oldid=1237433091"