ネットワーク経由でファイルコピーをするとファイル数が多くなるにつれてコピー速度が極端に遅くなる
ネットワーク経由でファイルコピーをするとファイル数が多くなるにつれてコピー速度が極端に遅くなる現象についての紹介です。
概要
Windowsなどの共有フォルダからのファイルコピーで、ファイル数が増えるにつれてファイルのコピー速度が低下します。具体的には、
- ネットワークのサーバーの共有フォルダから1GBのファイル1つをコピーするのに要する時間 - 20秒程度
- ネットワークのサーバーの共有フォルダから100KBのファイル10000個をコピーするのに要する時間 - 4~5分程度
の差があります。ネットワーク経由でファイルをコピーする場合にはSMBサーバーを通じてファイルの転送をするためファイルコピーの速度に差が出ます。
SMBプロトコルでのファイルコピー
SMBプロトコルでファイルのコピーをする場合には以下の手順でファイルコピーを実行します。
- プロトコルネゴシエーション
- セッションセットアップ
- ツリーセットアップ
- ファイルの作成要求の送信
- ファイルデータの書き込み
プロトコルネゴシエーション
サーバークライアント間でのSMB/CIFSプロトコルのバージョン確認がなされます。Negotiateコマンドを用いてNTLMのどのバージョンまでがサポートされているかを確認します。
セッションセットアップ
SESSION SETUPコマンドを実行してSMB/CIFSセッションを確立します。
ツリーセットアップ
共有フォルダへの認証と共有フォルダへのアクセスを取得します。
ファイルの作成要求の送信
SMB/CIFSサーバーに対してファイルの作成要求を送信します。
ファイルデータの書き込み
ファイルのデータを書き込みます。
複数ファイルがある場合は、1つのファイルにつき4,5の処理を繰り返します。
4~5の処理は1つのファイルを書き込むにあたり、
- CREATE
- CHANGE NOTIFY
- QUERY INFORMATION
- SET INFORMATION
- ファイルの書き込み
- SET INFORAMTION
- QUERY INFORAMTION
のコマンドが実行され、1個のファイルコピーにつき6~7往復程度の通信がクライアントとサーバー間でされるため、ファイル数が増えるほど通信のやり取りが増え時間がかかることになります。
対策
対策としてはSMBでのファイルコピーを使わない、ファイル数を減らしてからコピーする方法があります。
- FTPを用いてファイルコピーをする
- ネットワークコピーを使わずハードディスクドライブをコピー先のコンピューターに接続してファイルコピーをする
- サーバー側でサイズの小さなファイル多数を(ZIPファイルなどに圧縮し)アーカイブし大きなサイズのファイルにしてファイル数を減らしてからコピーする
といった方法があります。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。