Как длина имени файла влияет на оставшееся место на диске? - PullRequest
5 голосов
/ 23 сентября 2010

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

Я понимаю, что это зависит от файловой системы.В частности, я думаю о серии файловых систем 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 ]

2 голосов
/ 21 октября 2010

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

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

1 голос
/ 21 октября 2010

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

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

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

...