在Linux上(可能是文件系统块大小的函数),当我创建目录并stat
返回目录时,它返回的大小为4096。我可以在该目录中创建文件,直到一定程度,而不会增加文件的大小。目录(由报告stat
)。
在某个时刻,由于目录中充满了许多文件,因此目录大小膨胀(我不是在谈论目录的内容,而是在讨论用来代表目录本身的块)。如果删除文件,则目录大小保持不变。
这是一个简单的示例:
[root@uxlabtest:/]$ mkdir test
[root@uxlabtest:/]$ stat test
File: `test'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:04.000000000 -0400
Change: 2011-07-26 14:06:04.000000000 -0400
然后触摸一堆文件:
[root@uxlabtest:/]$ for i in `seq 1 10000`; do touch /test/$i; done
[root@uxlabtest:/]$ stat test
File: `test'
Size: 155648 Blocks: 312 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:56.000000000 -0400
Change: 2011-07-26 14:06:56.000000000 -0400
然后删除文件:
[root@uxlabtest:/]$ rm -rf /test/*
[root@uxlabtest:/]$ stat test
File: `test'
Size: 155648 Blocks: 312 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:07:11.000000000 -0400
Modify: 2011-07-26 14:07:12.000000000 -0400
Change: 2011-07-26 14:07:12.000000000 -0400
我的问题是:
- 为什么目录的大小/块数单调增加?
- 这是基础文件系统还是Linux VFS的功能?
- 是否可以在不删除和重新创建目录的情况下减小目录大小?
- 优点:将我指向实现此行为的内核源代码。