rsync备份策略如何避免同步损坏的文件?

rsync备份策略如何避免同步损坏的文件?

如果我使用 rsync 进行自动备份,如何避免它同步源已损坏的文件?

例如:

我已经/source/*.*定期自动同步到不同/destination/*.* 的物理磁盘。每次更新文件时,当 rsync 运行时,它会将更新的文件复制到目标。/source/destination

如何避免复制因硬盘故障而损坏的文件?显然我不希望将损坏的文件复制到备份驱动器。

有两种不同的模式可用于决定同步内容。

校验-c和开关,用于执行文件校验和。

-c, --checksum
      This changes the way rsync checks if the files have been changed
      and  are in need of a transfer.  Without this option, rsync uses
      a "quick check" that (by default) checks if each file’s size and
      time of last modification match between the sender and receiver.
      This option changes this to compare a 128-bit checksum for  each
      file  that  has a matching size.  Generating the checksums means
      that both sides will expend a lot of disk I/O  reading  all  the
      data  in  the  files  in  the transfer (and this is prior to any
      reading that will be done to transfer changed  files),  so  this
      can slow things down significantly.

-u开关标志:

-u, --update
  This  forces  rsync  to  skip  any  files  which  exist  on  the
  destination  and  have  a  modified  time that is newer than the
  source  file.   (If  an  existing   destination   file   has   a
  modification time equal to the source file’s, it will be updated
  if the sizes are different.)

在这种情况下显然-c不会有所需的行为。如果源文件损坏,它将具有不同的校验和并被复制到备份中。

我的假设是,这-u将完全符合我的要求。由于损坏的文件与备份驱动器上的版本具有相同的 mtime,因此如果源已损坏,则不会复制该文件。

我的问题是,使用-u此处复制文件是否是足够的备份策略?

或者,我应该考虑采用不同的方法或完全不同的工具吗?

答案1

无法识别已被“源头已损坏“。您可能能够做的是识别已写入一个或多个无法再读取的磁盘块的文件,但这只是符合您的条件的可能集合的子集。

正如您所建议的,-u( --update) 标志将指示rsync避免尝试读取和更新目标上具有较新修改时间的任何文件无论任何其他属性,或者具有相同的修改时间和大小。

更好的方法可能是用于rsnapshot将备份副本制作到 ext4 目标(不是 NTFS 或 FAT/exFAT),并用于smartctl对源实施 SMART 磁盘检查。

相关内容