web-dev-qa-db-ja.com

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

[〜#〜] background [〜#〜]:サイズが200GBのスパースqcow2 VM画像をコピーしていますが、16GBのブロックが割り当てられています。このスパースファイルを同じサーバー内にコピーするためにさまざまな方法を試してみましたが、いくつかの予備的な結果があります。環境は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)

via 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

[〜#〜] question [〜#〜]:スパースファイルをコピーして全体的なパフォーマンスを最高にするための最良の方法を特定したことを確認できますか?これをより良くする方法に関する提案があれば歓迎します。私が使用しているメソッドに関して懸念がある場合も同様です。

10
Steve Amerige

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

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