备份 – 分块大型rsync传输?

我们使用rsync将主文件服务器的镜像更新为异地共置备份服务器.我们目前遇到的一个问题是我们的文件服务器有> 1TB的大多数较小的文件(在10-100kb范围内),当我们传输这么多数据时,我们经常最终将连接丢弃几个小时进入传输. Rsync没有恢复/重试功能,它只是重新连接到服务器以从它停止的地方拾取 – 你需要经历文件比较过程,最终与我们拥有的文件数量相当长.

建议解决解决方案是将大型rsync传输拆分为一系列较小的传输.我认为最好的方法是通过顶级目录名的第一个字母,这不会给我们一个完美均匀的分布,但是足够好.

我想确认一下这样做的方法是否合理,或者是否有更简单的方法来实现目标.

为此,我遍历A-Z,a-z,0-9以选择一个字符$前缀.最初我在考虑跑步

rsync -av --delete --delete-excluded --exclude "*.mp3" "src/$prefix*" dest/

(–exclude“* .mp3”只是一个例子,因为我们有一个更长的排除列表来删除像临时文件这样的东西)

这样做的问题是,strc中不再存在的dest /中的任何顶级目录都不会被–de​​lete接收.为了解决这个问题,我改为尝试以下方法

rsync \
--filter 'S /$prefix*' \
--filter 'R /$prefix*' \
--filter 'H /*' \
--filter 'P /*' \
-av --delete --delete-excluded --exclude "*.mp3" src/ dest/

我正在使用show并隐藏include和exclude,否则–delete-excluded将删除任何与$prefix不匹配的内容.

这是将rsync分成较小块的最有效方法吗?是否有更有效的工具,或者我错过的旗帜,这可能会使这更简单?

解决方法

我对此的解决方案是一种不同的两遍方法,在这里我可以权衡一些磁盘空间.我在服务器上执行rsync –only-write-batch,然后将批处理文件本身rsync到目标,循环直到rsync成功.批处理完全通过rsync后,目标上的read-batch重新创建所有更改.

这对我来说也有一些意想不到的好处:

>因为我更担心备份“存在”而不是“可用”我实际上并不是每天都在接收端进行读取批处理 – 大多数情况下批处理相对较小>我一直在尝试使用–checksum-seed = 1 ……我可能会错误地阅读文档,但我认为它使批处理文件更具可同步性(即,当我不执行–read-batch时任何一天,第二天的批次同步更快,因为前一天的批次是一个很好的基础)>如果批次太大而无法通过互联网“及时”发送,我可以在外部驱动器上运行它.我及时的意思是,如果我在第二天的备份开始之前无法完成批处理并阅读.>虽然我不亲自这样做,但我可以在不同的位置进行两次异地备份,并将批次发送给它们.

相关文章

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