背景:我正在复制一个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)
通过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)
改变Blocksize
我担心dd复制期间的’膨胀'(文件大小从原来增加),所以我改变了块大小.我使用’time’来获得总时间和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,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
问题:您能否确认我已经确定了复制稀疏文件以获得最佳整体性能的最佳方法?如果您对我正在使用的方法可能有任何疑虑,欢迎任何关于如何做得更好的建议.
从上面的基准测试中看,在我们的目标硬件上使用dd,块大小为64K,考虑到复制时间和膨胀,我们可以得到最好的整体结果:
dd if=srcFile of=dstFile iflag=direct oflag=direct bs=64K conv=sparse