win10在hyper-V下安装windows11 并且启用WSL2 和 WSA(安卓子系统)

发布时间 2023-06-08 21:48:04作者: ayanmw

起因

现在工作电脑是win10,还不太适合升级win11,但是想琢磨一下win11的 WSA (windows Subssytem For Android). 虽然国内不直接支持 安卓子系统,但是网上有办法离线安装.

为什么要用hyper-V下安装win11+wsa ?

今天看了下vmware新版本是 17 , 想着体验下,vmware17 都出了一个 vctl.exe 容器,跟docker类似,有点厉害。 podman 都还没琢磨, vmware vctl 容器就来了.

使用vmware17 安装了win11 ,速度 挺慢的,然后想着开wsl的时候,突然发现, 我主机已经开启 hyper-V + WSL2 , 这个时候vmware是不支持虚拟化的, 里面的操作系统,是无法再次开启虚拟化的,性能受限, 安装就很慢, 无法开启intel XT CPU虚拟化的. (除非关闭主机hyper-V和wsl2 但我不想)

所以想起了 hype-V 支持嵌套虚拟化, 查了一下, hyper-V 可以安装五层hyper-V 然后就卡的不要不要了.按说hyper-V 虚拟机里面的 应该跟外面的 level 一致的啊??? 算了,反正支持 2层 嵌套虚拟化 对于一般人也够用了.

hyper-V 安装win11 需要注意的地方

1 需要开启TPM2.0 以及 CPU 2核+ 内存4GB+ 2 想要开启嵌套虚拟化 , 还需要额外的 使用 PS 来设置 Hyper-V的VM的虚拟化.

实际体验

使用hyper-V 安装win11 , 速度快了很多, 的确微软自己的技术NB的很.

参考链接

Get-Vm
Set-VMProcessor -VMName win11 -ExposeVirtualizationExtensions $true
Get-VMProcessor -VMName win11 | fl | findstr "ExposeVirtualizationExtensions"

==================================

PS C:\WINDOWS\system32> Get-Vm

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

PS C:\WINDOWS\system32> Get-VMProcessor -VMName win11 | fl


ResourcePoolName                             : Primordial
Count                                        : 1
CompatibilityForMigrationEnabled             : False
CompatibilityForOlderOperatingSystemsEnabled : False
HwThreadCountPerCore                         : 0
ExposeVirtualizationExtensions               : True
EnablePerfmonPmu                             : False
EnablePerfmonLbr                             : False
EnablePerfmonPebs                            : False
EnablePerfmonIpt                             : False
EnableLegacyApicMode                         : False
AllowACountMCount                            : True
Maximum                                      : 100
Reserve                                      : 0
RelativeWeight                               : 100
MaximumCountPerNumaNode                      : 6
MaximumCountPerNumaSocket                    : 1
EnableHostResourceProtection                 : False
OperationalStatus                            : {}
StatusDescription                            : {}
Name                                         : 处理器
Id                                           : Microsoft:67501139-8CA7-4D2B-895A-8D365C16D154\b637f346-6a0e-4dec-af52-b
                                               d70cb80a21d\0
VMId                                         : 67501139-8ca7-4d2b-895a-8d365c16d154
VMName                                       : win11
VMSnapshotId                                 : 00000000-0000-0000-0000-000000000000
VMSnapshotName                               :
CimSession                                   : CimSession: .
ComputerName                                 : QH-3FD31PC
IsDeleted                                    : False
VMCheckpointId                               : 00000000-0000-0000-0000-000000000000
VMCheckpointName                             :


PS C:\WINDOWS\system32> Set-VMProcessor -VMName win11 -ExposeVirtualizationExtensions $true


-----------
     

MAC 地址欺骗

为了通过两台虚拟交换机路由网络数据包,必须在第一级 (L1) 虚拟交换机上启用 MAC 地址欺骗。 使用以下 PowerShell 命令完成此操作。
PowerShell

Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On


网络地址转换 (NAT)

第二个选项依赖于网络地址转换 (NAT)。 此方法非常适合于无法使用 MAC 地址欺骗的情况,例如在公有云环境中。

首先,必须在主机虚拟机(“中间”虚拟机)中创建一个虚拟 NAT 交换机。 请注意,IP 地址仅作举例之用,会因环境不同有所差异:
PowerShell

New-VMSwitch -Name VmNAT -SwitchType Internal
New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.100.0/24”

接下来,将 IP 地址分配给网络适配器:
PowerShell

Get-NetAdapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24

每个嵌套的虚拟机必须分配有一个 IP 地址和网关。 请注意,网关 IP 必须指向上一步中的 NAT 适配器。 您可能想要分配 DNS 服务器:
PowerShell

Get-NetAdapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.2 -DefaultGateway 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Netsh interface ip add dnsserver “vEthernet (VmNat)” address=<my DNS server>