スパースファイルをコピーする最も速い方法は何ですか?最小のファイルになるのはどの方法ですか?


10

背景:私は、サイズが200ギガバイトであるスパースQCOW2 VMイメージをコピーしますが、割り当てられたブロックの16ギガバイトを持っています。このスパースファイルを同じサーバー内にコピーするためにさまざまな方法を試しましたが、いくつか予備的な結果が得られました。環境はRHEL 6.6またはCentOS 6.6 x64です。

ls -lhs srcFile 
16G -rw-r--r-- 1 qemu qemu 201G Feb  4 11:50 srcFile

CP経由-最高速度

cp --sparse=always srcFile dstFile
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 1:02 (mm:ss) 

dd経由-全体的なパフォーマンスが最高

dd if=srcFile of=dstFile iflag=direct oflag=direct bs=4M conv=sparse
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/21GB actual, bloat: 5GB
    Copy time: 2:02 (mm:ss)

cpio経由

mkdir tmp$$
echo srcFile | cpio -p --sparse tmp$$; mv tmp$$/srcFile dstFile
rmdir tmp$$
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 9:26 (mm:ss)

rsync経由

rsync --ignore-existing -aS srcFile dstFile
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 24:49 (mm:ss)

virt-sparsify経由-最適なサイズ

virt-sparsify srcFile dstFile
    Copied 200GB max/16GB actual VM as 200GB max/16GB actual, bloat: 0
    Copy time: 17:37 (mm:ss)

さまざまなブロックサイズ

ddコピー(元のファイルサイズよりもファイルサイズが大きくなる)中の「膨張」が心配だったので、ブロックサイズを変更しました。「時間」を使用して、合計時間とCPU%も取得しました。この場合の元のファイルは、7.3GBのスパース200GBファイルです。

4K:   5:54.64, 56%, 7.3GB
8K:   3:43.25, 58%, 7.3GB
16K:  2:23.20, 59%, 7.3GB
32K:  1:49.25, 62%, 7.3GB
64K:  1:33.62, 64%, 7.3GB
128K: 1:40.83, 55%, 7.4GB
256K: 1:22.73, 64%, 7.5GB
512K: 1:44.84, 74%, 7.6GB
1M:   1:16.59, 70%, 7.9GB
2M:   1:21.58, 66%, 8.4GB
4M:   1:17.52, 69%, 9.5GB
8M:   1:10.92, 76%, 12GB
16M:  1:17.09, 78%, 16GB
32M:  2:54.10, 90%, 22GB

質問:スパースファイルをコピーして全体的なパフォーマンスを最大にするための最良の方法を私が特定したことを確認できますか?これをより良くする方法についての提案は、私が使用している方法に関してあなたが抱くかもしれない懸念と同様に歓迎されています。


あなたの立派な努力を考えると、私が試してみるべき他の唯一のものは--sparseオプションを指定したrsyncです。また、ddの異なるブロックサイズが速度や膨張を改善する可能性もあります。
mpez0 2015

タールはあまりにも試すには良いものです
オリヴィエ・デュラック

@OlivierDulac私はtarを試しましたが、これは非常に貧弱なパフォーマーでしたので、含めませんでした。私が持っている必要があります。上記はローカルコピーです。同じサブネットでコピーして、10Gbpsネットワークのパフォーマンスデータをコピーするネットワークを追加します。それがわかったら、全体的なパフォーマンスが最も優れている実行可能な結論を引き出すのに十分なデータが得られると思います。
Steve Amerige、2015

rsyncは、このスタイルのコピーを行うための--sparseもサポートしています。あなたはそれを試したいかもしれません。また、ローカルおよびネットワーク上のコピーの両方で測定可能であるという追加の利点があります。
Travis Campbell

@TravisCampbell rsyncのデータを追加しました。これは、私が実行したすべてのテストの中で最悪の実行者でした。
Steve Amerige 2015年

回答:


5

上記のベンチマークから、64Kのブロックサイズのターゲットハードウェアでddを使用すると、コピー時間と膨らみを考慮すると、全体的に最良の結果が得られるように見えます。

dd if=srcFile of=dstFile iflag=direct oflag=direct bs=64K conv=sparse

2
こんにちはスティーブ、質問に答えてください。答えは、stackexchangeサイトのしくみです。
bummi 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.