每天晚上,我都会将几个带有 rsync 的虚拟磁盘从一台 Linux Debian 计算机复制到另一台 Linux Debian。
大多数文件都是带有“漏洞”的原始图像:有些部分从未被写入,因此在磁盘上保持未分配。
rsync 挂在一个文件上,总是一样的。每次传输 50 Gb 后都会发生挂起。我不确定这是否总是在同一点,但ls -sh
显示 50 Gb。
这是一个包含 151 Gb 的 800 Gb 文件(因此 649 Gb 未分配)。其他一些虚拟磁盘也有类似的数字,并且 rsync 在它们上运行良好。
如果我使用 rsync 在本地更新文件,而不涉及任何网络,我将有完全相同的行为(使用--no-whole-file
,这是一个要求,请参见下文)。
一旦 rsync 停止,它会使用一个 CPU 核心到 100% 并且在接收端使用零磁盘活动(这是一个拉取请求,因此从这一端运行 rsync)以及在发送端使用零 CPU 和零磁盘。
我让它运行了几个小时。
Ctrl+c立即停止 rsync。
当运行到本地复制时,一旦停止,我也有一个 CPU 核心达到 100% 并且磁盘活动为零。
我发现的唯一例外是当我将此文件同步到新位置时(即目标文件不存在)。所以我怀疑这个问题与新旧数据的比较有关。
我--inplace
用来限制对目标磁盘的写入,因为每次备份后都会使用快照。所以这个选项是必需的,rsync 也是必需的,除非我发现一个工具能够只更新这些文件的更改部分。
由于内部哈希缓冲区的算法效率低下,rsync 在大文件上会出现这种问题。
您必须使用
--block-size
具有较大价值的选项。但是当前版本不允许使用超过 128 kB。有些网页告诉使用--block-size=10485760 --protocol=29
,但在我的情况下,它被 rsync 拒绝。查看针对 rsync 的错误报告。可能会提交一个新的。您可以从https://rsync.samba.org/bugzilla.html找到这些
无论是在此处还是在错误报告中,您都应该提供更多细节。每一端的 rsync 版本是什么,你的操作系统是什么,你使用的是什么命令?文件和/或 rsync 传输是否已压缩?用什么zlib版本?
https://bugzilla.samba.org/show_bug.cgi?id=10518和https://bugzilla.samba.org/show_bug.cgi?id=10372可能是相关的。另见http://www.anchor.com.au/blog/2013/08/out-tridging-tridge/