There are several ways to backup virtual machines and as Nodegrid becomes a popular choice for hosting virtual machines in the data center or at the edge running on our Nodegrid Service Routers, administrators need a way to backup and restore the VM.
Nodegrid does not backup virtual machines when your run a Nodegrid Backup, therefore, you must backup virtual machines on your own with built-in command line utilities or third-party software.
This article will show how to backup a running VM live and then restore it in case of disaster. The method shown below relies on default values for backup and will 'push'
the backup to same location that the image is running at. For more control of which disks to backup and type of backup, refer to https://libvirt.org/formatbackup.html
As of Nodegrid OS 5.10.1, there is no way to backup via the UI, instead this must be done as root user.
To become root, login as Nodegrid admin that has sudo access. Connect to the console or ssh. If your admin user is in a CLI shell on startup, use the 'shell' command to get to a regular Linux shell and then use sudo command to become root.
Following commands will login via ssh to the Nodegrid, become root from CLI shell, and verify that root access was obtained.
shell sudo su -
Backup Virtual Machine
Find the VM you want to backup, use virsh command to list the running virtual machines and make a note of the "Name", this is also known as the Domain.
In this example, the VM we want to backup is ubuntu22.04-2023-6-2. The backup will be stored in same location as the image, by default /var/lib/libvirt/images, begin the backup with following command:
virsh backup-begin ubuntu22.04-2023-6-2
Monitor the backup with virsh domjobinfo command, check Job Type, when it is "None", job is not running, validate completed status with --completed option to the virsh command:
virsh domjobinfo ubuntu22.04-2023-6-2
Check the backup images, there will be more than one if you more than one virtual disk, in the image below, the backup is the qcow2 file with a number appended at the end.
Backup the VM Configuration
Finally, last step is to backup the VM configuration so that you can restore it on this same device. If you restore or migrate to a different device, you may need to rebuild attached NICs or other devices. Run virsh dumpxml for the VM and redirect the output to a file:
virsh dumpxml ubuntu22.04-2023-6-2 > ubuntu22.04-2023-6-2.backup.xml
Save or move the backup image and the dumped XML to your backup location or server.
Restore Virtual Machine from Live Backup
Restoring involves placing the backup image to the images location for your VMs and updating the saved XML from the previous step with the location of the restore image. In this example, I renamed the image to /var/lib/libvirt/images/ubuntu-restored.qcow2. Run these commands as root user.
Edit the xml file ubuntu22.04-2023-6-2.backup.xml and update the line for the disk element and change the source to match the location of the image. For example, from this excerpt below, the line in red is what needs to be edited, and I changed the file value to match the location of my restored image
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/ubuntu22-restored.qcow2' index='2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
Then run the command virsh define /path/to/xml replacing the the path with the location of the XML you uploaded
virsh define /home/admin/ubuntu22.04-2023-6-2.backup.xml
Now start the VM, you can do this via the UI or from virsh. With virsh, use virsh list --all to see the new VM you restored. Then use the VM name to start with virsh start command. Verify the VM is running with virsh list
virsh list --all
virsh start ubuntu22.04-2023-6-2
All of this information was gathered from libvirt documentation site, refer to the links above for more information.