一文讲清楚win10中关于vmware,virtualbox,hyper-v,wsl,docker等虚拟化技术共存和嵌套虚拟化的问题

▶︎
all
running...
 注意,查看linux是否支持虚拟化命令:grep vmx /proc/cpuinfo。我的是intelCPU这样做没问题,对于amdCPU应该使用 grep svm /proc/cpuinfo(自己没amd的cpu,请自行确认)。
 wsl2开启嵌套虚拟化只支持win11以上,这里写错了。
 

虚拟机共存问题与解决

win10中关于vmware,virtualbox,hyper-v,wsl,docker等虚拟化技术共存和嵌套虚拟化的问题

这里的wsl指的是wsl2,docker指的是基于wsl2的docker,wsl1不再讨论范围之内。
先说结论,最新版(截止日期2022-9-23)的vmware,virtualbox,可以和wsl,docker,hyper-v共存,这也是默认的情况。这种情况在于使用了基于虚拟化安全技术技术 基于虚拟化的安全(简称 VBS)使用硬件虚拟化功能来创建内存的安全区域,并将其与常规操作系统隔离开来。

详细信息参考微软官网:
https://learn.microsoft.com/zh-cn/windows-hardware/design/device-experiences/oem-vbs

但这里面有个小问题,那就是vmware和virtualbox的嵌套虚拟化不能使用,这里以vmware官方文档举例,virtualbox应该也一样。

参考网址:
https://docs.vmware.com/cn/VMware-Workstation-Pro/16.0/com.vmware.ws.using.doc/GUID-778DD0ED-6FC9-415F-B071-0CEC127BE719.html

所以结论是存在2中情况:
1)打开基于虚拟化的安全,vmware, virtualbox,wsl,hyper-v,docker可以共存。但是vmware和virtualbox不支持嵌套虚拟化。通过如下命令开启基于虚拟化的安全(假设你其他条件都具备),并重启。

bcdedit /set hypervisorlaunchtype Auto

2)关闭基于虚拟化的安全,vmware和virtualbox支持嵌套虚拟化,性能也会有些提升。但是wsl2,hyper-v,以及基于wsl2的docker无法使用。方法如下,重启后生效。

bcdedit /set hypervisorlaunchtype off

那么对于1,怎么使用嵌套虚拟化呢?有两种解决方案:
1)通过hyper-v来新建虚拟机,使用嵌套虚拟化。
2)wsl2默认支持嵌套虚拟化,需要win11以上。
具体如何设置,参考下文。

vmware,virtualbox等虚拟化软件开启嵌套虚拟化。

在最新版的vmware和virtualbox中,可以和wsl2共存。但是这样一来vmware和virtualbox就都不能支持嵌套虚拟化了。想要让他们支持嵌套虚拟化,则需要临时禁用wsl2,最简单的方法是禁用虚拟机监控程序,如下:

bcdedit /set hypervisorlaunchtype off

然后重启,即可。

重启后,确保下图中基于虚拟化的安全已经关闭(打开方式:msinfo32.exe)。

如果关闭了基于虚拟化的安全,这时候打开cpu-v,就会显示支持嵌套虚拟化了(vt-t启用状态是可用的)。

这时候打开vmware,开启嵌套虚拟化功能,打开虚拟机。
发现虚拟机已经支持嵌套虚拟化。

嵌套虚拟化的好处是可以在虚拟机里面安装虚拟机,比如,在docker里面安装安卓。
总结是开启wsl2之后就无法使用vmware或virtualbox的嵌套虚拟化了,自己需要取舍。

基于hyper-v的虚拟机开启嵌套虚拟化。

之前说开启wsl2之后vmware和virtualbox不能开启嵌套虚拟化,这时候我们可以通过hyper-v开启嵌套虚拟化。
需要打开hyper-v,并创建虚拟机。
我们这里创建了名为hyper-debian10的虚拟机。

PS C:\Users\sunshe35> get-vm

Name           State CPUUsage(%) MemoryAssigned(M) Uptime   Status   Version
----           ----- ----------- ----------------- ------   ------   -------
hyper-debian10 Off   0           0                 00:00:00 正常运行 9.0

