« 瑞典游记-别章-丹麦哥本哈根游记 Part VI | Blog首页 | Brother, My Cup Is Empty »
A little more about Solaris sparse file
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2005/08/a_little_more_a.html
之前关于Sparse File And Oracle temporary tablespaces 讨论了很多。链接:https://www.eygle.com/archives/2005/08/a_little_more_a.html
对于Solaris上的稀疏文件(sparse file),这里做一点进一步的研究。主要使用filestat工具。
首先创建一个稀疏文件:
# mkfile -n 2m eygle.dbf # ls -l eygle.dbf -rw------T 1 root dba 2097152 Aug 17 22:00 eygle.dbf # du -sk eygle.dbf 16 eygle.dbf |
使用filestat工具,我们注意到,Solaris对于这个稀疏文件共分配了32个512bytes的Block(0->15,7280->7295),也就是共16k大小。而其他extent都指向0-15,虽然extent map分配了,但是空间映像就只有32个device block,ls从inode看稀疏文件就得到了"虚假"的大小,而du -sk需要实际检查空间使用就能给出真正的空间占用。
我们通过filestat工具看一下文件空间的分配情况:
# filestat eygle.dbf Inodes per cyl group: 6016 Inodes per block: 64 Cylinder Group no: 0 Cylinder Group blk: 64 File System Block Size: 8192 Device block size: 512 Number of device blocks: 32 Start Block End Block Length (Device Blocks) ----------- ----------- ---------------------- 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 7280 -> 7295 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 0 -> 15 16 Number of extents: 256 Average extent size: 0 Blocks |
而经过cp以后,我们看到,空间立即分配,在Solaris下cp不会考虑稀疏文件,而GNU的Linux下CP命令具有天生的免疫力,可以识别稀疏文件。
# cp eygle.dbf eygle.dbf.bak # ls -l eygle* -rw------T 1 root dba 2097152 Aug 17 22:00 eygle.dbf -rw------- 1 root dba 2097152 Aug 17 22:02 eygle.dbf.bak # du -sk eygle* 16 eygle.dbf 2056 eygle.dbf.bak # filestat eygle.dbf.bak Inodes per cyl group: 6016 Inodes per block: 64 Cylinder Group no: 0 Cylinder Group blk: 64 File System Block Size: 8192 Device block size: 512 Number of device blocks: 4112 Start Block End Block Length (Device Blocks) ----------- ----------- ---------------------- 7312 -> 7423 112 8304 -> 8383 80 8992 -> 9327 336 1616 -> 1695 80 8384 -> 8479 96 35248 -> 36623 1376 36640 -> 36703 64 36720 -> 37231 512 37632 -> 39071 1440 Number of extents: 9 Average extent size: 456 Blocks |
不知道Linux上有否类似的工具?哪位熟悉Linux的请告知一下。
历史上的今天...
>> 2009-08-17文章:
>> 2006-08-17文章:
By eygle on 2005-08-17 22:22 | Comments (2) | System | 395 |
linux上有个stat命令可以看文件的一些存储状态,但是看不到extent map。
dumpe2fs可以看整个文件系统的详细的存储格式,但是不能针对单个文件。
好像网上也没搜到类似filestat的工具。
我也没找到,不过原理上大致是类似的。