Kvm-Virtualization
複製稀疏文件的最快方法是什麼?什麼方法產生最小的文件?
背景:我正在複製一個 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)
改變塊大小
我擔心 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
問題:您能否確認我已經確定了複製稀疏文件以獲得最佳整體性能的最佳方法?歡迎任何關於如何更好地做到這一點的建議,以及您對我正在使用的方法可能有的任何疑慮。
從上面的基準測試來看,考慮到複製時間和膨脹,在我們的塊大小為 64K 的目標硬體上使用 dd 似乎給了我們最好的整體結果:
dd if=srcFile of=dstFile iflag=direct oflag=direct bs=64K conv=sparse