传输数千个文件时与 Microsoft FTP 服务器的连接挂起

传输数千个文件时与 Microsoft FTP 服务器的连接挂起

我发现有些 FTP 客户端在向 FTP 服务器传输数千个文件时无法完成。该mput *命令运行了几个小时,然后挂起

150 Opening BINARY mode data connection.

我没有简单的方法来联系 FTP 服务器管理员(我所拥有的只是所管理的块中的一个 IP 地址,WeHostWebSites.Com并且我知道这个 IP 由十几个域名共享)。

FTP 服务器自我介绍为

220 Microsoft FTP Service

因此我认为它是 IIS。

我正在一个包含数千个文件的目录上运行mput *。直到传输暂停一段时间,直到控制连接因不活动而关闭。

检查日志后,我发现以下模式。最初文件传输到被动的模式。

229 Entering Extended Passive Mode (|||53567|)
150 Opening BINARY mode data connection.

然后端口号不断增加,直到达到 65200。此时服务器返回501

229 Entering Extended Passive Mode (|||65201|)
501 Server cannot accept argument.

这会触发客户端lukemftp(OpenSUSE 11 安装中默认自带)或 FAR 管理器 FTP 插件(Windows 用户中很流行)切换到积极的因此接下来的传输从PORT命令开始。

200 PORT command successful.
150 Opening BINARY mode data connection.

netstat -t还显示新连接转到服务器的 20/tcp 端口。在传输另外 3000 多个文件后,命令挂起。此时,输出netstat -t显示连接如何TIME_WAIT耗尽,然后控制连接因不活动而关闭。

解决方法:通常建议将其用于lftp大型 FTP 传输,事实证明这是解决问题的一种方法。观察在包含 100000 多个文件的目录上lftp执行mirror -R命令时,我可以看到动态端口号如何运行到 65200,然后从 49152 继续,使所有传输保持被动状态。因此,此命令成功完成。

有没有办法解决这个问题而不使用lftp(特别是在没有的纯 Windows 客户端上可以做什么lftp

注意:这个问题几个月前就发布在http://serverfault.com但没有收到任何答复,而且最近还收到了关闭投票。我决定将其从 ServerFault 中删除,并将其重新发布到 SuperUser 上。

答案1

服务器上有on access antivirus-software或吗?也许出于测试目的禁用它会改变一些东西。continous backup software

思考以下过程:

  1. put文件从 ftp 客户端到服务器
  2. 服务器打开流到临时文件
  3. 防病毒软件或备份软件锁定(临时)文件以进行扫描或备份
  4. 在扫描临时文件时,ftp 服务器希望将move完成的文件保存到其最终位置和名称
  5. 由于此时文件被锁定,最终操作可能会失败并引发错误。

相关内容