Как длина имени файла влияет на оставшееся место на диске?

Как длина имени файла влияет на оставшееся место на диске?

Я понимаю, что это зависит от файловой системы. В частности, я думаю о серии файловых систем EXT. Я не совсем понимаю, как inode влияет на дисковое пространство и как хранится само имя файла. По этому вопросу также сложно получить релевантные результаты поиска. Вот почему я спрашиваю здесь. В Linux максимальная длина имени файла обычно составляет 255 или 256 символов. Когда файловая система создана, это пространство "зарезервировано" для каждого имени файла? Другими словами, не влияет ли фактическое имя файла на дисковое хранилище, поскольку максимальное значение уже используется? Или это сложнее, чем это?

Предположим, у меня есть файл с именем "joe.txt" и я переименую его в "joe2.txt". После этого объем доступного дискового пространства уменьшился? А как насчет более длинных имен, таких как "joe_version.txt" или "joe_original_version_with_bug_that_Jim_solved.txt"? Я беспокоюсь о порогах в 8, 16, 32, 64 и т. Д. Символов. Я буду хранить миллионы изображений. Я никогда не беспокоился о такой проблеме раньше, поэтому я не совсем уверен, как это работает.

Хотя EXT - единственная файловая система, которую я использую, обсуждение FAT и других может быть полезно для кого-то, у кого есть подобный вопрос.

2 ответа

Решение

В Linux (или, в более общем случае, в файловых системах типа Unix) имена файлов хранятся в индексах записей каталога, которые содержат список сопоставлений (имя файла, номер индекса) для каждого файла в каталоге. Насколько я понимаю, для каждого имени файла есть зарезервированное пространство для символов NAME_MAX. И действительно, в Linux NAME_MAX - 255.

Итак, чтобы ответить на ваш вопрос, при создании файловой системы не остается места, зарезервированного для имен файлов, но как только вы создаете файл, байты NAME_MAX резервируются для имени. Более того, для inode каталога я понимаю, что по крайней мере на ext2/3/4 место выделяется в блоке диска (4 КБ, если вы не делаете что-то очень странное) гранулярности по мере необходимости. Т.е. каталог занимает минимум 4 КБ (плюс запись в родительском каталоге inode), и если список пар (имя файла, индекс) не вписывается в эти 4 КБ (минус другие издержки, например, разрешения каталога), он выделяет новый блок 4 КБ для продолжения списка и т. д. (ext2/3 использует схему косвенного блока, тогда как ext4 использует экстенты).

FAT16 предварительно выделяет.

FAT32 использует обходной путь для предоставления длинных имен файлов; по мере того, как имя файла становится длиннее, для хранения дополнительных символов требуются дополнительные блоки файлов каталога, а файл каталога является обычным файлом, поэтому он потребляет дополнительное дисковое пространство. Однако наименьшее выделение составляет один кластер, поэтому, если дополнительное хранилище имен файлов не превышает границы кластера, дополнительное дисковое пространство не расходуется из того, что вы могли бы иначе использовать.

Я не знаком с тем, как обрабатываются имена файлов в файловых системах типа UNIX.

Другие вопросы по тегам