这两天一直在断断续续搞这个, 直到今天终于成功了。

前言

由于使用了WSL2开启了Hyper-V, VMware无法使用嵌套虚拟化, 因此就想在wsl2上使用qemu, 这里搞了很久……

环境

Windows版本: Windows10 20161

WSL内核版本: 4.19.121-microsoft-standard

WSL版本: Ubuntu18.04

开启kvm

按照这篇文件就可以了Accelerated KVM guests on WSL 2, 但是要注意的是你按照文章中进行后, 可能会出现以下几个问题:

  • 运行kvm-ok: Your cpu does not support kvm extensions, 这个是windows10 1909的问题, 需要升级windows10的版本, 选择预览版计划就可以了。

  • 无法自动挂载, dmesg显示: ERROR: UtilCreateProcessAndWait:655: /bin/mount failed with status 0x2000 after upgrading to build 20161: 这个是由于最新的wsl内核版本更新以后没有更新配置文件Microsoft/config-wsl (参照这个issue, 开发背锅!), 因此不能使用Microsoft/config-wsl, 可以直接使用来自这个回答的配置文件

  • 无法正常启动, 错误代码4294967295 : 端口被占了, 可能你开启了vpn, 参照这个回答, 使用下面的代码kill占用的程序就可以了, 运行在powershell下

    $processes = Get-Process -Id (Get-NetUDPEndpoint -LocalPort 53).OwningProcess | Select-Object -ExpandProperty Id

    ForEach ($process in $processes) {
    Stop-Process -ID $process -Force
    }

    如果你用的是 Clash 则可以修改 General YAML, 将端口改大防止占用(mixed-porexternal-controller), 配置如下:

    mixed-port: 27890
    allow-lan: false
    log-level: info
    external-controller: '127.0.0.1:29091'
    secret: ''
    ipv6: false

    # Will be ignored after profile selection
    proxies:
    - name: Debug
    type: socks5
    server: 127.0.0.1
    port: 1080
    proxy-groups:
    - name: Proxy
    type: select
    proxies:
    - Debug
    rules:
    - 'MATCH,DIRECT'