一部のディスクを回収した後、結果(数テラバイトのディスクイメージ)をローカルネットワークデータストア(LDS)のファイルとしてターゲットディスクにコピーしました。通常、ターゲットディスクのファイルシステムはNTFSです。 LNDSは、600 MB / s(10 Gbitネットワーク上)以上の速度でデータをデータに転送できます。ターゲットディスクは150 MB / s以上の持続速度でデータを保存できます。ただし、サーバーからターゲットディスクファイルシステムにファイルをコピーする速度は60〜80 MB / sと非常に遅いです。今日は2つの準備をするよう求められました。私はteeコマンドを使用して2つのターゲットを指定しました。
dd if=/servermount/path/file.img bs=8192 |tee /localmount/target1/file.img >/localmount/target2/file.img
(cp
フォークできませんtee
)しかし、驚くべきことに、コピー速度は約40MB / sに過ぎません。私はすぐにトラフィック分析を開始しました。ネットワークは40 MB / sの連続速度でデータをロードしており、両方のディスクは最大160 MB / sの速度で書き込みを行いましたが、書き込みにかかる時間は25%未満でした。
見てみると、top
CPUが2つのmount.ntfs
プロセス(それぞれ40%以上)でほとんどの時間を費やし、tee
CPU時間の約30%を占めることがわかりました。
また、リバースプロセスも試みました。ワークステーションでSambaサーバーを起動し、両方のターゲットを共有として追加し、サーバーのデータを両方のディスクに送信しました。通常の速度が66〜69MB / sに増加し、mount.ntfsプロセスがCPU時間の約7%しか占めていないという事実にもう一度驚きました。
プッシュするネットと引っ張るネットの間になぜこのような大きな違いがあり、予想と異なる方法があるのか理解できません。
すべてのbashコマンドが使用するのに適しているわけではありませんtee
。dd
ターゲットが/dev/null
650-700MB / sの速度である場合。物理ディスクを2つの異なるphy.diskにコピーすると(2つのディスクイメージを複製するか作成するか)、コピー速度は120 MB / sを超え、ターゲットがサーバー(LNDS)にある場合は同じ速度を取得します。
誰かが私が間違っていることを説明できますか? LNDSから2つのローカルディスクに大容量ファイルをコピーするのに適したいくつかのコピーコマンドがありますか?
答え1
インターネットで見つけたいくつかのヒントを試してみました。
次のオプションを使用してNTFSをマウントすることをお勧めしますbig_writes
。 CPU負荷が40%から5〜7%に減少することは認められます。ただし、主な質問は、以前に示されたdd
コマンドのスループットが40 MB / s未満であり、この問題がまだ存在する理由です。
次のヒントは、2つの別々のプロセスを同時に使用してソースを最初のターゲットにコピーし、同じソースを2番目のターゲットにコピーすることです。
# (cp /servermount/path/file.img /localmount/target1/)&
# (cp /servermount/path/file.img /localmount/target2/)&
これは2つのコンソールから送信することも、バックグラウンドプロセスを使用して単一のコンソールから送信することもできます。
驚いたことに、ネットワークは110MB / s以上を維持し、両方のディスクへの書き込みは約50〜70%のデューティサイクルで170MB / s以上にほぼ同期しました。
まあ、私はいくつかの解決策を見つけました。このような良いディスクバッファ管理と「私たちのために創造的に考える」能力を持つオペレーティングシステムがあるのはおそらく良い機能でしょう。しかし、一方、私は合理的な期待と正反対に動作するオペレーティングシステムを理解することはできません。dd
物理ディスク上の同じコマンドも完全に機能します。
私の意見を黙々と表現したという理由で、もはや罰を受けないことを願っています。