当前位置:首页> 正文

关于存储:使rsync避免删除未完成的源文件

关于存储:使rsync避免删除未完成的源文件

keep rsync from removing unfinished source files

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

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

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


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

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

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

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


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


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


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


展开全文阅读

相关内容