这是我的做法:
rsync everything
enter maintenance
rsync changes since first rsync
leave maintenance
第一个 rsync 同步主要更改而不锁定系统。它可以运行很长时间,这很好。
但第二次 rsync 应该会尽快完成,通常不会发现任何变化或只发现一些变化。但由于文件数量太多,因此需要相当长的时间。
因为我知道我刚刚同步过它,所以我可以使用什么技巧吗?
下面是我使用的 rsync 标志:
rsync --partial --progress --delete --archive --verbose --compress --links --times
答案1
一些技巧:
- 当同步许多文件时,uid 到用户名的映射过程可能需要大量时间;因此,请尝试
--numeric-ids
在rsync
调用中添加该选项 find <path> > /dev/null
在维护之前安排一些时间rsync
;这将在两个节点上预加载元数据缓存,大大加快rsync
执行速度
答案2
通过 ssh 加速 rsync
您可以使用不同的多线程客户端,将您的工作分解为远程端 ssh 允许的和您指定的尽可能多的连接。
看一眼使用 LFTP 客户端及其镜像子系统通过 SFTP 进行 Rsync
您可以使用该--loop
选项继续同步(重新同步),直到没有任何变化。
我在多个系统上使用它,每小时将数据库备份和日志复制到远程目标。它非常快。你唯一的限制是带宽和允许在远程端同时进行身份验证的最大连接数,以及允许同时打开的最大文件数。
此方法也比 rsync+ssh 更安全,因为支持 Chroot SFTP。如果您愿意,则无需向客户端提供 shell。
答案3
我更喜欢在将系统置于维护状态之前添加第二个 rsync 步骤。如果第一步需要很长时间,那么第二个步骤可能需要几分钟/几小时才能将系统置于维护状态。那么最后一个步骤只需要几秒/几分钟,而不是几小时。