Existe um limite de hardlinks para um arquivo?

24

Existe um limite de número de hardlinks para um arquivo? É especificado em algum lugar? Quais são os limites seguros para o Linux? E o que para outros sistemas POSIX?

Maciej Piechotka
fonte

Respostas:

16

O Posix exige que o sistema operacional entenda o conceito de links físicos, mas não que os links físicos possam realmente ser usados ​​em qualquer circunstância específica. Você pode descobrir quantos links físicos são permitidos em um local específico (isso pode variar de acordo com o tipo de sistema de arquivos) ligando . O limite mínimo ( ) é 8, mas isso não faz sentido, pois pode relatar muitos outros erros de qualquer maneira (permissão negada, disco cheio,…).pathconf(filename, _PC_LINK_MAX)_POSIX_LINK_MAXlink()

A statestrutura armazena a contagem de links em um campo do tipo nlink_t, portanto, o tipo desse campo fornece um limite superior no seu sistema. Mas há uma boa chance de você nunca chegar tão longe: é comum ter 32 bits, nlink_tmas apenas 16 bits em muitos sistemas de arquivos (um grep rápido na fonte Linux mostra que ext [234], NTFS, UFS e O XFS usa contagens de links de 16 bits nas estruturas de dados do kernel).

Gilles 'SO- parar de ser mau'
fonte
Como um complemento: o BTRFS parece usar a contagem de links de 8 bits.
Maciej Piechotka
@ Em vez disso, a contagem de links de 8 bits para links físicos no mesmo diretório, mas a contagem de 32 bits no total, de acordo com esta postagem do blog /
Gilles 'SO- stop be evil'
11

Isso depende do sistema de arquivos.

O limite ext2 / 3/4 é de 65k links

linha de origem ext4 643, struct ext4_inode->__le16 i_links_count

shellholic
fonte
11
O limite real é 65534. A última entrada do contador é usada para um transitório na chamada do sistema rename ().
Joshua Joshua
4
Menos ainda (encontrado no mesmo ext4.h): / * Contagem máxima de links para um arquivo * / #define EXT4_LINK_MAX 65000
PoltoS
10

Observando o formato do disco da estrutura do in3 ext3 nas fontes do kernel do linux (* include / linux / ext3_fs.h *) que lista os links contados como sendo um número de 16 bits

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

}

Eu acho que isso significa que um sistema de arquivos ext3 pode ter até 65535 links.

Eu não verifiquei os valores para outros sistemas de arquivos.

Richm
fonte