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?

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).


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


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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.