问题是:我试图创建一个公共FTP站点的本地镜像。当我使用lftp
来完成这项工作时,它会毫无问题地创建一个镜像,但当我几天后尝试更新镜像时,由于被几个文件卡住,它变得非常慢。
运行lftp -d
我可以看到lftp
对文件RETR
发出了几个请求,但这些请求会导致几个**** Timeout - reconnecting
消息,大约2-3分钟后我看到
<---150正在打开{filename removed}的二进制模式数据连接。`
在最后一个命令之后,文件成功下载,lftp继续进行。
从手册中,我了解到BINARY是lftp
的默认模式,但不知何故,它似乎不适用于早期请求。有人能建议我如何强制lftp始终打开二进制模式的数据连接来下载所有文件吗?
这是MWE:
``lftp -d -u anonymous,anonymous -c "open {url}; get {file}"``
以及来自lftp -d
:的响应
---- Connecting to {url} ({IP}) port 21
<--- 220 (vsFTPd 3.0.3)
---> FEAT
<--- 211-Features:
<--- EPRT
<--- EPSV
<--- MDTM
<--- PASV
<--- REST STREAM
<--- SIZE
<--- TVFS
<--- 211 End
---> USER anonymous
<--- 331 Please specify the password.
---> PASS anonymous
<--- 230 Login successful.
---> TYPE I
<--- 200 Switching to Binary mode.
---> SIZE {file}
<--- 213 3321
---> MDTM {file}
--- 213 20160318190446
---> PASV
<--- 227 Entering Passive Mode ({IP}).
---- Connecting data socket to ({IP}) port 55380
---- Data connection established
---> RETR {file}
**** Timeout - reconnecting
---- Closing data socket
---- Closing control socket
lftp默认情况下对所有文件传输使用二进制模式,对目录列表使用ascii模式。所以二进制模式在这里应该不是问题。
也许您有一个微妙的连接问题,有时将net:socket maxseg设置为较低的值(例如500)会有所帮助。
二进制模式的ftp命令是bin
,所以在get
文件之前使用该命令。
cd /direc/tory; bin; get file.xml
问题是我看到
---> TYPE I
<--- 200 Switching to Binary mode.
在您的输出中,所以您已经处于二进制模式。我想知道你是否有其他问题?我还看到您使用的是被动模式(PASV
),这很好,因为被动模式适用于防火墙和NAT[1],所以我们需要看到这些超时的另一个原因。
你还有其他线索吗,可能来自ping
或netstat
?