如果我使用 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 磁盘检查。