hv-kvp-daemon 在 Hyper-V 上的 Ubuntu 16.04 中失败

hv-kvp-daemon 在 Hyper-V 上的 Ubuntu 16.04 中失败

我正在尝试使用以下方法在 Hyper-V 上自动部署 Ubuntu 16.04 VM打包机并预先安装。在我的预安装文件中,我安装了所有必需的依赖项:

d-i preseed/late_command string in-target apt-get install -y --install-recommends linux-virtual-lts-xenial linux-tools-virtual-lts-xenial linux-cloud-tools-virtual-lts-xenial;

安装完成,没有任何问题,重新启动后,服务正在运行:

root@ubunt-xenial:~# systemctl status hv-kvp-daemon.service
 ● hv-kvp-daemon.service - Hyper-V KVP Protocol Daemon
 Loaded: loaded (/lib/systemd/system/hv-kvp-daemon.service; enabled; vendor preset: enabled)
 Active: active (running) since Mon 2018-01-15 13:32:34 UTC 12s ago
 Main PID: 567 (hv_kvp_daemon)
 CGroup: /system.slice/hv-kvp-daemon.service
         └─567 /usr/lib/linux-tools/4.4.0-109-generic/hv_kvp_daemon -n

 Jan 15 13:32:34 ubuntu-xenial systemd[1]: Started Hyper-V KVP Protocol Daemon
 Jan 15 13:32:34 ubuntu-xenial KVP[567]: KVP starting: pid is: 567
 Jan 15 13:32:34 ubuntu-xenial KVP[567]: KVP LIC Version: 3.1

但为了完成打包,虚拟机管理程序应该能够看到客户的 IP 地址。但不知何故,Hyper-V 报告“无联系”:

D:\packer> Get-VMIntegrationService 'ubuntu-xenial'
[...]
ubuntu-xenial  Key-Value Pair Exchange True   No Contact

当我返回虚拟机时,我看到该服务最初正在运行,但随后失败:

 root@ubunt-xenial:~# journalctl
 [...]
 Jan 15 13:33:36 ubuntu-xenial kernel: hv_balloon: Received INFO_TYPE_MAX_PAGE_CNT
 Jan 15 13:33:36 ubuntu-xenial kernel: hv_balloon: Data Size is 8
 Jan 15 13:34:26 ubuntu-xenial KVP[567]: read failed; error:9 Bad file descriptor
 Jan 15 13:34:26 ubuntu-xenial systemd[1]: hv-kvp-daemon.service: Main process exited, code=exited, status=1/FAILURE
 Jan 15 13:34:26 ubuntu-xenial systemd[1]: hv-kvp-daemon.service: Unit entered failed state.
 Jan 15 13:34:26 ubuntu-xenial systemd[1]: hv-kvp-daemon.service: Failed with result 'exit-code'.

当我使用“systemctl restart hv-kvp-daemon.serv ice”手动重启服务时,它确实启动了,但过了一会儿又失败了。正确启动守护进程的唯一方法是关闭机器并再次打开它(重启不会不是工作,我必须手动启动它)。

对于自动构建,我需要运行此服务,有什么方法可以解决这个问题?

tl;dr:hv-kvp-daemon 启动,约 1 分钟后失败,仅需手动重新启动后才能恢复。

答案1

您确定机器已经配置为启用“数据交换”吗?

该选项可以在 Hyper-V 管理器中找到。右键单击机器,选择“设置...”->“管理/集成服务”。确保至少在“数据交换”旁边有一个复选标记。

相关内容