在 Ubuntu 中,我想通过rsync
. 由于某些其他原因,该操作无法在一次运行中完成。所以我想弄清楚如何使用rsync
从上次停止的地方恢复复制文件。
我曾尝试使用的选项--partial
或--inplace
,但与一起--progress
,我发现rsync
用--partial
或--inplace
实际从启动开始,而不是从什么左最后一次。手动rsync
提前停止并检查接收文件的大小也证实了我的发现。
但是有了--append
,rsync 从上次剩下的开始。
正如我在手册页 --partial
,上看到的那样,我很困惑--inplace
,--append
似乎与从上次剩下的内容恢复复制有关。有人能够解释其中的区别吗?为什么不--partial
或--inplace
为恢复复印而工作?对于恢复复制,rsync
是否必须使用该--append
选项?
此外,如果部分文件是由mv
or留下的cp
,而不是由 rsync留下的,是否会rsync --append
正确恢复复制文件?
Ric*_*rri 46
要恢复中断的复制,您应该使用rsync --append
. 从手册页的解释--append
:
这会导致 rsync 通过将数据附加到文件末尾来更新文件,这 假定接收方已经存在的数据与发送方文件的开头相同。 [...] 暗示
--inplace
,[...]
选项--inplace
使rsync
(覆盖)直接写入目标文件内容;没有 --inplace
,rsync
会:
正常操作模式主要防止与可能打开目标文件的应用程序发生冲突,以及手册rsync
页中适当列出的一些其他事故。
请注意,如果复制/更新操作在步骤 1.-3 中失败。以上,
rsync
将删除临时目标文件;该--partial
选项禁用此行为,rsync
并将在目标文件系统上保留部分传输的临时文件。因此,除非您rsync
使用--partial
或
调用第一个文件,否则恢复单个文件复制操作不会获得太多收益--partial-dir
(效果与--partial
,此外指示rsync
在特定目录中创建所有临时文件)。
小智 27
请注意,这--append
意味着--inplace
,这本身就意味着--partial
。
通过仅使用--partial
您应该导致rsync
离开部分传输并在随后的尝试中恢复它们。
通过使用,--append
您应该rsync
同时保留部分文件并在下次恢复它们。传输后rsync
应仅验证传输数据的校验和。
--append-verify
在校验和验证中包括整个文件,包括在先前传输中传输的任何部分。
使用--append
或--append-verify
失败的校验和验证应该导致文件完全重新传输(使用--inplace
)
您应该能够继续使用mv
或cp
操作,rsync
但您可能希望使用该--append-verify
选项来让您安心。
请注意,使用--append
原因仅rsync
复制那些在接收器上的大小小于发送器上的大小的文件(无论时间戳如何),或者在接收器上不存在。通过有关此选项的文档:
如果需要传输的文件在接收方的大小等于或大于发送方的大小,则跳过该文件。
手册页中的更多信息
小智 6
大卫施瓦茨是正确的,--partial
(或更好,-P
)做你想做的。我在一个 37G 文件上验证了这一点,该文件通过网络停止了 ~8g。rsync 快速扫描了部分文件的第一部分(由于 显示了进度-P
),然后继续传输到部分文件的末尾。
默认情况下,从本地磁盘传输到本地磁盘时rsync
将启用。--whole-file
这将从头开始重新启动中断的传输,而不是检查已经存在的部分。
要禁用此功能,请使用:
--no-whole-file
Run Code Online (Sandbox Code Playgroud)
将此与--inplace
或结合起来--partial
将允许稍后恢复传输。
我用于rsync
复制的别名是:
rscp='rsync -ax --inplace --sparse --no-whole-file --protect-args'
Run Code Online (Sandbox Code Playgroud)
警告:请小心使用,--append-verify
因为它会跳过任何相同大小或更大的目标文件。