在 Ubuntu 中,我想将一个大文件从我的硬盘驱动器复制到可移动驱动器rsync
。由于某些其他原因,该操作无法在单次运行中完成。所以我试图弄清楚如何使用rsync
从上次停止的位置恢复复制文件。
我尝试过使用选项--partial
or --inplace
,但是与 一起使用--progress
,我发现rsync
with --partial
or--inplace
实际上是从头开始,而不是从上次剩下的开始。提前手动停止rsync
并检查接收到的文件的大小也证实了我的发现。
但是对于--append
,rsync 从上次剩下的内容开始。
正如我在网上看到的那样,我很困惑手册页 --partial
、--inplace
、--append
似乎与从上次留下的内容中恢复复制有关。有人能够解释其中的区别吗?为什么不--partial
或--inplace
努力恢复复印?为了恢复复制,是否rsync
必须使用该--append
选项?
另外,如果部分文件是由mv
或留下的cp
,而不是由 rsync 留下的,是否会rsync --append
正确恢复复制文件?
答案1
要恢复中断的复制,您应该使用rsync --append
.从手册页的解释来看--append
:
这会导致 rsync 通过将数据附加到文件末尾来更新文件,这 假设接收端已经存在的数据与发送端文件的开头相同。 [...] 暗示
--inplace
, [...]
选项--inplace
直接rsync
(覆盖)写入目标文件内容;没有 --inplace
,rsync
会:
- 使用临时名称创建一个新文件,
- 将更新的内容复制到其中,
- 与目标文件交换,最后
- 删除目标文件的旧副本。
正常操作模式主要防止与可能打开目标文件的应用程序发生冲突,以及联机帮助页中适当列出的一些其他事故rsync
。
请注意,如果复制/更新操作在步骤 1.-3 中失败。以上,
rsync
将删除临时目标文件;该--partial
选项禁用此行为,并将rsync
部分传输的临时文件保留在目标文件系统上。因此,恢复单个文件复制操作不会有太大好处,除非您使用or 调用第一个操作(rsync
与效果相同,此外还指示 在特定目录中创建所有临时文件)。--partial
--partial-dir
--partial
rsync
答案2
请注意,这--append
意味着--inplace
,这本身就意味着--partial
。
通过仅使用,
--partial
您应该会导致rsync
保留部分传输并在后续尝试中恢复它们。通过使用,
--append
您应该会rsync
保留部分文件并在下次恢复它们。传输后rsync
应仅验证传输数据的校验和。--append-verify
在校验和验证中包括整个文件,包括先前传输中传输的任何部分。无论是校验和验证失败
--append
还是--append-verify
失败,都会导致文件完全重新传输(使用--inplace
)
您应该能够恢复mv
或cp
操作,rsync
但您可能希望使用该--append-verify
选项来安心。
请注意,使用--append
Causesrsync
来复制仅有的这些文件在接收方上的大小小于发送方上的大小(无论时间戳如何),或者在接收方上不存在。通过此选项的文档:
如果需要传输文件并且接收方上的文件大小与发送方上的大小相同或更长,则将跳过该文件。
更多信息在手册页
答案3
大卫·施瓦茨(David Schwartz)是正确的,--partial
(或者更好的是,-P
)确实做了你想做的事。我在一个 37G 文件上验证了这一点,该文件通过网络停止了约 8g。 rsync 快速扫描了部分文件的第一部分(由于 ,显示了进度-P
),然后恢复传输到部分文件的末尾。
答案4
你做得对,--partial
就是你想要的。它似乎是从头开始的,因为它总是从需要复制的文件数据块列表的开头开始。该--append
选项很危险,如果数据由于某种原因不匹配,将导致文件损坏。