来【讨论】一下文件大小与所占block大小
2012-11-29 10:00
519 查看
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来创建文件系统了,高效,省事
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来创建文件系统了,高效,省事
相关文章推荐
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 文件系统缓存里内存页的最小分配单元page size与I/O大小的最佳匹配关系讨论
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 请问一下,如何修改重做日志文件的大小?
- 讨论一下数据文件的存储位置
- 删除hdfs中大小为0的文件
- Android SD卡创建文件夹/文件 SD卡写入内容 SD卡删除文件 计算SD卡文件大小,Android6.0+权限
- linux 查看文件占用的大小
- linux下使用 du查看某个文件或目录占用磁盘空间的大小
- 【表空间支持的最大数据文件大小的算法】【数据库限制】【数据文件文件头保留数据块数】
- 从小到大列出文件/目录大小------du -a | sort -n
- 【札记】SUSE Linux(SLES 11为例)下常用维护命令,文件大小、查找内容、统计、打包、远程拷贝、FTP、SSH
- 调整Outlook 2010的pst文件大小
- 文件运行C++读书笔记之 文件与流 文件读写操作 通过指针获取文件大小
- 获取文件或是文件夹的大小和占用空间
- 很久没有定blog了,最近一段时间来讨论一下MAX SDK 吧
- SQL SERVER 2005 压缩日志及数据库文件大小
- 兼容ie6、ie7、ie8 和FF的本地上传图片预览,并客户端判断文件大小和文件格式