我有一个1TB的稀疏文件,其在Linux上存储实际的32MB数据.
是否有可能“有效”地制作一个包来存储稀疏文件?应该将软件包拆包成另一台计算机上的1TB稀疏文件.理想情况下,“包”应该在32MB左右.
然而,对于1TB稀疏文件,尽管焦油球可能很小,但是归档稀疏文件将需要太长的时间.
编辑1
我测试了tar和gzip,结果如下(注意这个稀疏文件包含0字节的数据).
$du -hs sparse-1
0 sparse-1
$ls -lha sparse-1
-rw-rw-r-- 1 user1 user1 1.0T 2012-11-03 11:17 sparse-1
$time tar cSf sparse-1.tar sparse-1
real 96m19.847s
user 22m3.314s
sys 52m32.272s
$time gzip sparse-1
real 200m18.714s
user 164m33.835s
sys 10m39.971s
$ls -lha sparse-1*
-rw-rw-r-- 1 user1 user1 1018M 2012-11-03 11:17 sparse-1.gz
-rw-rw-r-- 1 user1 user1 10K 2012-11-06 23:13 sparse-1.tar
包含0字节数据的1TB文件稀疏-1可以通过’tar’存档到10KB的tar球或通过gzip压缩到〜1GB的文件. gzip占用tar时间的2倍左右.
从比较来看,’tar’似乎比gzip好.
但是,对于包含0字节数据的稀疏文件,96分钟太长.
编辑2
rsync似乎完成了复制文件的时间比tar还要小于gzip:
$time rsync --sparse sparse-1 sparse-1-copy
real 124m46.321s
user 107m15.084s
sys 83m8.323s
$du -hs sparse-1-copy
4.0K sparse-1-copy
因此,对于这个非常稀疏的文件,tar cp或scp应该比直接rsync更快.
编辑3
感谢@mvp指出新的内核中的SEEK_HOLE功能. (我以前在2.6.32 Linux内核上工作).
在更新的内核和Fedora版本(17)上,tar和cp非常有效地处理稀疏文件.
[zma@office tmp]$ls -lh pmem-1
-rw-rw-r-- 1 zma zma 1.0T Nov 7 20:14 pmem-1
[zma@office tmp]$time tar cSf pmem-1.tar pmem-1
real 0m0.003s
user 0m0.003s
sys 0m0.000s
[zma@office tmp]$time cp pmem-1 pmem-1-copy
real 0m0.020s
user 0m0.000s
sys 0m0.003s
[zma@office tmp]$ls -lh pmem*
-rw-rw-r-- 1 zma zma 1.0T Nov 7 20:14 pmem-1
-rw-rw-r-- 1 zma zma 1.0T Nov 7 20:15 pmem-1-copy
-rw-rw-r-- 1 zma zma 10K Nov 7 20:15 pmem-1.tar
[zma@office tmp]$mkdir t
[zma@office tmp]$cd t
[zma@office t]$time tar xSf ../pmem-1.tar
real 0m0.003s
user 0m0.000s
sys 0m0.002s
[zma@office t]$ls -lha
total 8.0K
drwxrwxr-x 2 zma zma 4.0K Nov 7 20:16 .
drwxrwxrwt. 35 root root 4.0K Nov 7 20:16 ..
-rw-rw-r-- 1 zma zma 1.0T Nov 7 20:14 pmem-1
我使用的是3.6.5内核:
[zma@office t]$uname -a
Linux office.zhiqiangma.com 3.6.5-1.fc17.x86_64 #1 SMP Wed Oct 31 19:37:18 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux