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?
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?
Odpowiedzi:
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_MAX
link()
W stat
strukturze 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_t
systemach 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).
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
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.