我正在尝试使用以下方法在 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 管理器中找到。右键单击机器,选择“设置...”->“管理/集成服务”。确保至少在“数据交换”旁边有一个复选标记。