
Are you facing 'Libvirt error: Unable to resolve address: name or service not known' ?
This guide is for you.
During migration, libvirtd running on the destination host creates a URI from an address and port where it expects to receive migration data and sends it back to libvirtd running on the source host.
Sometimes, QEMU quest users end up with this error while migrating. This error message usually occurs when the source server cannot resolve to the destination IP causing the failure of migration.
Here at Ibmi Media, as part of our Server Management Services, we regularly help our Customers to handle QEMU guests.
What triggers 'Libvirt error: Unable to resolve address: name or service not known' ?
This error message appears when QEMU guest migration fails:
# virsh migrate qemu qemu+tcp://192.168.122.12/system
error: Unable to resolve address name_of_host service '49155': Name or service not known
For example, if the destination hostname is Arizona, the error message appears as:
# virsh migrate qemu qemu+tcp://192.168.122.12/system
error: Unable to resolve address 'Sydney' service '49155': Name or service not known
However, this error looks strange as we did not use the Sydney host name anywhere.
Cause of this Libvirt error:
This can happen if DNS is not properly configured or /etc/hosts has the hostname associated with the local loopback address (127.0.0.1).
How to resolve 'Libvirt error: Unable to resolve address: name or service not known' ?
1. To fix this error we need to configure DNS correctly so that all hosts involved in migration are able to resolve all hostnames.
2. If we cannot configure DNS, we will have to add the list of every host used for migration manually to the /etc/hosts file on each of the hosts. However, it is difficult to keep such lists consistent in a dynamic environment.
3. Even after doing the above, If the hostnames cannot be made resolvable we can use virsh commands that support migration specifying the migration host:
# virsh migrate qemu qemu+tcp://192.168.122.12/system tcp://192.168.122.12
Destination libvirtd will take the tcp://192.168.122.12 URI and append an automatically generated port number. If this is not desirable, the port number can be specified in this command:
# virsh migrate qemu qemu+tcp://192.168.122.12/system tcp://192.168.122.12:12345
4. Another option is to use tunneled migration.
Tunneled migration does not create a separate connection for migration data, but instead tunnels the data through the connection used for communication with destination libvirtd:
# virsh migrate qemu qemu+tcp://192.168.122.12/system --p2p --tunnelled