diff --git a/src/vmm_mad/remotes/kvm/migrate b/src/vmm_mad/remotes/kvm/migrate index 3a59c5dd4b..8cd966a55c 100755 --- a/src/vmm_mad/remotes/kvm/migrate +++ b/src/vmm_mad/remotes/kvm/migrate @@ -102,7 +102,9 @@ VM_DIR="${XPATH_ELEMENTS[j++]}" # use "force-share" param for qemu >= 2.10 [ "$(get_qemu_img_version)" -ge 2010000 ] && QEMU_IMG_PARAM="-U" -# migration can't be done with domain snapshots, drop them first +# migration can't be done with domain snapshots, drop them first but save current snapshot for redefine +SNAP_CUR=$(virsh --connect $LIBVIRT_URI snapshot-current --name $DEPLOY_ID 2>/dev/null) + SNAPS=$(monitor_and_log \ "virsh --connect $LIBVIRT_URI snapshot-list $DEPLOY_ID --name 2>/dev/null" \ "Failed to get snapshots for $DEPLOY_ID") @@ -245,6 +247,22 @@ if [ $RC -ne 0 ]; then exit $RC fi +# redefine potential snapshots after live migration +if [ "$SHARED" = "YES" ] && [ -n "$SNAP_CUR" ]; then + UUID=$(virsh --connect $QEMU_PROTOCOL://$DEST_HOST/system dominfo $DEPLOY_ID | awk '/UUID:/ {print $2}') + DISK_PATH=$(virsh --connect $QEMU_PROTOCOL://$DEST_HOST/system domblklist $DEPLOY_ID | awk '/disk.0/ {print $2}') + DISK_DIR=$(dirname $DISK_PATH) + + for SNAPSHOT_MD_XML in $(ls ${DISK_DIR}/snap-*.xml 2>/dev/null); do + # replace uuid in the snapshot metadata xml + sed -i "s%[[:alnum:]-]*%$UUID%" $SNAPSHOT_MD_XML + + # redefine the snapshot using the xml metadata file + virsh --connect $QEMU_PROTOCOL://$DEST_HOST/system snapshot-create $DEPLOY_ID $SNAPSHOT_MD_XML --redefine > /dev/null || true + done + virsh --connect $QEMU_PROTOCOL://$DEST_HOST/system snapshot-current $DEPLOY_ID $SNAP_CUR +fi + # Synchronize VM time on background on remote host if [ "$SYNC_TIME" = "yes" ]; then SYNC_TIME_CMD=$(cat <