当磁盘意外卸载时阻止 rsync 删除大量数据

当磁盘意外卸载时阻止 rsync 删除大量数据

我使用 rsync 将我的硬盘镜像到几个带有 cron 的设备上。

该命令本质上是这样的:

rsync -avr --delete /home/username [email protected]:/home/username

我遇到的问题是,结构中的某些目录位于不同的驱动器上。例如,/home/username/portable 是一个 USB 棒。因此,如果在卸载文件系统时运行 cron 作业,则会从镜像中删除大量数据,然后在下次安装驱动器时需要重新复制这些数据。这很耗时,当然,我认为当我需要从镜像中恢复时,我会在发生这种情况后立即进行!

有人能建议一个解决这个问题的好方法吗?我认为有两种可能的方法,一种是

  1. 通过 grep df 或类似命令安装该设备;或者
  2. 通过运行 du /home/username/portable 或类似命令,目标目录没有内容。

虽然这些可能是处理此问题的正确方法,但每次向文件系统添加新的挂载点时都需要手动调整,这对我的懒惰观点来说并不具有吸引力。

我特别想知道的是,是否有一种方法可以让 rsync 通过运行 --delete 来测试要从远程驱动器中删除多少数据?这样,如果要删除的数据超过 1GB,就可以调整 cron 脚本以要求手动参与。因此,它可以提供针对大规模意外数据丢失的健全性检查。

我查看了手册,但找不到直接的方法。有人能帮忙吗?

谢谢!

答案1

DYI 解决方案。

您可以使用第一个来运行所需的 rsync ,观察/计数单词“删除”,然后根据计数评估--dry-run决定是否继续 rsync 。--dry-run

带有过程的示例。

$ export DELETE_THRESHOLD=105; delete_count=$(for i in {1..103}; do echo "simulation od rsync output [deleting] word present ..."; done | grep -c "deleting"); if [ "$delete_count" -gt "$DELETE_THRESHOLD" ]; then echo "Stop! Delete count exceeds threshold."; else echo "Do the rsync without --dry-run."; fi

输出

Do the rsync without --dry-run.

带有停止的示例。

export DELETE_THRESHOLD=100; delete_count=$(for i in {1..103}; do echo "simulation od rsync output [deleting] word present ..."; done | grep -c "deleting"); if [ "$delete_count" -gt "$DELETE_THRESHOLD" ]; then echo "Stop! Delete count exceeds threshold."; else echo "Do the rsync without --dry-run."; fi

输出

Stop! Delete count exceeds threshold.

相关内容