linux – rsync挂在一个大文件上

每天晚上我都会使用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.
当运行本地复制时,一旦停止,我还有一个100%的cpu核心和零磁盘活动.

我找到的唯一例外是当我将此文件rsync到新位置时(即目标文件不存在).所以我怀疑这个问题与旧数据和新数据之间的比较有关.

我使用–inplace来限制对目标磁盘的写入,因为每次备份后都会使用快照.所以这个选项是一个要求,也是rsync,除非我发现一个工具只能更新这些文件的更改部分.

解决方法

众所周知,rsync在大型文件上存在这种问题,因为内部哈希缓冲区的算法效率低下.

您必须使用具有较大值的–block-size选项.但是当前版本不允许使用超过128 kB.一些网页告诉使用–block-size = 10485760 –protocol = 29但在我的情况下它被rsync拒绝.

>使用29或更早版本>或修改MAX_BLOCK_SIZE常量后重新编译

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...