我不明白为什么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
“controllers”是一个目录,块大小为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_信息:
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
大小为 78 字节,因为目录几乎为空。我说的“目录”是指该文件夹的直接后代内容,即,如果你有
.../controllers/
Class1/Whatever
/Resources...
Class2/Whatever
/Resources...
那么“控制器”只有三个条目(..,Class1 和 Class2。我不知道..是否或如何实际存储)。
即使在磁盘上,目录也会占用一整个块,因此 4K(但请参见下文...)目录逻辑大小仍然是 78 个字节,并且在许多方面它被视为一个文件(XFS 白皮书将其称为目录文件)。如果您在 下立即创建一个新对象controllers
,我预计该大小会增加。
此外,可以存储非常小的目录内部 inode,从而占用零个实际区块:
非常小的文件
大多数符号链接和目录文件是小文件。XFS 允许这些文件存储在 inode 中以提高性能。XFS 还使用延迟写入来等待收集缓冲区缓存中的整个小文件,然后再写入磁盘……
总结一下,据我所知,你可以
- 小目录文件存储在 inode 中(“简短目录"),占用零块,以数组形式组织。
- 合理的目录文件存储在占用一个块的物理文件中(“块目录“)
- 大型目录文件存储在物理文件中,占用一个块的整数倍,并且采用 B 树结构以提高速度。
测试
在我的 Linux 系统上,XFS inode 中目录文件的可用空间似乎约为 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