B.13. マイグレーションに失敗しエラーが発生 Error: unable to resolve address

現象
QEMU ゲストマイグレーションが失敗し、以下のエラーメッセージが表示される。
# 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
たとえば、移行先のホスト名が "newyork" であるとすると、エラーメッセージは以下のようになります。
# virsh migrate qemu qemu+tcp://192.168.122.12/system
error: Unable to resolve address 'newyork' service '49155': Name or service not known
しかし、ホスト名 "newyork" はどこにも使用していないため、このエラーには違和感があります。
調査
マイグレーション中に、移行先ホスト上で稼働しているlibvirtd はマイグレーションデータの受信を予想しているアドレスおよびポートから URI を作成し、これをソースホスト上で稼働している libvirtd に送信します。
上記の例では、移行先ホスト (192.168.122.12) は名前を 'newyork' に設定していました。何らかの理由で、そのホスト上で実行中の libvirtd は IP アドレスに対して名前を解決できず、送信されるべきものが有効なままとなっています。このため、ソースの libvirtd が名前を解決することを期待して、ホスト名 'newyork' が返されました。DNS が適切に設定されていなかったり、/etc/hosts にローカルループバックアドレス (127.0.0.1) に関連するホスト名があったりすると、このようなことが発生します。
マイグレーションデータに使用されるアドレスは、移行先 libvirtd への接続に使用されるアドレス (たとえば、qemu+tcp://192.168.122.12/system) から自動的に決定されることはありません。これは、移行先 libvirtd と通信するために、ソースの libvirtd は (別のマシンで実行中かもしれない) virsh が必要とするネットワークインフラストラクチャーとは別のものを使用する必要がある場合があるためです。
解決法
最善の解決法は、DNS を正しく設定し、マイグレーションに関連するすべてのホストがすべてのホスト名を解決できるようにすることです。
DNS をこのように設定できない場合は、各ホスト上の /etc/hosts ファイルにマイグレーションに使用するすべてのホストのリストを手動で追加することができます。しかし、動的な環境ではそのようなリストの一貫性の維持は困難です。
どの方法でもホスト名を解決可能にできない場合、virsh migrate はマイグレーションホストの特定をサポートします。
# virsh migrate qemu qemu+tcp://192.168.122.12/system tcp://192.168.122.12
移行先 libvirtdtcp://192.168.122.12 URI を取得し、自動生成されたポート番号を追加します。この番号が望ましくない場合は (たとえば、ファイアウォール設定のため)、ポート番号は以下のコマンドで指定できます。
# virsh migrate qemu qemu+tcp://192.168.122.12/system tcp://192.168.122.12:12345
別のオプションでは、トンネル化したマイグレーションを使用します。トンネル化したマイグレーションでは、マイグレーションデータ用に別の接続を作成しませんが、その代わりに移行先 libvirtd との通信で使用される接続でデータをトンネルします。(たとえば、qemu+tcp://192.168.122.12/system)
# virsh migrate qemu qemu+tcp://192.168.122.12/system --p2p --tunnelled