完了之后,要关机。然后通过如下命令对hyper-debian10开启嵌套虚拟化(true是开启,false是关闭)。

Set-VMProcessor -VMName hyper-debian10 -ExposeVirtualizationExtensions $true

之后启动虚拟机,这时候虚拟机的嵌套虚拟化就可以使用了,这里不再截图。

对wsl2开启嵌套虚拟化。

可以配置文件%UserProfile%/.wslconfig,通过 nestedVirtualization=true 选项开启嵌套虚拟化,但是这项技术仅仅适用于win10以上。这里放弃,要用嵌套虚拟化还是使用hyper-v虚拟机吧。参考官方网址:
https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config

WSL 的安装与配置

0-安装

安装一路默认next。

1-更新镜像

使用如下命令自动替换默认镜像为清华,下载速度更快:

sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list

也可以手动替换,请自行修改 /etc/apt/sources.list 文件进行替换,最好做好备份

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

2-更新系统

sudo apt update 
sudo apt upgrade

若出现错误:

Failed to retrieve available kernel versions.
Failed to check for processor microcode upgrades.

这个报错是neetrestart模块的输出信息,留着也不会有什么影响,可以不用处理,如果想处理的话参考如下:
那么可以通过修改 needrestart 的配置去消去这类报错1:

sudo -e /etc/needrestart/needrestart.conf

在配置文件中找到 kernelhints 和 ucodehints 这两行,取消注释并将值改成 0:

$nrconf{kernelhints} = 0;
$nrconf{ucodehints} = 0;

这样再使用 APT 时就不会有之前的报错了。
直接卸载此软件包也可以:
sudo apt purge needrestart

3-配置桌面环境

首先要安装xfce4模块
sudo apt install xfce4

然后需要修改~/.bashrc文件,主要是添加display的ip。

echo -e "\n##DISPLAY Configuration" >> ~/.bashrc 
echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0" >> ~/.bashrc 
source ~/.bashrc #生效配置

上面前两行代码会在~/.bashrc文件末尾中添加如下内容:

##DISPLAY Configuration
export DISPLAY=172.23.192.1:0

第三行代码会让.bashrc文件立刻生效。
那这个ip 172.23.192.1 是怎么来的呢?在win10下cmd窗口中输入ipconfig就可以看到这个地址:

以太网适配器 vEthernet (WSL):

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::483b:963e:3d9b:341e%66
   IPv4 地址 . . . . . . . . . . . . : 172.23.192.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :

网上也有人在.bashrc文件末尾添加了 export LIBGL_ALWAYS_INDIRECT=1 ,我们这里不配置也不影响。

4-下载和安装VcXsrv软件

VcXsrv下载地址

下载安装VcXsrv软件,有两点需要注意,见下图:
1、display setting选择的时候选择One large window:

2、额外选择添加参数-ac

也可以保存配置(在最后一步),方便后面直接连接。

5-连接wsl

1、通过上面的方式打开VcXsrv软件
2、进入ubuntu控制台,输入 startxfce4 ,然后等待连接即可。稍后就会在VcXsrv软件中看到linux。
最终效果见下图:

wsl2错误排查

如果想关闭,请把enable-feature换成disable-feature

启动 系统虚拟机平台

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

下载linux内核安装包:下载地址,这个不知道是否真的需要下载。

启用"适用于 Linux 的 Windows 子系统"这个功能

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

确保在启动配置中启用了虚拟机监控程序启动。 可以通过运行(提升的 PowerShell)来对此进行验证:

bcdedit /enum | findstr -i hypervisorlaunchtype

如果看到 hypervisorlaunchtype Off ,则会禁用虚拟机监控程序。 使其在提升的 PowerShell 中运行:

bcdedit /set hypervisorlaunchtype Auto

设置wsl版本为2

wsl --set-default-version 2

其他命令

# 开启telnet功能
dism.exe /online /enable-feature /featurename:TelnetClient /all /norestart

# 开启smb服务, 这种方式会自动开启SMB1Protocol-Client和SMB1Protocol-Server服务。
dism.exe /online /enable-feature /featurename:SMB1Protocol /all /norestart

# 开启hyper
dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart

posted @ 2022-09-23 14:36  she35  阅读(9235)  评论(2编辑  收藏  举报