在Ubuntu上,发现大部分目录大小都是4096,不论目录包含内容多少,即使空的
在这里插入图片描述

这里有解释,这里记录一下实验。
一般情况下,HDD磁盘最小的管理单位是扇区(Sector,也叫Unit或者Block),扇区的大小是512Bytes,但Linux一次I/O是8个扇区即4096Bytes,因此Linux(准确的说是ext2/ext3等文件系统)存取文件的最小单位即使4096Bytes(=8个Blocks)(Windows的NTFS好像是1K即2个Blocks)。

而目录是特殊文件,OS初始分配8个Blocks,且size也即是4096Bytes,这与普通文件(Regular file)不同,普通文件的size是给予文件内容计算的,但是实际占用的磁盘空间总是是4096的倍数。

在这里插入图片描述

可以看出,空目录,目录的大小也是4096。

在这里插入图片描述

创建了1000个文件后,目录占用64个Blocks(32768Bytes),大小28672,得出2点结论:
1,目录的大小随着目录内容变动
2,目录的大小并不总是等于目录占用磁盘空间(本例是64个Blocks)的大小

在这里插入图片描述

目录的size增大后,即使目录内容清空,目录大小以及所占磁盘空间并不相应减小。

来看看普通文件怎么样

在这里插入图片描述

空文件大小为0,磁盘空间为0。
文件只包含一个字符(1Byte),大小为1Bytes,磁盘占用8Blocks。

在这里插入图片描述

字符增加到4096个,size变为4096,磁盘占用任然是8Blocks。

在这里插入图片描述

在增加一个字符,size变为4097,而磁盘占用变为16个Blocks了。

在这里插入图片描述

文件内容缩小,size变小,占用空间也变小了。

上面只是在ext2/ext3上实验的,而不同的文件系统表现是不一样的,比如这里解释

而现在支持AF的磁盘扇区大小已是4096Bytes了,因为扇区之前间隔空间,所以理论上磁盘空间浪费减少了,而且正好与现行的I/O Block相等,所以应用程序如果以4096为单位读写的话,应该是性能最优的。有一点注意,支持AF的磁盘分区在现行Linux安装过程容易造成分区开始不对齐,而这会导致读写性能下降(我理解是,本来只要一个I/O,由于没对齐,跨扇区,导致多个I/O),这里有解释

在这里插入图片描述

Logo

更多推荐