赞
踩
在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),这里有解释
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。