防止rsync删除未完成的源文件


169

我有两台机器,速度和质量。speed具有快速的Internet连接,并且正在运行搜寻器,该搜寻器会将大量文件下载到磁盘。海量有很多磁盘空间。完成下载后,我想将文件从速度移动到大量。理想情况下,我会运行:

$ rsync --remove-source-files speed:/var/crawldir .

但我担心rsync会取消链接尚未完成下载的源文件。(我查看了源代码,但没有发现任何防止这种情况的方法。)有什么建议吗?

Answers:


10

在我看来,问题在于文件尚未完成传输,而不是您要删除它。

如果是Linux,则进程A可以打开文件,而进程B可以取消链接。没有错误,但是当然A在浪费时间。因此,rsync删除源文件这一事实不是问题。

问题是rsync仅在复制后才删除源文件,并且如果仍将其写入磁盘,则将有部分文件。

怎么样:在中mass作为远程文件系统挂载(NFS可以工作)speed。然后,直接通过网络抓取文件即可。


9

您对下载过程有多少控制权?如果自己动手,则可以将要下载的文件转到临时目录,也可以使用临时名称,直到完成下载为止,然后在完成后将其转换为正确的名称。如果您使用的是第三方软件,则您没有太多控制权,但是您仍然可以执行temp目录操作。


3

Rsync可以排除与某些模式匹配的文件。即使您不能对其进行修改以使其将文件下载到临时目录,也可能具有在下载过程中对文件进行不同命名的约定(例如:foo.downloading在下载名为的文件时foo),并且您可以使用此属性来排除文件仍在从复制中下载。


3

如果您可以控制爬网过程,或者具有可预测的输出,可以使用上述解决方案(将文件存储在临时文件中,直到完成,然后移动到完成下载的位置,或者忽略名称为“ .downloading”的文件)可能有用。如果所有这些都不在您的控制范围内,则可以通过执行'lsof $ filename'并检查是否有结果来确保该文件没有被任何进程打开。显然,如果没有人打开文件,则将其移动是安全的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.