背景 :我正在复制一个大小为200GB的稀疏qcow2虚拟机映像,但有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)
变化块大小
我担心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
问题 :您能否validation我已经确定了复制稀疏文件以获得最佳整体性能的最佳方法? 任何关于如何做得更好的build议都会受到欢迎,因为我们正在使用的方法可能会带来任何问题。
从上面的基准testing看来,在我们的目标硬件上使用dd,使用64K的块大小,考虑到复制时间和膨胀,给出了最好的总体结果:
dd if=srcFile of=dstFile iflag=direct oflag=direct bs=64K conv=sparse