在 Ubuntu 中,我想通过 rsync 将硬盘上的一个大文件复制到可移动驱动器。由于某种原因,该操作无法一次性完成。所以我想弄清楚如何使用 rsync 从上次停止的地方恢复文件复制。
我尝试使用选项 --partial 或 --inplace,但与 --progress 一起使用时,我发现使用 --partial 或 --inplace 的 rsync 实际上从头开始,而不是从上次剩下的部分开始。手动提前停止 rsync 并检查接收文件的大小也证实了我的发现。
但是使用 --append 时,rsync 将从上次剩下的内容开始。
我很困惑,因为我在手册页上看到 --partial、--inplace 或 --append 似乎与从上次剩余的内容恢复复制有关。有人能解释一下区别吗?为什么 --partial 或 --inplace 不能用于恢复复制?为了恢复复制,rsync 是否必须使用选项 --append?
此外,如果部分文件是由 mv 或 cp 留下的而不是由 rsync 留下的,rsync --append 能正确执行吗?
感谢致敬!
答案1
查看 rsync 的一些页面:
--append
这会导致 rsync 通过将数据附加到文件末尾来更新文件,这假定接收端已存在的数据与发送端文件的开头相同。
--inplace
该选项改变了 rsync 在文件数据需要更新时传输文件的方式:rsync 不再采用默认的方法,即创建文件的新副本并在完成后将其移动到位,而是将更新的数据直接写入目标文件。
--partial
默认情况下,如果传输中断,rsync 将删除任何部分传输的文件。在某些情况下,保留部分传输的文件更为可取。
听起来如果文件很大,你会想要使用--partial --append
。(--append
暗示--inplace
)如果这个大文件发生变化,则删除--append
并且 rsync 将检查文件的开头以确保它也与源文件匹配。 --inplace
对我来说听起来很危险,除非您正在 rsync 一个大文件,您不希望 rsync 创建开头部分的新临时文件,继续传输,然后删除旧文件以将新文件放到位。如果您可以使用相同的文件,传输速度会更快,更不用说传输所需的磁盘空间会更少。
此外,我发现从整个文件传输的角度来看,复制比 rsync 更快。但是,如果我需要更新文件,我会使用 rsync 同步文件,而不是重新传输整个文件。(就像我上面说的)Rsync 应该能够从 cp 恢复。
我希望这有帮助。