rsync 使用 --delete-before 除非源为空

rsync 使用 --delete-before 除非源为空

我使用 rsync --delete-before cron 作业备份硬盘。问题是,如果源驱动器发生故障,则 rsync 会将其视为空,并从备份中删除所有内容 - 这正是您不希望发生的。我宁愿让 cron 作业运行一个脚本,该脚本仅在源不为空时运行 rsync 命令。是否可以获得编写脚本的帮助?

答案1

如果源驱动器发生故障,rsync则会中止。即使文件夹为空,唯一会继续的情况rsync是,当该文件夹是硬盘驱动器的挂载点,但该硬盘驱动器恰好未被挂载时。

当然,您可以编写一些脚本来检查驱动器是否已安装,但更直接的防范措施是不要使用安装点作为源rsync

相反,要么使用多个rsync命令备份挂载点下的每个文件夹,要么最好将该分区根目录的所有内容(您在挂载点中看到的文件和文件夹)移动到单个子文件夹。然后,您可以通过备份该子文件夹来备份所有内容。如果驱动器恰好未挂载,则子文件夹(的源rsync)将不存在,并且rsync不会继续(擦除您的目标)。

仍然可以很容易地在您想要的位置访问数据:使用符号链接。

答案2

您可以像这样指定源路径..
rsync [opts] /mnt/source/.somedirectory/../ /mnt/target/backup/
您可以选择任何已经存在的文件夹,并且永远不会删除

如果未安装源,则子目录将不存在(除非其他东西将其放在那里),操作将失败,因为它无法访问部分路径。(希望行为永远不会改变 - 你应该验证它,你可以将它与检查它是否已安装结合起来,但这有一个竞争条件。)

从理论上讲,一旦 rsync 将目录更改为该目录,就不可能卸载,但我不确定如果它在运行时消失会怎样,很可能会出错。无论如何,应该至少有两个源副本。

相关内容