Die Verbindung zum Microsoft FTP-Server hängt beim Übertragen tausender Dateien

1800
Dmitri Chubarov

Ich sehe, dass einige FTP-Clients nicht abschließen können, wenn Tausende von Dateien an einen FTP-Server übertragen werden. Der mput *Befehl läuft mehrere Stunden und hängt sich dann ein

150 Opening BINARY mode data connection. 

Ich habe keine einfache Möglichkeit, die FTP-Server-Administratoren zu kontaktieren (alles, was ich habe, ist eine IP-Adresse im Block, die von verwaltet wird, WeHostWebSites.Comund ich weiß, dass diese IP von einem Dutzend Domänennamen gemeinsam genutzt wird).

Der FTP-Server stellt sich als vor

220 Microsoft FTP Service 

Ich gehe also davon aus, dass es sich um IIS handelt.

Ich verwende mput *ein Verzeichnis, das Tausende von Dateien enthält. Bis die Übertragung für eine Weile hängt, bis die Kontrollverbindung wegen Inaktivität geschlossen wird.

Nach der Prüfung der Protokolle sehe ich folgendes Muster. Die Dateien werden zunächst passiv übertragen .

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

Dann erhöhen sich die Portnummern, bis sie 65200 erreichen. An diesem Punkt kehrt der Server zurück 501.

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

Dadurch werden Clients (z. B. lukemftpbei OpenSUSE 11-Installationen standardmäßig) oder FAR-Manager-FTP-Plugin (das bei Windows-Benutzern beliebt ist) dazu veranlasst, in den aktiven Modus zu wechseln. Die folgenden Übertragungen beginnen mit dem PORTBefehl.

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

netstat -tzeigt auch an, dass neue Verbindungen an Port 20 / tcp des Servers gehen. Nach dem Übertragen weiterer 3000+ Dateien bleibt der Befehl stehen. An diesem Punkt netstat -tzeigt der Ausgang von, wie die TIME_WAITVerbindungen abfließen, und dann wird die Steuerverbindung für Inaktivität geschlossen.

Abhilfemaßnahme: Es wird häufig empfohlen, lftpfür große FTP-Übertragungen zu verwenden, und das Problem wurde dadurch gelöst. Beim lftpAusführen eines mirror -RBefehls in einem Verzeichnis mit mehr als 100000 Dateien kann ich sehen, wie die dynamischen Portnummern bis zu 65200 laufen und dann von 49152 fortfahren, wobei alle Übertragungen passiv bleiben. Dieser Befehl wird also erfolgreich ausgeführt.

Gibt es eine Möglichkeit, dieses Problem ohne die Verwendung von lftpzu umgehen lftp? (Was kann insbesondere auf einem reinen Windows-Client getan werden, der nicht vorhanden ist ?

Hinweis: Diese Frage wurde vor einigen Monaten auf http://serverfault.com veröffentlicht. Sie erhielt jedoch keine Antworten und eine kürzlich abgeschlossene Abstimmung. Ich entschied mich dafür, es von ServerFault zu entfernen und stattdessen auf SuperUser zu veröffentlichen.

1

1 Antwort auf die Frage

1
Martin Seitl

Gibt es ein on access antivirus-softwareoder continous backup softwareauf dem Server? Möglicherweise ändert das Deaktivieren zu Testzwecken etwas.

Denken Sie an den folgenden Prozess:

  1. put Datei vom FTP-Client zum Server
  2. Server öffnet Stream in temporäre Datei
  3. Antivirus-Software oder Backup-Software sperrt die (temporäre) Datei für das Scannen oder Backup
  4. Beim Scannen der temporären Datei möchte der FTP-Server movedie fertige Datei an ihrem endgültigen Ort und Namen abrufen
  5. Da die Datei zu diesem Zeitpunkt gesperrt ist, kann die letzte Operation fehlschlagen und einen Fehler auslösen.
Ich vermute, dieser "Move" -Problem würde sich irgendwie im Server-Log niederschlagen. Der Schlüssel ist also, die Server-Logs in die Hand zu bekommen, oder? Dmitri Chubarov vor 9 Jahren 0
Ja. konsultieren Sie das eventlog und das ftp-log. Wenn Sie dies noch nicht getan haben, aktivieren Sie die umfangreiche Protokollierung für den FTP-Dienst. Martin Seitl vor 9 Jahren 0