$ dd if=/dev/zero of=fs.img bs=1M seek=1024 count=0
0+0 records in
0+0 records out
$ ls -lh fs.img
-rw-rw-r-- 1 zhigang zhigang 1.0G Feb 5 19:50 fs.img
$ du -sh fs.img
0 fs.img
$ dd if=/dev/zero of=file count=100 bs=1M seek=400
100+0 records in
100+0 records out
$ time cp --sparse=always file file.sparse
real 0m0.626s
user 0m0.205s
sys 0m0.390s
$ time tar cSf - file | (cd /tmp; tar xpSf -)
real 0m2.732s
user 0m1.706s
sys 0m0.915s
$ time find file |cpio -pdmuv --sparse /tmp
/tmp/file
1024000 blocks
real 0m2.763s
user 0m1.793s
sys 0m0.946s
Linux对稀疏(Sparse)文件的支持
稀疏(Sparse)文件可以节省大量的磁盘空间,目前很多文件系统都支持。下面介绍了Linux对稀疏(Sparse)文件的支持。
稀疏(Sparse)文件的创建
$ cat sparse.c #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(int argc, char *argv[]) { int fd = open("sparse.file", O_RDWR|O_CREAT); lseek(fd, 1024, SEEK_CUR); write(fd, "\0", 1); return 0; } $ gcc -o sparse sparse.c $ ./sparse $ ls -l sparse.file -r-x--x--- 1 zhigang zhigang 1025 Feb 5 23:12 sparse.file $ du sparse.file 4 sparse.file$ cat sparse.py #!/usr/bin/env python f = open('fs.img', 'w') f.seek(1023) f.write('\n') $ python sparse.py $ ls -l fs.img -rw-rw-r-- 1 zhigang zhigang 1024 Feb 5 20:15 fs.img $ du fs.img 4 fs.img文件稀疏化(sparsify)
下面的方法都可以将一个文件稀疏化。
文件稀疏化(sparsify)效率比较
下面我们创建一个500M的稀疏文件,比较一下几种文件稀疏化方法的效率。 由此可见,上面几种文件稀疏化的方法中,cp的效率最高;tar和cpio由于使用管道,效率下降。使EXT2/EXT3文件系统稀疏化(sparsify)
如何是一个文件系统的映像文件稀疏化?Ron Yorston为大家提供了几种方法,我觉得下面的方法最简单:EXT2/EXT3文件系统的sparse_super参数
这个参数与EXT2/EXT3是否支持Sparse文件无关;当打开该参数时,文件系统将使用更少的超级块(Super block)备份,以节省空间。
如下的命令可以查看该参数: 或者: 可以通过使用: 或者: 来设置该参数。参考资料
Categories
Feeds
Tags
Copyright © 2012 Zhigang Wang. Some right reserved.
The views expressed on this web site are my own and do not necessarily reflect the views of Oracle.