it-swarm-ja.com

複数のFTPディレクトリの高速ダウンロード

ネストされたディレクトリの数が非常に多いFTPサーバーがあります。ディレクトリ全体を再帰的にダウンロードする必要があります。ディレクトリの数が非常に多いため(ほとんどの場合、ファイルは1つしかない)、ダウンロードは制限されているようです。

私の2つのアプローチ

  • FileZillaの使用(複数の並列接続あり)
  • Zip形式のディレクトリをホストから直接ダウンロードします

すべてが数kb/sの非常に遅いダウンロード速度につながります。この速度では、すべてのファイルをダウンロードするのに5日かかります...これはオプションではありません。

FTPディレクトリ全体をできるだけ速くダウンロードするにはどのような可能性がありますか?

1
Fruchtzwerg

FTPは、深いネストされたディレクトリをコピーするために好まれるプロトコルではないため、サーバー側ですべてのファイルを1つのファイルにパックする方法を見つけようとしました。

次のようなコマンドでSSHコンソールを使用するためにファイルをパックする1つの可能性

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

私が提供したものはそのような接続を許可しないので、私の場合、これは不可能でした。

私のプロバイダーはPEARパッケージ Archive_Tar の使用を許可していることがわかりました。結果は、ファイルをパックするPHP sciptです。

<?
    @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のフォルダーでこのスクリプトを呼び出すには、約30分かかりました。その後、ダウンロード速度を制限することなく、パックされたファイルをダウンロードできました。

0
Fruchtzwerg

FTPは恐ろしいプロトコルです-ファイルを圧縮してダウンロードするアプローチは、ディレクトリツリー全体をナビゲートするよりもはるかに高速である可能性が高いため適切です-実際、これが毎秒数kbでしか実行されない場合は、おそらく何らかのレートがありますあなたとサーバーの間の制限または帯域幅のボトルネック。 (またはおそらくMTUの問題)

FTPを使用する必要があるかどうかは言わなかった。バイパスできる場合は、SCPを使用するか、Webサーバーを開いてZipファイルをダウンロードしてみてください。これらは両方とも単一のTCP接続で実行され、FTPよりもはるかに単純です。

FTPを使用する必要がある場合は、パッシブモードとアクティブモードをそれぞれ試して、ホストで適切な接続トラッキングが有効になっていることを確認するか、FTPを実行しようとしているサーバーへのVPNを直接使用してNAT /ファイアウォールの問題。

(ホストでイーサネット接続のMTUを少し低く設定するか、MTUクランプを設定して、違いが生じるかどうかを確認してください)

1
davidgo