我一直在尝试弄清楚如何恢复部分转账同步(在 Windows 上,使用赛格威)而不使用该--inplace
选项。
我看到 rsync 在目标目录中创建了“部分”文件,其名称如下.[文件名].2dxZ1a因此,据我所知,如果我使用该--partial
选项,rsync 将看到这样的文件并恢复对此文件的传输。但是,我发现如果我使用该--partial
选项并且 rsync 进程结束,那么当我再次启动 rsync 命令时,它会删除那些部分文件。也许此选项在短暂的传输中断时有效,但在进程结束并重新开始时无效。
除了这个选项之外,我实际上还喜欢这个--partial-dir
选项,期望如果我指定--partial-dir=".rsync"
(带或不带引号),rsync 将创建目录.rsync在目标目录中并将文件传输到[目录]/.rsync,将它们移动到[目录]传输完成后(并删除[目录]/.rsync一旦不再需要它)。但是,rsync 似乎完全忽略了该选项,只是像平常一样在目标目录中创建临时文件(并在重新启动时删除它们)。
所以,我想知道:我做错了什么还是我只是没有正确理解这些选项?
我的命令是:rsync -rt --log-file="rsync.log" --partial-dir=".rsync" --del rsync://rsync-server:port/module/ /cygdrive/local/path/
答案1
我从 Windows 任务计划程序启动了此命令。当我从控制台(命令提示符)获取命令并运行它时,选项正常工作*。
执行命令时的唯一区别发生在我尝试结束它们时。在控制台中,Ctrl+C
按同步以错误结束
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at ...
在 Windows 任务计划程序中,右键单击正在运行的任务并选择结尾导致错误
rsync: read error: Connection reset by peer (104)
因此,我只能假设 Windows 任务计划程序结束进程的方式与 rsync 预期结束的方式不同*,这使得 rsync 结束而不执行其退出例程。
* — 我发现了更多有关方式--partial
和--partial-dir
工作的信息。
和--partial
,同步像我看到的那样创建一个临时文件,但是当 rsync 结束时(以预期的方式),它会将该临时文件重命名为常规文件名(例如重命名.[文件名].2dxZ1a到[文件名]),然后在下次运行时将部分文件复制到新的临时文件中(例如复制[文件名]到.[文件名].34cae2)。
和--partial-dir
,同步填充临时文件,然后在关闭时将临时文件移动到您指定为常规文件名的目录中(例如重命名.[文件名].2dxZ1a到[部分目录]/[文件名])然后,在下次运行时,它会将文件从[部分目录]到目标目录中的新临时文件。
答案2
看来您的想法是对的,但如果不知道整个命令,就无法判断。对于我来说,当我终止 rsync(使用 ctrl-C)并重新启动它(使用 rsync 3.0.6 的 GNU/Linux)时,这些选项的工作方式与预期一致。需要注意的一点是,如果您使用 --wholefile 或任何暗示 --wholefile 的选项(请参阅 rsync 手册页),那么 --partial(-dir) 将不起作用,您可能会看到您描述的症状。此外,如果它找不到或创建 --partial-dir 中指定的目录,那么它将默默忽略它。另一种可能性是 --partial 实际上对您有效,但您无法判断并认为它重新开始,即使它没有 - 我希望它在完成传输并更新实际文件后删除临时文件。您可以使用 --progress 监视这一点 - 它将从 0% 开始,但然后非常快速地跳转到已经传输的任何百分比并从那里继续。对于较小的文件,进度可能太快而看不到太多内容,因此请尝试更大的文件(100 MB 或更大,具体取决于与目标的连接速度)。希望这能有所帮助。编辑:我发现 --partial-dir 似乎在传输过程中在目标目录中创建一个临时文件,就像 --partial 一样。只有当传输终止时,它才会将其移动到您指定的部分文件目录,因此最初看起来它与 --partial 没什么不同。