¿Existe un límite de enlaces duros para un archivo?


24

¿Hay un límite de número de enlaces duros para un archivo? ¿Se especifica en alguna parte? ¿Cuáles son los límites seguros para Linux? ¿Y para otros sistemas POSIX?

Respuestas:


16

Posix requiere que el sistema operativo entienda el concepto de enlaces duros, pero no que los enlaces duros se puedan usar en cualquier circunstancia en particular. Puede averiguar cuántos enlaces duros están permitidos en una ubicación en particular (esto puede variar según el tipo de sistema de archivos) llamando . El límite mínimo ( ) es 8, pero esto no tiene sentido, ya que puede informar muchos otros errores de todos modos (permiso denegado, disco lleno, ...).pathconf(filename, _PC_LINK_MAX)_POSIX_LINK_MAXlink()

La statestructura almacena el recuento de enlaces en un campo de tipo nlink_t, por lo que el tipo de este campo proporciona un límite superior en su sistema. Pero hay una buena posibilidad de que nunca pueda llegar tan lejos: es común tener 32 bits nlink_tpero solo 16 bits en muchos sistemas de archivos (un grep rápido en la fuente de Linux muestra que ext [234], NTFS, UFS y XFS usa conteos de enlaces de 16 bits en las estructuras de datos del kernel).


Como suplemento: BTRFS parece usar un conteo de enlaces de 8 bits.
Maciej Piechotka

@ Por el contrario, el recuento de enlaces de 8 bits para enlaces duros en el mismo directorio, pero el recuento de 32 bits en total, según esta publicación de blog /
Gilles 'SO- deja de ser malvado'

11

Esto depende del sistema de archivos.

El límite ext2 / 3/4 es 65k enlaces

línea de origen ext4 643, struct ext4_inode->__le16 i_links_count


1
El límite real es 65534. La última entrada del contador se usa para un transitorio en la llamada al sistema rename ().
Joshua

44
Incluso menos (se encuentra en la misma ext4.h): / * Recuento máximo de enlaces a un archivo * / #define EXT4_LINK_MAX 65000
PoltoS

10

Mirando el formato de disco de estructura de inodo ext3 en las fuentes del kernel de Linux (* include / linux / ext3_fs.h *) que enumera el recuento de enlaces como un número de 16 bits

struct ext3_inode {
    ... snip ...
    __le16  i_links_count;  /* Links count */

}

Supongo que eso significa que un sistema de archivos ext3 puede tener hasta 65535 enlaces.

No he verificado los valores para otros sistemas de archivos.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.