linux - 我需要什么才能让 SEEK_HOLE 处理稀疏文件?

标签 linux file sparse-file

我正在尝试更高效地处理稀疏文件。我已经阅读了较新的 Linux 内核中的 SEEK_HOLE 功能。根据其他人的说法,这应该在内核版本 3.1 及更高版本中。

然而,正如下面所见,它肯定还有其他原因。 我在内核 3.2+ 上使用稀疏文件仍然很慢。

在这个(完全空的)稀疏文件上执行“cp”或“tar”应该不到 1 秒。

知道我错过了什么吗?如何检查 SEEK_HOLE 是否受支持/已激活?

他们在这里讨论同样的事情,但出于某种原因我不能在那里发表评论说它不起作用:

Copying a 1TB sparse file

(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

最佳答案

确保您使用的工具支持SEEK_HOLE

bsdtar >=3.0.4

cp >=8.13

还要确保您运行的文件系统支持它。适用于 ext4。不适用于 reiserfs。

关于linux - 我需要什么才能让 SEEK_HOLE 处理稀疏文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319117/

相关文章:

go - 在 GO 中获取实际文件大小与表观大小

c - 处理 TCP PSH

java - 在 Junit 测试中找不到符号失败

c++ - 在删除文件之前检查文件是否仍在被另一个进程使用(c、c++、linux)

C 二进制读写文件

linux - Linux 内核为什么以及如何为 coredump 创建稀疏文件?

linux - 如何将结果 "!find ..."命令重定向到放置 lftp 命令

linux - 无法通过 HTTPS 在 Linux 上克隆 github 存储库

linux - 如何在unix中修改同一个文件?