ARM64 服务器中的 Debian armhf 虚拟机(2)

virtio-boot /boot 9p trans=virtio,version=9p2000.L,x-systemd.automount 00

有了这一步,这只是将 /boot 中的文件混到新的文件系统里面,并且客户机完事了(确保 vmlinuz/initrd.img 保持符号链接)。内核可以如常升级,并对主机可见。

这时对于主机端,有另外一个问题需要跨过,由于客户机使用 9p 映射安全模式,客户机的符号链接对主机而言将是普通的包含链接目标的文件。为了解决这个问题,我们在客户机启动前使用 libvirt qemu 的 hook 支持来设置合适的符号链接。作为一个例子,下面是我们最终使用的脚本(/etc/libvirt/hooks/qemu):

vm=$1

action=$2

bootdir=/srv/${vm}-boot

if[ ${action}!="prepare"];then

exit0

fi

if[!-d ${bootdir}];then

exit0

fi

ln-sf $(basename $(cat ${bootdir}/vmlinuz)) ${bootdir}/virtio-vmlinuz

ln-sf $(basename $(cat ${bootdir}/initrd.img)) ${bootdir}/virtio-initrd.img

有了这个,我们可以简单地定义 libvirt 使用 /srv/${vm}-boot/virtio-{vmlinuz,initrd.img} 作为机器的内核 / initramfs,并且当 VM 启动时,它会自动获取客户机安装的最新内核 / initramfs。

只有最后一个边缘情况了,当从 VM libvirt 重启会让 qemu 处理它而不是重启 qemu。如果这不幸发生的话,意味着重启不会加载新内核。所以现在我们通过配置 libvirt 来解决这个问题,从而在重启时停止虚拟机。由于我们通常只在升级内核(安装)时重启 VM,虽然这有点乏味,但这避免了重启加载的是旧内核 / initramfs 而不是预期的。

via: https://www.collabora.com/news-and-blog/blog/2017/06/20/debian-armhf-vm-on-arm64-server/

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/41f3809b460a66b0bb4872cce10b722f.html