Почему размер каталогов отличается в выводе ls -l в файловой системе XFS?

2512
loadaverage

Я не могу понять, почему ls -l показывает размер папки меньше размера блока.

Например:

[user@01 NEW]$ ls -l total 4 drwxr-xr-x 5 root root 78 Apr 22 00:43 controllers drwxr-xr-x 14 root root 4096 Apr 22 00:44 schemas drwxr-xr-x 2 root root 38 Apr 22 00:44 spinner 

«контроллеры» - это каталог, а размер блока составляет 4096 байт, так почему же размер составляет 78 байт?

[user@01 NEW]$ find controllers/ -type f|wc -l 73 

Многие файлы находятся внутри. И du-hs показывают, что размер этой папки составляет 840K.

Еще одна странность в том, что ls -s показывает, что для этих двух каталогов выделено 0 блоков:

[user@01 NEW]# ls -ls total 4 0 drwxr-xr-x 5 root root 78 Apr 22 00:43 controllers 4 drwxr-xr-x 14 root root 4096 Apr 22 00:44 schemas 0 drwxr-xr-x 2 root root 38 Apr 22 00:44 skins 

xfs_info:

 xfs_info / meta-data=/dev/disk/by-uuid/5d87d678-e4cc-445f-b770-4e4c0357faaa isize=256 agcount=4, agsize=393088 blks = sectsz=512 attr=2 data = bsize=4096 blocks=1572352, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 

В ext4 размер папок нормальный (т.е. равен размеру блока).

1

1 ответ на вопрос

2
LSerni

Размер составляет 78 байт, потому что каталог почти пуст. Под «каталогом» я подразумеваю непосредственное содержание потомка этой папки, т. Е. Если у вас есть

.../controllers/ Class1/Whatever /Resources... Class2/Whatever /Resources... 

тогда «контроллеры» имеют только три записи (.., Class1 и Class2. Я не знаю точно, действительно ли или как .. действительно хранится).

Даже если на диске каталог будет занимать один целый блок, следовательно, 4 КБ ( но см. Ниже ... ), логический размер каталога остается 78 байт, и во многих отношениях он рассматривается как файл ( технические документы XFS относятся к это как файл каталога ). Если вы создадите новый объект сразу controllers, я ожидаю, что этот размер будет увеличиваться.

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/ch07s03s02s02.html

Кроме того, очень маленькие каталоги могут быть сохранены внутри inode, таким образом занимая ноль фактических блоков:

Очень маленькие файлы

Большинство символических ссылок и файлов каталогов представляют собой небольшие файлы. XFS позволяет хранить эти файлы в inode для повышения производительности. XFS также использует отложенные записи для ожидания, чтобы собрать весь маленький файл в буферном кеше перед записью на диск ...

Напомним, насколько я понимаю, вы можете иметь

тестирование

В моей системе Linux пространство, доступное внутри индекса XFS для файла каталога, по-видимому, составляет около 156-157 байт. При превышении используется блок 4K, но освобождение пробела также освобождает блок, сохраняя информацию обратно в inode.

mkdir temp  drwxr-xr-x 2 root root 6 2013-04-22 08:59 temp  touch temp/x; ls -la temp  drwxr-xr-x 2 root root 14 2013-04-22 09:00 temp  mv temp/x temp/{ 100 x's }  drwxr-xr-x 2 root root 113 2013-04-22 09:01 temp  { 130 x's }  drwxr-xr-x 2 root root 143 2013-04-22 09:02 temp  { 140 x's }  drwxr-xr-x 2 root root 153 2013-04-22 09:02 temp  { 146 x's } drwxr-xr-x 2 root root 4096 2013-04-22 09:03 temp  { 142 x's } drwxr-xr-x 2 root root 155 2013-04-22 09:03 temp 
Спасибо, в статье Redhat говорится: «Для размера inode по умолчанию 256 байтов доступно около 100 байтов пространства атрибутов в зависимости от количества указателей экстента данных, также хранящихся в inode». Таким образом, это означает, что размер папки не может превышать 100 байт (если она хранится в inode). Но некоторые каталоги имеют размер 130 и более байтов (также для них выделено 0 блоков). loadaverage 11 лет назад 0
Возможно, буквальная область inode файла каталога больше (ядро inode составляет 96 байт, то есть 160). Вы можете поэкспериментировать, создав файл с более длинным и длинным именем. LSerni 11 лет назад 0
Я сделал это из любопытства, реальное пространство кажется между 155 и 159 байтами. Часть, которую вы процитировали, ссылалась на файл с расширенными атрибутами и указателями экстента данных, но небольшой каталог может обойтись без того и другого, и поэтому у вас будет больше свободного места. LSerni 11 лет назад 0
Да, я проверял это, размер такой же (~ 160 байт). Спасибо за помощь. loadaverage 11 лет назад 0

Похожие вопросы