Соединение с FTP-сервером Microsoft зависает при передаче тысяч файлов

1822
Dmitri Chubarov

Я вижу, что некоторые 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) или плагин FTP-менеджера FAR (который популярен среди пользователей Windows), чтобы переключиться на активный, поэтому следующие передачи начинаются с PORTкоманды.

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

netstat -tтакже показывает, что новые подключения идут к порту 20 / tcp сервера. После передачи еще 3000+ файлов команда зависает. В этот момент выходной сигнал netstat -tпоказывает, как TIME_WAITсоединения истекают, а затем управляющее соединение закрывается из-за неактивности.

Обходнойlftp путь : часто предлагается использовать для больших передач FTP, и это оказалось решением проблемы. Наблюдая за lftpвыполнением mirror -Rкоманды в каталоге с более чем 100000 файлами, я вижу, как номера динамических портов достигают 65200, а затем продолжают с 49152, сохраняя все передачи в пассивном состоянии. Так что эта команда успешно завершена.

Есть ли способ обойти эту проблему без использования lftp(В частности, что можно сделать на чисто Windows-клиенте, который не имеет lftp?

Примечание. Этот вопрос был опубликован несколько месяцев назад на сайте http://serverfault.com, но не получил никаких ответов и недавнего закрытого голосования. Я решил удалить его из ServerFault и вместо этого поместить его в SuperUser.

1

1 ответ на вопрос

1
Martin Seitl

Is there a on access antivirus-software or continous backup software on the server? Maybe disabling it for testing purposes changes something.

Think of the following process:

  1. put file from ftp-client to server
  2. server opens stream to temporary file
  3. antivirus-software or backup-software locks the (temporary) file for scanning or backup
  4. while scanning the temporary file the ftp-server wants to move the finished file to its final location and name
  5. since the file is locked at this moment the final operation could fail and throw an error.
Я предполагаю, что эта ошибка `move` будет как-то отражена в журнале сервера. Итак, главное, чтобы получить доступ к журналам сервера, верно? Dmitri Chubarov 9 лет назад 0
да. обратитесь к журналу событий и ftp-журналу. Если вы еще этого не сделали, включите расширенную регистрацию для ftp-сервиса. Martin Seitl 9 лет назад 0

Похожие вопросы