我有一个本地服务器,它是从 LAN 上的一些计算机进行 Rsync 的。它是备份解决方案的一部分。
该 Rsync 通过 cronjob 每天运行两次。有时,人们会添加大量数据,例如 TB 左右。当发生这种情况时,无法保证 Rsync 会在第二个 Rsync 启动之前完成。
在这种情况下会发生什么?
这是应该避免的事情吗?
答案1
如果我担心一个 cronjob 在另一个 cronjob 完成之前启动,我通常会在/tmp
(如/tmp/lockFile_$$
)下创建一个临时文件,该文件作为第一个 cronjob 中的最后一步被删除,然后让第二个 cronjob 以该文件存在的循环开始,在每个循环中休眠 5-10 秒,一旦文件消失就中断循环(可能每隔多次迭代就向 root 发送一封电子邮件,这样您就可以更容易地注意到停滞的作业)。
如果第一个的瓶颈是网络带宽,您可以尝试使用rsync--compress
和选项。--compress-level
如果阻塞点是CPU,你可以尝试给rsync进程一个较低的nice值
如果iowait
时机成熟,您可以考虑ionice
在 Linux 上使用 cfq,或者将 rsync 命令拆分为多个并发进程,以便一个进程可以等待 I/O,而另一个进程可以进行传输,而不是串行进行。大多数平台还允许您调整 I/O 功能。在 Linux 上,在第一个 cronjob 期间,您可能会考虑暂时切换到deadline
调度程序(以优先考虑读取而不是写入)并暂时增加 ,read_ahead_kb
因为您要从磁盘提取整个大文件。