无法在 Windows 10 上的 WSL2(适用于 Linux 2 的 Windows 子系统)内实例化 qemu-kvm VM

dio*_*scu 6 kvm qemu libvirt windows-subsystem-for-linux ubuntu-18.04

我目前正在 Windows 10 Fast Ring 版本(Build 20161)上尝试适用于 Linux v2 的 Windows 子系统。更具体地说,我尝试使用嵌套虚拟化运行 qemu-kvm 虚拟机,但每次使用 virt-manager 创建新虚拟机的尝试都以失败告终。

\n

我在 WSL2 实例中使用 Ubuntu 18.04,带有自定义构建的内核(其中包括与虚拟化相关的所有内容 - 请参阅本指南: https: //boxofcables.dev/accelerated-kvm-guests-on-wsl-2/)和“在我的 WSL 配置文件中,“nestedVirtualization”设置为“true”。更重要的是,“sudo kvm-ok”在 Ubuntu 实例中运行时会返回积极的结果。

\n

我确实在 Ubuntu WSL 中安装了 DBUS,并且该服务正在运行,所以我相信这不是问题的根源。我正在使用 VcXsrv 来显示 X11 窗口。

\n

以下是我每次尝试时遇到的错误:

\n

Libvirtd.log

\n
2020-07-07 03:33:24.507+0000: 1273: info : libvirt version: 4.0.0, package: 1ubuntu8.17 (Marc Deslauriers <marc.deslauriers@ubuntu.com> Wed, 06 May 2020 14:18:23 -0400)\n2020-07-07 03:33:24.507+0000: 1273: info : hostname: LAPTOP-DRAGOS\n2020-07-07 03:33:24.507+0000: 1273: error : udevGetDMIData:1818 : internal error: Failed to get udev device for syspath \'/sys/devices/virtual/dmi/id\' or \'/sys/class/dmi/id\'\n2020-07-07 03:39:16.636+0000: 1261: error : virNetSocketNewConnectUNIX:715 : Failed to connect socket to \'/var/run/libvirt/virtlogd-sock\': No such file or directory\n2020-07-07 03:39:29.617+0000: 1258: error : virNetSocketNewConnectUNIX:715 : Failed to connect socket to \'/var/run/libvirt/virtlogd-sock\': No such file or directory\n2020-07-07 03:39:29.617+0000: 1258: error : virNetSocketNewConnectUNIX:715 : Failed to connect socket to \'/var/run/libvirt/virtlogd-sock\': No such file or directory\n2020-07-07 04:01:14.141+0000: 1257: error : virKeepAliveTimerInternal:143 : internal error: connection closed due to keepalive timeout\n
Run Code Online (Sandbox Code Playgroud)\n

Virt-manager GUI(当我设置所有选项后单击“开始安装”时):

\n
Unable to complete install: \'Failed to connect socket to \'/var/run/libvirt/virtlogd-sock\': No such file or directory\'\n\nTraceback (most recent call last):\n  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper\n    callback(asyncjob, *args, **kwargs)\n  File "/usr/share/virt-manager/virtManager/create.py", line 2553, in _do_async_install\n    guest.start_install(meter=meter)\n  File "/usr/share/virt-manager/virtinst/guest.py", line 498, in start_install\n    doboot, transient)\n  File "/usr/share/virt-manager/virtinst/guest.py", line 434, in _create_guest\n    domain = self.conn.createXML(install_xml or final_xml, 0)\n  File "/usr/lib/python2.7/dist-packages/libvirt.py", line 3603, in createXML\n    if ret is None:raise libvirtError(\'virDomainCreateXML() failed\', conn=self)\nlibvirtError: Failed to connect socket to \'/var/run/libvirt/virtlogd-sock\': No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n

我做错了什么?\n非常感谢任何意见!提前致谢!

\n

更新:正如@FreeSoftwareServers所建议的,我尝试启动 virtlogd 服务。由于 Ubuntu 18.04 不使用 initd,所以我选择了sudo service virtlogd start. 这让我克服了最初的错误,但现在我似乎遇到了一些权限问题,因为我得到以下信息:

\n
Unable to complete install: \'internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied\n2020-07-08T03:32:26.585442Z qemu-system-x86_64: failed to initialize KVM: Permission denied\'\n\nTraceback (most recent call last):\n  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper\n    callback(asyncjob, *args, **kwargs)\n  File "/usr/share/virt-manager/virtManager/create.py", line 2553, in _do_async_install\n    guest.start_install(meter=meter)\n  File "/usr/share/virt-manager/virtinst/guest.py", line 498, in start_install\n    doboot, transient)\n  File "/usr/share/virt-manager/virtinst/guest.py", line 434, in _create_guest\n    domain = self.conn.createXML(install_xml or final_xml, 0)\n  File "/usr/lib/python2.7/dist-packages/libvirt.py", line 3603, in createXML\n    if ret is None:raise libvirtError(\'virDomainCreateXML() failed\', conn=self)\nlibvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied\n2020-07-08T03:32:26.585442Z qemu-system-x86_64: failed to initialize KVM: Permission denied\n
Run Code Online (Sandbox Code Playgroud)\n

virt-manager GUI 是通过 sudo 运行的,因此这个权限拒绝消息看起来有点令人费解。

\n

最好的问候,\nDrago\xc8\x99

\n

小智 5

在 Windows 11 上,我通过修复 /dev/kvm 来实现此功能:

sudo chown root:kvm /dev/kvm
sudo chmod 660 /dev/kvm
Run Code Online (Sandbox Code Playgroud)

完整设置:

# Install virt-manager
sudo apt install -y virt-manager
 
# Add youself to kvm and libvirt group
sudo usermod --append --groups kvm,libvirt "${USER}"
 
# Fix-up permission to avoid "Could not access KVM kernel module: Permission denied" error
sudo chown root:kvm /dev/kvm
sudo chmod 660 /dev/kvm
 
# Stat required services
sudo libvirtd &
sudo virtlogd &
 
# Launch virt-manager
virt-manager &
Run Code Online (Sandbox Code Playgroud)