1

Я вижу, что некоторые 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

Есть ли на сервере антивирусное программное обеспечение или on access antivirus-software continous backup software ? Возможно, отключение его в целях тестирования что-то меняет.

Подумайте о следующем процессе:

  1. put файл с ftp-клиента на сервер
  2. сервер открывает поток во временный файл
  3. антивирусное или резервное программное обеспечение блокирует (временный) файл для сканирования или резервного копирования
  4. при сканировании временного файла ftp-сервер хочет move готовый файл в его окончательное местоположение и имя
  5. поскольку файл заблокирован в этот момент, последняя операция может завершиться ошибкой и вызвать ошибку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .