Есть ли предел жестких ссылок для одного файла?

24

Существует ли ограничение количества жестких ссылок для одного файла? Это указано где-нибудь? Каковы безопасные ограничения для Linux? А что за другие системы POSIX?

Мацей Печотка
источник

Ответы:

16

Posix требует, чтобы операционная система понимала концепцию жестких ссылок, но не то, чтобы жесткие ссылки могли фактически использоваться в любых конкретных обстоятельствах. Вы можете узнать, сколько жестких ссылок разрешено в определенном месте (это может варьироваться в зависимости от типа файловой системы), позвонив . Предельного минимального ( ) является 8, но это довольно бессмысленно , как может сообщить много других ошибок в любом случае (доступ запрещен, диск переполнен, ...).pathconf(filename, _PC_LINK_MAX)_POSIX_LINK_MAXlink()

В statструктуре хранит ссылку рассчитывать в поле типа nlink_t, так что тип этого поля дает верхний предел на вашей системе. Но есть хороший шанс, что вы никогда не сможете достичь этого: обычно nlink_tво многих файловых системах 32-разрядные, но только 16-разрядные (быстрый поиск в исходном коде Linux показывает, что ext [234], NTFS, UFS и XFS использует 16-битное число ссылок в структурах данных ядра).

Жиль "ТАК - перестань быть злым"
источник
В качестве дополнения: BTRFS, похоже, использует 8-битное количество ссылок.
Мацей Пехотка
@ Скорее всего, 8-битные ссылки подсчитывают для жестких ссылок в том же каталоге, но в целом 32-битные подсчитывают, согласно этому сообщению в блоге /
Жиль "ТАК - перестать быть злым"
11

Это зависит от файловой системы.

ext2 / 3/4 ограничение составляет 65 тыс. ссылок

ext4 исходная строка 643, struct ext4_inode->__le16 i_links_count

shellholic
источник
1
Фактическое ограничение составляет 65534. Последняя запись счетчика используется для переходного процесса в системном вызове rename ().
Джошуа
4
Еще меньше (найдено в том же ext4.h): / * Максимальное количество ссылок на файл * / #define EXT4_LINK_MAX 65000
PoltoS
10

Рассматривая формат диска структуры ext3 inode в исходных текстах ядра Linux (* include / linux / ext3_fs.h *), в котором количество ссылок указано как 16-битное число

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

}

Я предполагаю, что это означает, что файловая система ext3 может иметь до 65535 ссылок.

Я не проверял значения для других файловых систем.

Richm
источник
ext4 искусственно ограничивает его ссылками в 65K
Александр - восстановите Монику