我有一个 rsync 设置为每天早上 5 点运行。
sudo rsync -xrltDu --delete /home/mirthen/ /long/backup/folder/name/
它在大多数情况下都有效,但是当源系统上的文件发生更改时,它偶尔会挂起并且永远不会完成。例如,.mozilla 包含我的 Firefox 设置,并且可以在 rsync 运行并构建其文件列表以供复制时更改文件、删除文件、添加新文件。
我通常会收到有关文件消失的消息,这很好,因为在大多数情况下它们都是临时文件。从来没有任何实际错误让我知道为什么 rsync 永远无法完成其复制/备份。它会运行,可能会弹出有关文件消失的消息,可能有 10 多个这样的消息,然后就在那里占用一点 CPU/内存。然后第二天早上 5 点,我又让另一组 rsync 进程再次运行,同样的事情发生了。
我已经使用相同的命令运行了完整的 rsync,并且系统正在执行所有文件更改,并且完成得很好。只有很大一部分时间它会挂起,但我不知道为什么。
有什么方法可以让它在实时系统上进行备份而不会挂断,这是我所缺少的。我之前确实将其设置为“rsync -au --delete ....”,但是将其通过网络移动到具有不同用户的系统时,我想跳过它,尝试保留组/用户设置。
当然,除了 mozilla 文件夹在 rsync 期间发生变化之外,还有很多其他进程在任何给定时间运行,并且在凌晨 5 点不断发生变化。
如果重要的话,Linux Mint KDE 17.2 64 位。目标是 Ubuntu Server 14.04 64 位
答案1
这恰当的在实时系统上进行备份的方法是使用文件系统的快照(我并不是说快照是备份,我的意思是它可以用来保存文件而不移动任何东西)。如果您有 BTRFS、LVM 或 ZFS,则可以轻松实现这一点,但否则不切实际。
或者,最好的方法是简单地忽略经常更改的文件 - 通常它们不包含有价值的数据。我的备份故意跳过浏览器的缓存目录。rsync
有--exclude
可以很容易地实现这一点的选项。
诊断挂起时正在执行的操作的最佳方法rsync
是附加strace
:
strace -p `pgrep rsync`
根据您的操作系统,您可能会发现权限被拒绝。在 Linux 上,通常的解决方案是启用调试权限:
sudo sh -c "echo 0 > /proc/sys/kernel/yama/ptrace_scope"
我认为该设置仅适用于新的以新设置启动的进程,因此您应该在 rsync 任务启动之前设置它。该设置在重新启动后不会保留。一旦你弄清楚发生了什么,你应该设置ptrace_scope
回1
,因为这是一个安全风险(1
意味着你只能将调试器附加到子进程,就像调试器通常会做的那样)。
答案2
检查以确保 中没有/long/backup/folder/name
安装任何文件夹/home/mirthen
。您可能会陷入递归循环!