我发现有些 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
思考以下过程:
put
文件从 ftp 客户端到服务器- 服务器打开流到临时文件
- 防病毒软件或备份软件锁定(临时)文件以进行扫描或备份
- 在扫描临时文件时,ftp 服务器希望将
move
完成的文件保存到其最终位置和名称 - 由于此时文件被锁定,最终操作可能会失败并引发错误。