我使用 rsync 将笔记本电脑中的本地 ext3 硬盘增量备份到通过 USB 连接到笔记本电脑的 ext4 硬盘上。我假设 rsync 将这两个硬盘都视为本地硬盘,因此我想知道 rsync 是否会对复制的文件执行任何类型的验证。
查看手册页似乎确实如此(“请注意,rsync 始终通过检查在文件传输时生成的整个文件校验和来验证每个传输的文件是否在接收端正确重建,但传输后自动验证与此选项在传输前的“此文件是否需要更新?”检查无关。”),但这与StackExchange。所以我想知道我是否需要自己进行验证?如果需要,我应该在实际执行 rsync 之后使用diff
还是?rsync -c
据我所知,rsync 执行的验证只是对文件传输的验证,而不是对文件写入磁盘的验证。据我所知,对文件写入磁盘的验证由底层驱动程序/文件系统负责。这足够安全吗?ext4 是否能够检测并警告写入是否出错?rsync 会报告吗?
由于这更多的是关于数据验证和可能的数据损坏的问题,我插入了更多标签,以帮助合适的人阅读我的帖子。我还尝试对问题本身进行一些扩展。
答案1
这够安全吗?
我认为是的。如果您想rsync
进行检查,则需要rsync -c
在复制后运行,以便使用进行一些额外的验证rsync
。或者对文件使用 md5sum。
如果写入出现错误,ext4 能否检测并发出警告?
是的。我们讨论的是驱动程序和文件系统,因此其中任何一个错误都会导致退出代码。当然,这里有一个最坏的情况:如果驱动程序/文件系统有故障,退出代码可能会被错误地发送为正确的。我不会假设这是正确的,我会使用像 md5sum 这样的工具来自己检查结果。
rsync 会报告吗?
一旦接收端出现错误,也会如此rsync
。
答案2
您提到的手册页部分与 -c 选项有关。正如手册开头所读到的
Rsync 使用 lqquick checkrq 算法(默认情况下)查找需要传输的文件,该算法查找大小或上次修改时间已更改的文件。当快速检查表明文件的数据不需要更新时,将直接在目标文件上执行其他保留属性(根据选项的要求)中的任何更改。
使用 -c 选项,它会检查两个文件的大小是否相同,如果是,则检查两个文件的校验和。
rsync 还会通过网络(而不是磁盘)验证文件的传输。如果您想确保数据未损坏,可以使用 md5sum 之类的实用程序。
附注:我认为此过程不符合“增量备份”的条件,因为增量备份会将与早期备份的差异存储到系统中。我认为“增量传输”更合适。