您的位置:首页 > 其它

来【讨论】一下文件大小与所占block大小

2012-11-29 10:00 411 查看
dumpe2fs /dev/sda3|head -n 30

dumpe2fs 1.39 (29-May-2006)

Filesystem volume name: /

Block size: 4096

上面说明我的 /文件系统的block为4k

8.0K -rw------- 1 root root 3.9K Dec 17 22:08 anaconda-ks.cfg

4.0K -rw------- 1 root root 8 Jan 24 12:02 dead.letter

4.0K drwxr-xr-x 7 root root 4.0K May 11 16:38 demo

16K -rw-r--r-- 1 root root 12K Dec 17 22:08 install.log

8.0K -rw-r--r-- 1 root root 1.2K Dec 17 22:08 install.log.syslog

[root@xxx ~]# ll -s

total 40

8 -rw------- 1 root root 3981 Dec 17 22:08 anaconda-ks.cfg

4 -rw------- 1 root root 8 Jan 24 12:02 dead.letter

4 drwxr-xr-x 7 root root 4096 May 11 16:38 demo

16 -rw-r--r-- 1 root root 11568 Dec 17 22:08 install.log

8 -rw-r--r-- 1 root root 1191 Dec 17 22:08 install.log.syslog

如上图:目录文件所占的大小与block的大小一样,如demo这个目录所占用的为4K,一个block

为什么文件所占的大小,却远远小于block的大小,比如上图蓝色两行, install.log.syslog 只有1.2K, 而一个bock是4K,却用去了2个blok大小8K

据获知的资料,已查明,一个只有几个字节的文件,为何会在新建的时候占用了两个data block。

大家应该已知,新建文件所占用空间的大小,主要是看block size。那么如果一个文件的size并没有超出block size,理论上就只占用1个block。

而我在主帖中使用du -a后,看到一个小文件占用的2个block,其中一个是该文件的data block,另一个则是由于系统默认打开了SELinux而启用的extra block!

我做过几个测试,其中一个是当inode size为128时,du -a看到小文件占用的是两个block; inode size为256时,du -a看到的则只是占用了一个block,而且不管block size是多大,都如此。(想想看,如果一个data block size为4096时,一个几个字节的文件岂不是占用了8192的空间?呵呵,浪费啊)

而查到的资料也告诉我,这个现象,是因为系统启用SELinux时,128个bytes的inode不足以存储SELinux XATTR,所以需要一个单独的data block来存储这些SELinux XATTR。当然资料中提到的是xfs,不过放在ext3和ext4中也一样,这也解释了为何ext4默认建议为256个bytes的inode(因为对于未来系统可能会加入的SELinux, samba, beagle等软件,都需要使用自己的扩展属性)。

我也做过另一个测试以证明资料所述的正确与否:

把SELinux关了后重启,然后在inode为128个bytes的filesystem上建立小文件,du -a后果然发现这个文件只占用了1个block,文件夹也是。

至此,问题解决。

结论,以后最好使用mkfs.ext4来创建文件系统了,高效,省事
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