Skip to content

Instantly share code, notes, and snippets.

@fabiolimace
Last active September 23, 2024 18:04
Show Gist options
  • Save fabiolimace/ee4171277ddba9cd818add076244ea9e to your computer and use it in GitHub Desktop.
Save fabiolimace/ee4171277ddba9cd818add076244ea9e to your computer and use it in GitHub Desktop.
Exports a virtual machine from VirtManager to a given directory.
#!/bin/bash
#
# Exports a virtual machine from VirtManager to a given directory.
#
# Usage:
#
# # how to export a virtual machine
# ./virt-manager-export.sh EXPORT_DIRECTORY VIRTUAL_MACHINE_NAME
#
# # how to import a virtual machine
# ./VIRTUAL_MACHINE_NAME.import.sh
#
# Notes:
# - it only the default virtual disk format: qcow2;
# - it does not support spaces in VIRTUAL_MACHINE_NAME;
# - it does not support virtual machines with a different virtual disk name;
# - it only finds images in the default images folder: /var/lib/libvirt/images.
#
# PARAMETERS
EXPORT_DIRECTORY=${1}
VIRTUAL_MACHINE_NAME=${2}
# CONSTANTS
VERSION=$(date +'v%Y%m%d')
IMAGES_DIRECTORY=/var/lib/libvirt/images
EXPORT_NAME=${VIRTUAL_MACHINE_NAME}.${VERSION}
[ ! -d "${EXPORT_DIRECTORY}" ] && echo -e "Invalid export directory.\nUsage:\n./virt-manager-export.sh EXPORT_DIRECTORY VIRTUAL_MACHINE_NAME" && exit 1;
[ ! -f "${IMAGES_DIRECTORY}/${VIRTUAL_MACHINE_NAME}.qcow2" ] && echo -e "Invalid virtual machine name.\nUsage\n./virt-manager-export.sh EXPORT_DIRECTORY VIRTUAL_MACHINE_NAME" && exit 1;
sudo -v
echo "virsh dumpxml ${VIRTUAL_MACHINE_NAME} > ${EXPORT_DIRECTORY}/${EXPORT_NAME}.xml"
virsh dumpxml ${VIRTUAL_MACHINE_NAME} > ${EXPORT_DIRECTORY}/${EXPORT_NAME}.xml
echo "sudo cp ${IMAGES_DIRECTORY}/${VIRTUAL_MACHINE_NAME}.qcow2 ${EXPORT_DIRECTORY}/${EXPORT_NAME}.qcow2"
sudo cp ${IMAGES_DIRECTORY}/${VIRTUAL_MACHINE_NAME}.qcow2 ${EXPORT_DIRECTORY}/${EXPORT_NAME}.qcow2
echo "sudo sha256sum ${IMAGES_DIRECTORY}/${VIRTUAL_MACHINE_NAME}.qcow2 > ${EXPORT_DIRECTORY}/${EXPORT_NAME}.sha256sum"
sudo sha256sum ${IMAGES_DIRECTORY}/${VIRTUAL_MACHINE_NAME}.qcow2 > ${EXPORT_DIRECTORY}/${EXPORT_NAME}.sha256sum
echo "echo \"virsh define --file ${EXPORT_NAME}.xml\" > ${EXPORT_DIRECTORY}/${EXPORT_NAME}.import.sh"
echo "virsh define --file ${EXPORT_NAME}.xml" > ${EXPORT_DIRECTORY}/${EXPORT_NAME}.import.sh
echo "virsh dumpxml ${VIRTUAL_MACHINE_NAME} | sed -n '/<description>/,/<\/description>/p' | sed 's/ *<\/\?description>//' > ${EXPORT_DIRECTORY}/${EXPORT_NAME}.txt"
virsh dumpxml ${VIRTUAL_MACHINE_NAME} | sed -n '/<description>/,/<\/description>/p' | sed 's/ *<\/\?description>//' > ${EXPORT_DIRECTORY}/${EXPORT_NAME}.txt
echo "sudo chown $USER:$USER ${EXPORT_DIRECTORY}/${EXPORT_NAME}.*"
sudo chown $USER:$USER ${EXPORT_DIRECTORY}/${EXPORT_NAME}.*
echo "mkdir ${EXPORT_DIRECTORY}/${EXPORT_NAME} && mv ${EXPORT_DIRECTORY}/${EXPORT_NAME}.* ${EXPORT_DIRECTORY}/${EXPORT_NAME}"
mkdir ${EXPORT_DIRECTORY}/${EXPORT_NAME} && mv ${EXPORT_DIRECTORY}/${EXPORT_NAME}.* ${EXPORT_DIRECTORY}/${EXPORT_NAME}
echo "ls -l ${EXPORT_DIRECTORY}/${EXPORT_NAME}/*"
ls -l ${EXPORT_DIRECTORY}/${EXPORT_NAME}/*
echo "Done."
@fabiolimace
Copy link
Author

fabiolimace commented Sep 16, 2024

Usage example

./virt-manager-export.sh /tmp/virt-manager-export ubuntu-22.04-calibre
virsh dumpxml ubuntu-22.04-calibre > /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58.xml
sudo cp /var/lib/libvirt/images/ubuntu-22.04-calibre.qcow2 /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58.qcow2
sudo sha256sum /var/lib/libvirt/images/ubuntu-22.04-calibre.qcow2 > /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58.sha256sum
echo "virsh define --file ubuntu-22.04-calibre.2024-09-16T07:47:58.xml" > /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58.import.sh
virsh dumpxml ubuntu-22.04-calibre | sed -n '/<description>/,/<\/description>/p' | sed 's/ *<\/\?description>//' > /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58.txt
sudo chown usuario:usuario /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58.*
mkdir /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58 && mv /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58.* /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58
ls -l /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58/*
-rw-rw-r-- 1 usuario usuario          65 set 16 07:50 /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58/ubuntu-22.04-calibre.2024-09-16T07:47:58.import.sh
-rw------- 1 usuario usuario 25668878336 set 16 07:49 /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58/ubuntu-22.04-calibre.2024-09-16T07:47:58.qcow2
-rw-rw-r-- 1 usuario usuario         117 set 16 07:50 /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58/ubuntu-22.04-calibre.2024-09-16T07:47:58.sha256sum
-rw-rw-r-- 1 usuario usuario        1591 set 16 07:50 /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58/ubuntu-22.04-calibre.2024-09-16T07:47:58.txt
-rw-rw-r-- 1 usuario usuario        9908 set 16 07:47 /tmp/virt-manager-export/ubuntu-22.04-calibre.2024-09-16T07:47:58/ubuntu-22.04-calibre.2024-09-16T07:47:58.xml
Done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment