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.
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.
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_nlink
campo de struct stat
.
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]
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:
fsutil
utilidad (introducida en Windows 2000 ) [11]mklink
comando interno del Símbolo del sistema de Windows (introducido en Windows Vista y Windows Server 2008 ) [12]New-Item
cmdlet de PowerShell [13]Para interrogar a un archivo por sus enlaces duros, los usuarios finales pueden usar:
fsutil
utilidad [11]Get-Item
y Get-ChildItem
de 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 HardLink
cadena " " 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:
Para interrogar a un archivo por sus enlaces duros, los usuarios finales pueden usar:
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.
freedup
comando libera espacio en disco al reemplazar almacenes de datos duplicados con enlaces duros generados automáticamenteEstablece 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 )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