Чи існує обмеження жорстких посилань на один файл?


24

Чи існує обмеження кількості жорстких посилань на один файл? Це десь вказано? Які безпечні обмеження для Linux? А що для інших систем POSIX?

Відповіді:


16

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

У statструктурі зберігає посилання розраховувати в поле типу nlink_t, так що тип цього поля дає верхню межу на вашій системі. Але є хороший шанс, що ви ніколи не зможете досягти такої далекості: звичайно мати 32-бітну, nlink_tале лише 16 біт у багатьох файлових системах (швидкий греп у джерелі Linux показує, що ext [234], NTFS, UFS та XFS використовує 16-бітні підрахунки посилань у структурах даних ядра).


Як доповнення: BTRFS, здається, використовує 8-бітну кількість посилань.
Мацей П'єхотка

@ Скоріше, 8-бітне посилання для жорстких посилань у тому самому каталозі, але 32-бітне кількість в цілому, згідно з цим повідомленням у блозі /
Жил 'SO- перестань бути злим'

11

Це залежить від файлової системи.

Ліміт ext2 / 3/4 - 65k посилань

Рядок 643 джерела ext4 , struct ext4_inode->__le16 i_links_count


1
Фактична межа 65534. Останній запис лічильника використовується для перехідного періоду в системному виклику rename ().
Джошуа

4
Ще менше (знайдено в тому ж ext4.h): / * Максимальна кількість посилань на файл * / #define EXT4_LINK_MAX 65000
PoltoS

10

Дивлячись на формат диска структури структури inode ext3 у джерелах ядра Linux (* include / linux / ext3_fs.h *), у якому перераховано посилання, що посилається як 16-бітове число

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

}

Я думаю, це означає, що файлова система ext3 може мати до 65535 посилань.

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.