我得到了一个 1TB 的稀疏文件,它在 Linux 上实际存储了 32MB 数据。
是否可以“有效地”制作一个包来存储稀疏文件?该软件包应在另一台计算机上解压缩为 1TB 稀疏文件。理想情况下,“包”应该在 32MB 左右。
注意:可能的解决方案是使用“tar”:https ://wiki.archlinux.org/index.php/Sparse_file#Archiving_with_.60tar.27
但是,对于 1TB 的稀疏文件,虽然 tar 球可能很小,但归档稀疏文件会花费很长时间。
编辑 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 文件 sparse-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
orscp
应该比直接更快。rsync
编辑 3
感谢@mvp 指出较新内核中的 SEEK_HOLE 功能。(我以前在 2.6.32 Linux 内核上工作)。
注意:bsdtar 版本 >=3.0.4 是必需的(在这里查看:http ://ask.fclose.com/4/how-to-efficiently-archive-a-very-large-sparse-file?show=299#c299 )。
在较新的内核和 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