rsync --sparse 每隔几秒停止一次

rsync --sparse 每隔几秒停止一次
$ rsync -aPhmS /mnt/data/ /mnt/data1/

今天在复制一些数据时遇到了一个奇怪的问题。

使用 时--sparse,标志 rsync 的执行速度比预期慢得多:

time rsync --sparse

real    4m8.791s
user    0m23.558s
sys     2m43.257s

time rsync(无-s)

real    2m32.607s
user    0m39.175s
sys     1m33.885s

time cp

real    2m31.811s
user    0m0.254s
sys     0m52.627s

监控进度,每隔几秒它就会停止写入,传输速度降至 0。 iostat报告设备利用率约为 50-60%(与上面的时间相符 - 较快的时间约为较慢的 50%)。

为什么会出现这种情况?

是否有针对此性能问题的修复或解决方法? (除了没有 -S 之外。该标志之所以存在,是因为某些数据包含稀疏文件。)

我可以想象一个零碎的解决方案 - 以某种方式检测所有稀疏文件,列出所有非稀疏文件和所有稀疏文件的列表,并在这些列表中运行 rsync 两次。 (但我对 Linux 很陌生,所以这样的脚本远远超出了我的能力。)

rsync 版本 3.2.7 协议版本 31

答案1

--sparse带有for 标志的事情rsync是,它将需要分析它想要复制的任何文件(不仅仅是稀疏文件),以查看是否可以在目标中创建稀疏文件。

这是一个例子。我创建了一个 1GB 的文件不是疏。

$ dd if=/dev/zero of=bigfile bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.65238 s, 1.6 GB/s
$ ls -lsh bigfile
1.0G -rw-r--r-- 1 root root 1.0G May 28 17:18 bigfile

现在请注意,如果我使用 复制此文件rsync --sparse,则目标将要即使来源不是稀疏的。

$ time -p rsync --sparse bigfile bigfile.sparse
real 2.88
user 4.19
sys 0.56
$ ls -lsh bigfile.sparse
0 -rw-r--r-- 1 root root 1.0G May 28 17:19 bigfile.sparse

这意味着rsync需要分析该文件以找出如何“稀疏”它。它需要搜索目的地上可能“稀疏”的空白空间块。这需要额外的计算时间。

顺便说一句,即使对于已经稀疏的文件,它也会执行相同的操作。它将需要读取整个“提取的”源文件,进行相同的分析,然后根据所做的分析在目的地创建一个新的稀疏文件。

相关内容