Linux目录大小/块计数的单调增长

Linux上,(可能是文件系统块大小的函数),当我创建一个目录并对其进行统计时,它返回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的功能
>可以在不删除和重新创建目录的情况下减小目录大小吗?
>加分点:指向实现此行为的内核源代码.

解决方法

以下是ext2 / ext3 / ext4的答案.如果它们适用于其他文件系统,则取决于它们的实现.

> user48838正确回答了这个问题.更多文件消耗更多元数据.它们以4k块或文件系统创建时定义的任何其他大小分配
>是的,它是真实文件系统的功能/问题
>在ext3文件系统中,这是不可能的.只能通过重新创建(空)目录
>源代码大约是here并在相关文件

但你有运气.重新创建已删除的相同数量文件时,目录大小将保持不变.只有当您添加更多文件时,它才会增加.

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...