1

У меня есть FTP-сервер с очень большим количеством вложенных каталогов. Я должен загрузить весь каталог рекурсивных. Из-за очень большого количества каталогов (большинство из них имеют только один файл) загрузка ограничена.

Мои два подхода

  • Использование FileZilla (с несколькими параллельными соединениями)
  • Скачайте zip-каталог прямо с хоста

приводя к очень медленной скорости загрузки в несколько кбит / с. С этой скоростью мне нужно 5 дней, чтобы загрузить все файлы ... это не вариант.

Какие возможности у меня есть, чтобы загрузить весь каталог FTP как можно быстрее?

2 ответа2

1

FTP - ужасный протокол - ваш подход к архивированию и загрузке файлов является подходящим, так как он, вероятно, будет намного быстрее, чем навигация по всему дереву каталогов - действительно, если это происходит всего за несколько килобайт в секунду, вероятно, есть какая-то скорость ограничение или пропускная способность между вами и сервером. (Или, возможно, проблема MTU)

Вы не сказали, нужно ли вам использовать FTP. Если вы можете обойти это, попробуйте использовать SCP или даже откройте веб-сервер и загрузите ZIP-файл поверх этого. Оба они запускаются по одному TCP-соединению и намного проще, чем FTP.

Если вам нужно использовать FTP, попробуйте каждый из пассивного и активного режимов и убедитесь, что на хосте включено соответствующее отслеживание подключений, или используйте VPN напрямую к серверу, с которого вы пытаетесь подключиться по FTP, чтобы избежать проблем с NAT / брандмауэром.

(Попробуйте установить MTU для подключения к Ethernet немного ниже на хосте, или установите ограничение MTU и посмотрите, если это изменит)

0

Поскольку FTP не является предпочтительным протоколом для копирования глубоко вложенных каталогов, я попытался найти способ упаковать все файлы в один файл на стороне сервера.

Одна возможность упаковать файлы в консоль SSH с помощью команды вроде

zip -r <username>/backup_29_08_12.zip<username>

Так как моя служба не позволяет такое соединение, в моем случае это было невозможно.

Я обнаружил, что мой провайдер позволяет использовать пакет PEAR Archive_Tar. В результате получается PHP-скрипт, упаковывающий файлы:

<?
    @error_reporting(E_ALL ^ E_WARNING);
    @ini_set("max_execution_time", 0);
    @ini_set("memory_limit", "-1");

    $directory = "";

    $ignore = array("*.sql.gz", "*.tar.gz");

    $path = preg_replace('/(\/www\/htdocs\/\w+\/).*/', '$1', realpath(__FILE__));
    include "Archive/Tar.php";
    $archivename = preg_replace('/.+\/(.+)\/$/', '$1', $path).date('_Y-m-d_His').".tar.gz";
    $archive = new Archive_Tar($archivname, true);
    $archive->setIgnoreList($ignore);
    $archive->createModify($path.$directory, "", $path);
    echo "Backup done";
?>

Вызов этого скрипта в папке с CHMOD 0777 занял около получаса. После этого я мог загружать упакованные файлы без ограничения скорости загрузки.

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