Updated Branches: refs/heads/master a91df8f32 -> 7ce222710
Summary: master - Copy qcow2 instead of converting if source and dest are qcow2 Detail: If source image is qcow2, and we want a qcow2 image, then doing a convert strips off compression and any snapshots the user had in that image. If a backing file exists, we stick with convert so we can pull in both the backing file and the COW image, otherwise we just cp the qcow2 file. This is also faster Signed-off-by: Marcus Sorensen <[email protected]> 1354755241 -0700 Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/7ce22271 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/7ce22271 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/7ce22271 Branch: refs/heads/master Commit: 7ce2227108dd0ffe9d2f7bd75ab1b36190053266 Parents: a91df8f Author: Marcus Sorensen <[email protected]> Authored: Wed Dec 5 17:54:01 2012 -0700 Committer: Marcus Sorensen <[email protected]> Committed: Wed Dec 5 17:54:01 2012 -0700 ---------------------------------------------------------------------- .../kvm/storage/LibvirtStorageAdaptor.java | 14 ++++++++++---- scripts/storage/qcow2/create_private_template.sh | 8 +++++++- scripts/storage/qcow2/createtmplt.sh | 6 ++++++ scripts/storage/qcow2/createvolume.sh | 6 ++++++ 4 files changed, 29 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7ce22271/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java index 6c55743..2a603cb 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java @@ -688,10 +688,16 @@ public class LibvirtStorageAdaptor implements StorageAdaptor { PhysicalDiskFormat destFormat = newDisk.getFormat(); if ((srcPool.getType() != StoragePoolType.RBD) && (destPool.getType() != StoragePoolType.RBD)) { - Script.runSimpleBashScript("qemu-img convert -f " + sourceFormat - + " -O " + destFormat - + " " + sourcePath - + " " + destPath); + if (sourceFormat.equals(destFormat) && + Script.runSimpleBashScript("qemu-img info " + sourcePath + "|grep backing") == null) { + Script.runSimpleBashScript("cp -f " + sourcePath + " " + destPath); + + } else { + Script.runSimpleBashScript("qemu-img convert -f " + sourceFormat + + " -O " + destFormat + + " " + sourcePath + + " " + destPath); + } } else if ((srcPool.getType() != StoragePoolType.RBD) && (destPool.getType() == StoragePoolType.RBD)) { Script.runSimpleBashScript("qemu-img convert -f " + sourceFormat + " -O " + destFormat http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7ce22271/scripts/storage/qcow2/create_private_template.sh ---------------------------------------------------------------------- diff --git a/scripts/storage/qcow2/create_private_template.sh b/scripts/storage/qcow2/create_private_template.sh index 4b93380..8e9e26c 100755 --- a/scripts/storage/qcow2/create_private_template.sh +++ b/scripts/storage/qcow2/create_private_template.sh @@ -31,7 +31,13 @@ create_template() { local fspath=$1 local destpath=$2 - qemu-img convert -O qcow2 /$fspath $destpath + # if backing image exists, we need to combine them, otherwise + # copy the image to preserve snapshots/compression + if $qemu_img info "$tmpltimg" | grep -q backing; then + qemu-img convert -O qcow2 /$fspath $destpath + else + cp -f /$fspath $destpath + fi if [ $? -gt 0 ]; then printf " Failed to export template $destpath\n" >&2 http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7ce22271/scripts/storage/qcow2/createtmplt.sh ---------------------------------------------------------------------- diff --git a/scripts/storage/qcow2/createtmplt.sh b/scripts/storage/qcow2/createtmplt.sh index 84d2ba8..152268f 100755 --- a/scripts/storage/qcow2/createtmplt.sh +++ b/scripts/storage/qcow2/createtmplt.sh @@ -100,7 +100,13 @@ create_from_file() { if [ -b $tmpltimg ]; then $qemu_img convert -f raw -O qcow2 "$tmpltimg" /$tmpltfs/$tmpltname else + # if backing image exists, we need to combine them, otherwise + # copy the image to preserve snapshots/compression + if $qemu_img info "$tmpltimg" | grep -q backing; then $qemu_img convert -f qcow2 -O qcow2 "$tmpltimg" /$tmpltfs/$tmpltname >& /dev/null + else + cp -f $tmpltimg /$tmpltfs/$tmpltname + fi fi if [ "$cleanup" == "true" ] http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7ce22271/scripts/storage/qcow2/createvolume.sh ---------------------------------------------------------------------- diff --git a/scripts/storage/qcow2/createvolume.sh b/scripts/storage/qcow2/createvolume.sh index 10fa6dd..527aa68 100755 --- a/scripts/storage/qcow2/createvolume.sh +++ b/scripts/storage/qcow2/createvolume.sh @@ -101,7 +101,13 @@ create_from_file() { if [ -b $volimg ]; then $qemu_img convert -f raw -O qcow2 "$volimg" /$volfs/$volname else + # if backing image exists, we need to combine them, otherwise + # copy the image to preserve snapshots/compression + if $qemu_img info "$volimg" | grep -q backing; then $qemu_img convert -f qcow2 -O qcow2 "$volimg" /$volfs/$volname >& /dev/null + else + cp -f $volimg /$volfs/$volname + fi fi if [ "$cleanup" == "true" ]
