Czy istnieje limit twardych łączy dla jednego pliku?

24

Czy istnieje ograniczenie liczby dowiązań twardych dla jednego pliku? Czy jest to określone gdziekolwiek? Jakie są bezpieczne limity dla systemu Linux? A co z innymi systemami POSIX?

Maciej Piechotka
źródło

Odpowiedzi:

16

Posix wymaga, aby system operacyjny rozumiał koncepcję dowiązań twardych, ale nie by dowiązania twarde mogły być faktycznie używane w jakichkolwiek szczególnych okolicznościach. Możesz dowiedzieć się, ile twardych dowiązań jest dozwolonych w określonej lokalizacji (może się to różnić w zależności od typu systemu plików), dzwoniąc . Granica minimalna ( ) jest 8, ale to raczej bez znaczenia, może zgłosić w każdym razie wiele innych błędów (odmawia zezwolenia, zapełnienie dysku, ...).pathconf(filename, _PC_LINK_MAX)_POSIX_LINK_MAXlink()

W statstrukturze przechowuje Link liczyć w polu Typ nlink_t, więc rodzaj tej dziedzinie daje górną granicę w systemie. Ale jest duża szansa, że ​​nigdy nie będziesz w stanie dotrzeć tak daleko: często w 32-bitowych nlink_tsystemach plików jest 32 bitów, ale tylko 16 bitów (szybki grep w źródle Linuksa pokazuje, że ext [234], NTFS, UFS i XFS używa 16-bitowej liczby łączy w strukturach danych jądra).

Gilles „SO- przestań być zły”
źródło
Jako uzupełnienie: BTRFS wydaje się używać 8-bitowej liczby linków.
Maciej Piechotka,
@ Przeciwnie, 8-bitowa liczba linków dla twardych linków w tym samym katalogu, ale w sumie 32-bitowa liczba, zgodnie z tym postem na blogu /
Gilles 'SO- przestań być zły'
11

To zależy od systemu plików.

Limit ext2 / 3/4 to 65k linków

Linia źródłowa ext4 643, struct ext4_inode->__le16 i_links_count

shellholic
źródło
1
Rzeczywisty limit wynosi 65534. Ostatni wpis licznika jest używany dla stanu przejściowego w wywołaniu systemowym rename ().
Joshua
4
Jeszcze mniej (znaleziono w tym samym ext4.h): / * Maksymalna liczba linków do pliku * / # zdefiniować EXT4_LINK_MAX 65000
PoltoS
10

Patrząc na format dysku struktury i-węzłów ext3 w źródłach jądra Linuksa (* include / linux / ext3_fs.h *), który podaje liczbę łączy jako 16-bitową

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

}

Myślę, że to oznacza, że ​​system plików ext3 może mieć do 65535 linków.

Nie sprawdziłem wartości dla innych systemów plików.

Richm
źródło
ext4 sztucznie ogranicza to do 65K linków
Alexander - Przywróć Monikę