Почему размер директории всегда 4096 байт в unix?

Я уверен, что файл каталога имеет гораздо меньше информации, чем 4096 байт. Я знаю, что размер сектора 4096 байт. Но обычные файлы меньше, чем существуют.

Почему Unix резервирует 4096 байт для каждой папки?

23
задан fixer1234 2010-05-19 15:44:00
источник

4 ответов

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

например:

$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/

source

27
отвечен harrymc 2010-05-19 15:54:28
источник

иногда 4096 байт является наименьшей единицей выделения для некоторых файловых систем. Поэтому в каталоге 4096.

то же самое относится к файлам. Хотя некоторые файлы могут меньше, чем 4096, на самом деле они берут не менее 4096 хранения с диска.

10
отвечен Pablo Santa Cruz 2010-05-19 15:50:22
источник

4096 зарезервировано для уменьшения фрагментации, так как часто фактический размер содержащихся метаданных будет колебаться в зависимости от содержимого каталога. Если он постоянно растет и сжимается (скажем, он содержит файлы журналов или динамическое содержимое) с течением времени, это может повредить производительности. Вероятно, это не произойдет с одной папкой, но по всей файловой системе это будет быстро складываться.

4
отвечен MDMarra 2010-05-19 15:53:56
источник

Это зависит от файловой системы. На ext2 / 3 / 4 это" is " 4096. На reiserfs это может быть 9608 (my $HOME) 1032 (/tmp) или 48 (некоторые из реж в /tmp).

по умолчанию на блоке ext2/3/4 стоит 4096-и файл не может взять меньше. Если файл меньше, он все равно занимает целый квартал. Поскольку бессмысленно спрашивать о логическом размере каталога, и эта информация, вероятно, не находится на диске в любом случае, и она должна сообщить что-то, что она сообщает размер блока раз количество блоков, принятых т. е. физическое пространство, которое было занято.

3
отвечен Maciej Piechotka 2010-05-19 16:05:13
источник

Другие вопросы linux shell unix

X