1

Я не могу понять, почему 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

Размер составляет 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .