在 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
Run Code Online (Sandbox Code Playgroud)
然后触摸一堆文件:
[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
Run Code Online (Sandbox Code Playgroud)
然后删除文件:
[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
Run Code Online (Sandbox Code Playgroud)
我的问题是:
您看到的块增量是由于文件系统管理其文件存储和相关文件管理信息的方式造成的。在您描述的情况下,这似乎是 4K 的增量,因此文件系统中的每个“新”/“唯一”条目都将保留 4K,无论实际数据大小是否填满整个 4K。如果相关数据占用了整个4K,则根据需要保留并填充另一个4K块来存储整个相关数据流/序列。
根据文件系统管理的“硬”删除与“软”删除,删除可能不会(通常不适用于“取消删除”功能)立即释放保留的块。一些文件系统可以区分不同类型的“删除”并提供相应的存储块管理能力。
存储管理的处理和实现方式因文件系统而异,因此在支持多个/模块化文件系统的操作系统中,操作系统通常只提供“钩子”供文件系统集成。
归档时间: |
|
查看次数: |
3246 次 |
最近记录: |