我有一个外部硬盘,我使用 rsync 将其备份到另一个外部硬盘。
我最近更改了主硬盘上的大量文件名以匹配新格式。
如果我直接在备份磁盘上进行相同的文件名更改(我将使用脚本执行此操作),rsync 将如何进行?理想情况下,我希望它不要重新复制这些文件,因为可能有超过 1 TB 的文件已收到新文件名。
我猜测直接在备份磁盘上进行相同的文件名更改是最好的方法,但如果还有其他方法,我也想听听。
答案1
rsync
有很多命令行选项默认情况下,它会检查每个文件的修改时间戳和文件大小,如果两者匹配,它会假定该文件在源和目标上是相同的,并且不会再次传输该文件。通常,移动或重命名文件不会导致修改时间戳更新。因此,如果您在两个驱动器上以相同的方式移动文件,则修改时间戳应该不会更改,文件大小也不会更改,因此您应该能够继续使用正常的 rsync 过程,而无需重写所有文件。
但是,如果您的进程确实需要您写入文件,并且修改时间不再匹配,则可以指定标志-c
以指示rsync
改用校验和。rsync
将在每一侧执行校验和并比较这些校验和,而不是比较时间戳和文件大小。仅当校验和匹配时才会跳过文件。
-c, --checksum 这会改变 rsync 检查文件是否已更改以及是否需要传输的方式。如果没有此选项,rsync 将使用 lqquick checkrq(默认情况下)检查发送方和接收方之间每个文件的大小和上次修改时间是否匹配。此选项会将其更改为比较每个大小匹配的文件的 128 位校验和。生成校验和意味着双方将花费大量磁盘 I/O 来读取传输文件中的所有数据(这先于传输已更改文件的任何读取),因此这会大大降低速度。
答案2
当 rsync 将文件复制到目标服务器时,它不会更改正在复制的文件上的时间戳。因此,当您运行下一个 rsync 时,它会正确比较日期时间戳。
在所有情况下,根据您的备份方法,备份文件应始终具有与源文件相同的时间戳,或者略微更新。
Rsync 可防止较新的文件被较旧的文件覆盖。如果您正在同步并且目标的日期较新,则应该收到消息“[文件] 较新”。即使时间戳略有不同(在不同文件系统格式之间复制时可能会发生这种情况),只要备份文件具有相同的名称和相同的大小以及相同或较新的时间戳,就不会被覆盖。