我已经通过 rsync (v3.0.6) 备份服务器一段时间了。我注意到仅获取增量文件列表就需要大约 20 分钟(我使用的是整个文件标志)。我排除了三个文件,如果将它们取出,只需一秒钟即可开始同步。只有 319 个文件(如果算上跳过的目录则为 689 个)。有什么想法或想法吗?模式匹配不应该这么慢吗?
rsync -vvnWr --exclude='aaa.tar.gz' --exclude='bbb.tar.gz' -exclude='ccc.tar.gz' --include='*.tar.gz' --exclude='*' --delete -e "ssh -p 34577 -i /root/.ssh/backup_rsa" [email protected]:/backup/cpbackup/daily/ /backup/jarvis/cpanel/$((($(date +\%-d)-1)/7+1))/*
样本输出
[sender] showing file ddd.tar.gz because of pattern *.tar.gz
[sender] showing file eee.tar.gz because of pattern *.tar.gz
[sender] hiding directory fff.0 because of pattern *
[sender] showing file ggg.tar.gz because of pattern *.tar.gz
...
输出与我们的不排除相同,显然它跳过了我列出的输出。由于排除,每一项之间都会有很长的停顿。我改变了IP和文件名。
谢谢!
答案1
我刚刚想通了,一定是需要睡觉了。我在排除中缺少一个连字符。它一定将其作为附加参数读取,而不会导致任何语法错误,而 -c 校验和标志可能是导致其速度变慢的原因。
感谢大家的阅读!
答案2
速度如此之慢的主要原因是您已经禁用了大部分rsync
必须提供的优化。您几乎处于每次运行时复制所有包含的文件的阶段。
为什么?你是强制--whole-file
而不是允许rsync
产生差异。您也不会使用-t
或复制时间戳-a
,因此rsync
必须读取本地和远程系统上的每个文件以确定校验和是否匹配。
试试这个
rsync --dry-run -vvtr \
--exclude='aaa.tar.gz' --exclude='bbb.tar.gz' -exclude='ccc.tar.gz' --include='*.tar.gz' --exclude='*' \
--delete --delete-during \
-e "ssh -p 34577 -i /root/.ssh/backup_rsa" \
[email protected]:/backup/cpbackup/daily/ \
/backup/jarvis/cpanel/$((($(date +\%-d)-1)/7+1))/