当我在远程同步一个大文件时,rsync 似乎在本地保存了一个临时文件。
然后机器突然断电关机。
再次启动机器后,似乎 rsync 从一开始就同步大文件,但我发现有一个文件已经同步了大约 60%(1G),我的 rsync 使用有什么问题?
我使用的命令:
rsync --partial -av -r --progress user@remote /local-dir
答案1
正如蒂姆所说,这听起来很正常;rsync 会知道它有一个文件似乎是远程文件的部分副本,但它仍然必须检查它拥有的文件实际上是否是您正在复制的文件。
在进行此检查时,它会显示已“传输”的文件的字节数,因此看起来好像是在再次复制文件 - 但如果您查看传输速度,它应该比通过网络传输的速度快得多。最终,rsync 将越过已复制的字节并找到需要通过网络传输的新字节,然后您会看到速度变慢。
简而言之,我认为你对 rsync 的输出感到困惑,因为它没有区分“通过网络传输的字节数”和“仅通过检查本地副本是否与远程副本匹配而传输的字节数”
答案2
这是正常的。rsync 应该返回已经传输的文件来检查更新。
-u 标志使 rsync 查看文件修改时间;如果添加该标志,它应该跳过源上未更改的文件。
答案3
只需将临时文件(.somethingXYZ)重命名为来自远程源的正确文件名(something)。
那么 rsync 肯定只会下载缺失的内容。
(如果您在运行 rsync 时查看文件夹,您将看到生成一个新的 .somethingABC 文件,该文件将以每秒几十 MB 的速度增长……因为 rsync 将从“半完成”的本地文件读取,而不是通过网络从远程源再次下载它)。
答案4
您可以强制 rsync 对文件进行校验并仅使用以下命令复制剩余数据。
rsync -av --progress --checksum --inplace --no-whole-file SOURCE DESTINATION