rsync 到 USB 闪存驱动器始终传输所有数据

rsync 到 USB 闪存驱动器始终传输所有数据

rsync将目录写入新插入的外部 USB 闪存驱动器时,通过

rsync -av /source/ /dest/

尽管文件没有更改,但所有文件都会被传输(即重写)。

请注意,仅在拔下并重新插入 USB 后才会覆盖文件。连续执行该rsync命令两次而不拔掉中间的驱动器确实可以成功跳过整个目录内容。

包含-u更新选项并显式添加该-t选项不会改变任何内容。

挂载点保持不变(即/media/user/<UUID>驱动器由自动安装xfce/dev/sdxy明显变化)硬盘源为ext4,而 USBvfatutf8字符编码。

造成此行为的原因是什么?是/dev/名称条目的更改吗?如何rsync正确识别文件更改来运行?如果没有这个,我的备份应该只需要几秒钟,而现在由于大量数据被重复覆盖,它总是需要几分钟,而且大量写入对于闪存驱动器的预期寿命来说也不是最好的。

答案1

您的 FAT 驱动器只能存储精度为两秒的时间戳。当您拔下并重新插入驱动器时,您实际上破坏了所有文件时间。请参阅--modify-window解决方法的选项:

rsync -av --modify-window=1 /source/ /dest/

其次,您永远不会看到rsync这样的快速备份,因为在本地复制时,它的行为很像cp.

答案2

默认情况下,rsync 通过修改时间和文件大小来识别已更改的文件。在 Google 上快速搜索“vfat timestamp”会发现与tz=UTC挂载选项相关的几个问题。

外部驱动器上的时间戳是否与内部驱动器上的时间戳不同,因此 rsync 总是认为文件不同?如果是这种情况,您可能应该检查您的安装选项。

或者(实际上无论我的理论是否正确),您可以尝试使用该-c选项运行 rsync,这使得它可以通过文件内容的哈希值检查更改。这可能会减慢速度,但我不确定实际影响。

答案3

我发现这个问题在较大的文件中更常见[这正是我想避免复制的文件。]

该选项的一个廉价替代方案-c是使用--size-only

rsync -av --size-only  .....

这将忽略时间戳并仅根据大小更改进行复制。它不如使用校验和那么精确,但足以用于备份

相关内容