我正在尝试更高效地处理稀疏文件。我已经阅读了较新的 Linux 内核中的 SEEK_HOLE 功能。根据其他人的说法,这应该在内核版本 3.1 及更高版本中。
但是,如下所示,它还必须有其他东西。我在内核 3.2+ 上,使用稀疏文件仍然很慢。
对这个(完全空的)稀疏文件执行“cp”或“tar”应该不到 1 秒。
知道我缺少什么吗?如何检查是否支持/激活 SEEK_HOLE?
他们在这里讨论同样的事情,但由于某种原因,我不能在那里发表评论说它不起作用:
(root@r1)-(/nbd/test)# uname -a
Linux r1.exice.com 3.2.0-33-generic #52-Ubuntu SMP Thu Oct 18 16:29:15 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
(root@r1)-(/nbd/test)# dd if=/dev/zero of=10g.img seek=10G bs=1 count=1
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.000271811 s, 3.7 kB/s
(root@r1)-(/nbd/test)# time cp 10g.img new.img
real 0m15.370s
user 0m1.544s
sys 0m13.405s
(root@r1)-(/nbd/test)# time bsdtar cvfz new.tar.gz 10g.img
a 10g.img
real 1m59.898s
user 1m43.938s
sys 0m15.769s
(root@r1)-(/nbd/test)# time tar cvfz new2.tar.gz 10g.img
10g.img
real 1m58.584s
user 1m51.275s
sys 0m30.382s