V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
升级到 Windows 11
join
V2EX  ›  Windows

最近折腾 hyper-v 的一些吐槽

  •  1
     
  •   join · 127 天前 · 5855 次点击
    这是一个创建于 127 天前的主题,其中的信息可能已经有所发展或是发生改变。
    hyper-v 就不是给个人用的,都好多年了还不支持文件共享。网络配置很复杂,实际上现在 windows 宿主机也是被虚拟成 hyper-v 的虚拟机,只是一个特殊的带 hyper-v 管理端的操作系统而已。
    网络配置太复杂了,我配置好 internal 模式后,随便关了 public 网络文件共享后,linux 的客户机就 ping 不通 internal 交换机地址了。我为啥要区动网络文件共享?因为配置 samba,想安全一点。然后 samba 也是个巨大的配置坑,我根本不想去碰。
    为啥要用 hyper-v ?
    我被 wsl2 莫名奇妙的网络问题折腾太厉害了,有时候服务能 ping 通,端口也能通,就是不能收发数据通信。。。。很多同学抱怨 wsl2 里面开个 http 服务器有时能连上,有时连不上,就是这个问题。我一个月前碰到一个 rpc 服务连接的问题,调试了好几个小时,就差去动手抓包了,最后由于太晚了,就关机睡下了。第二天开机后问题消失了。。。。。
    docker 和 hyper-v 不能共存,经常会在开机时 docker 报错。尤其是你好几个月从来没有打开过 hyper-v,突然手贱打开了一下就会有这个问题,并且之后会一直伴随你每次开机报错。。。。
    wsl2 有时候你用着用着文件目录就变成了 unreachable,我不想管这个问题,也不想去修,一般都是重新启动 wsl 。
    还有 wsl 是个残废的 linux,很多命令没有,比如 netstat,还有些莫名奇妙的问题,就是用着用着 docker 不能用了。。。。

    如果你要用 wsl2 建议把 hyper-v 禁掉,我已经打算去弄个 vmware 了。
    59 条回复    2021-08-01 22:48:47 +08:00
    learningman
        1
    learningman   127 天前 via Android   ❤️ 5
    wsl2 依赖于 hyper-V,你打算怎么禁。。。
    learningman
        2
    learningman   127 天前 via Android
    docker 你用 WSL 后端呗
    join
        3
    join   127 天前
    @learningman 就是用 wsl 后端,添加或删除服务可以禁掉 hyper 管理端的。
    Jirajine
        4
    Jirajine   127 天前 via Android
    恰恰相反,我觉得 hyper-v 的网络配置应该是最直观的。
    论用户体验肯定不如 VMware workstation/parallels 这种专为桌面用户打造的商业产品,libvirt qemu/kvm 那一套也是一样。
    join
        5
    join   127 天前
    @Jirajine 配置容易,但是要干点事情就拉跨了。。。
    sky96111
        6
    sky96111   127 天前 via Android   ❤️ 1
    确实是个大坑,Windows 内部组件分割的稀裂。开了 HV 网络将无法调整公共网络和专用网络。甚至有时候防火墙会阻止宿主机访问虚拟机,有时候又不会,还要手动配置防火墙规则。前几天突然无论如何都访问不到虚拟机资源了,关防火墙、改桥接无线网卡都没有用,气的直接换 Linux 作主系统了
    noparking188
        7
    noparking188   127 天前
    我还在用 wsl1,不过 vscode 老是提醒我赶紧切换到 wsl2
    我开 docker 它提示是用的 wsl2 做引擎,具体也不懂,我都在 powershell 里使用 docker 命令
    感觉 windows 作为开发主力最好再搞台 Linux 服务器
    webshe11
        8
    webshe11   127 天前 via Android
    老夫从来都是 LTSC + VMware 一把梭 就是干
    Yadomin
        9
    Yadomin   127 天前
    Public 和 Private 的网络仅限 Get-NetConnectionProfile 中出现的接口可以使用 Set-NetConnectionProfile 修改
    这个是永久的,设置了就不用了管了
    其他接口想要关闭防火墙需要 Set-NetFirewallProfile -DisabledInterfaceAliase "Interface Name"
    这个是一次性的,重启需要重新设置
    hanxiV2EX
        10
    hanxiV2EX   127 天前 via Android
    我换回 vbox 了
    jedihy
        11
    jedihy   127 天前   ❤️ 2
    1. hyper-v 的宿主机并没有被虚拟化。
    2. 文件共享 enhanced session 你可以直接 ctrl+c 。在虚拟机设置里面,Integration services 里面勾上 guest service,自动映射 host 的所有磁盘到虚拟机。
    3. Internal 模式的 vmswitch 只有主机和同在这个 switch 下面的 vm 才能互访。
    Yadomin
        12
    Yadomin   127 天前 via Android   ❤️ 4
    Routeros
        13
    Routeros   127 天前 via Android
    hyper-v wsl 不会用第二次的人路过
    efaun
        14
    efaun   127 天前
    @sky96111 #6 我用 wsl2 安装的 docker,python 容器除了 22 端口以外,其他都无法访问,bridge 和 host 网络都不行,但是 java 容器的所有端口都能访问,太迷惑了,我防火墙都是关的
    owwlo
        15
    owwlo   127 天前
    @Yadomin 原来是这样[震惊脸]!终于明白了为什么说有些游戏的反作弊插件会在开启 hyper-v 的宿主机上检测为运行在虚拟机里!
    jedihy
        16
    jedihy   127 天前   ❤️ 1
    @Yadomin
    @owwlo
    只是逻辑上是 hypervisor 在 host 下面。VM 都是跑在 host 的 vmwp 进程里面。host 对物理 cpu 和内存是 direct access 。
    jedihy
        17
    jedihy   127 天前
    @Yadomin
    @owwlo
    嗯,我说错了。还真是虚拟机。
    gBurnX
        18
    gBurnX   127 天前
    要玩物理机虚拟化,建议还是 VMware ESXi,毕竟是地球上虚拟化一哥。其他品牌多多少少有问题,特别是某国内品牌,连个集群关机的功能都没有,关机还要拼手速,简直就是搞笑。
    echo1937
        19
    echo1937   126 天前
    我是因为 vagrant 来使用 hyper-v 的,
    VMware 的 provider 需要额外购买插件,
    vbox 还要额外安装就使用了 hyper-v,

    结果 vagrant 功能支持上有一堆限制,
    比如不能指定虚拟机的 ip 地址,管理界面也难用,
    用户体验差 VMware 和 vbox 一大截,
    内存自动扩展算是一个优势吧,
    估计除了 Azure 自家,市场份额小得很。
    KaynW
        20
    KaynW   126 天前
    docker 和 hyper-v 不能共存 ??? 问号脸
    bfdh
        21
    bfdh   126 天前
    最终我也放弃了 hyper-v 和 wsl(2),现在要么用 windows 主机+vmware,要么用 linux 主机+vbox 。
    bfdh
        22
    bfdh   126 天前
    @sky96111 我也是用 Linux 做主操作系统,Vbox 开 windows,但是 Vbox 经常 CPU 占用高,即使 windows 处于空闲状态。这个有解决方案吗?
    soulzz
        23
    soulzz   126 天前
    碰到过 hyper-v 虚拟机死机,重启无法启动,有检查点也无法还原
    坑的一批
    建议老老实实 kvm
    lingxi27
        24
    lingxi27   126 天前
    直接 linux 桌面版不就得了
    cheng6563
        25
    cheng6563   126 天前   ❤️ 1
    Hyper-V 的网络真的是一言难尽,我只是想整个 NAT 让虚拟机脸上网,鬼知道为什么虚拟机会分到和主机一样的 IP 导致双双断网。然后重启他又正常了。
    wolfie
        26
    wolfie   126 天前
    docker for windows 就是基于 hyper-v 的吧
    whale
        27
    whale   126 天前
    Windows Server 下的 Hyper-V 还是挺好用的,Windows 10 就……
    debuggerx
        28
    debuggerx   126 天前   ❤️ 1
    别的不说,虚拟 Linux 的图形性能极差。
    我的笔记本已经是双系统了,留着 win 的唯一原因是,linux 没有好用的无线投屏方案,办公室开会的时候需要进 Win 投屏,然后虚拟机挂载物理硬盘启动 Linux 做演示。最开始用 Hyper-V,好家伙直接卡成 ppt,1fps 可能都不到,而且挂载前还必须让物理磁盘脱机;后来试了 VMWare player,性能很好,图形显示流畅,大概有个 30fps,但是也要脱机硬盘;最后用的 VBox,图形性能不如 VM,大概 20fps 吧,但是终于可以不用脱机硬盘了……
    zoain
        29
    zoain   126 天前
    @bfdh 我用的精简 win 7 还行
    zone10
        30
    zone10   126 天前
    之前一直用的 VirtualBox, 用过 wsl2 后 VirtualBox 暂时可以抛了, 目前没遇到问题. Docker Desktop 也可以用 wsl2, 使用体验就是爽的批爆, 回不去了
    libook
        31
    libook   126 天前   ❤️ 1
    emmmm,WSL1 用过挺长一段时间,最近一年都在用 WSL2,基本用来做 Web 全栈开发,有时候还打个 Docker 镜像和 you-get 一些学习资料。

    个人遇到的 WSL2 目前最大的短板有两个:一个是 IP 不固定(只有 WSL2 有这个问题,自己建的虚拟机不会有这个问题);另一个是因为是类似 chroot 的环境所以没有系统启动阶段,这样会导致 systemd 等一众工具没法用。

    但实际上 WSL 面向的场景从来就是那 80%的应用开发场景,不涉及系统和硬件的那一部分,有剩下 20%特殊需求肯定还是要考虑虚拟机或双系统。不过这 80%对于我来说完全够用了。

    文件共享,我没有在 Hyper-V 上直接用过这个功能,因为 WSL2 的话应该会帮你把 Windows 的分区都挂载好了,你可以 df 看一下是不是这样,我用的 Arch 发行版,Widnows 的分区会自动挂在 /mnt 下面,所以一般我不需要单独再配置一个文件共享功能。

    Docker 的话不知道你说的是不是 Docker Desktop for Windows,这个应该是有一个引擎是直接用 Hyper-V 的,你可以去设置里看看,而且它还专门适配了 WSL2 (基于 Hyper-V ),都有适配了肯定是希望你能两个一起开配合使用的,你说的不能共存的问题我没有遇到过。但是说实话,Windows 和 Mac 上的 Docker Desktop 真的是很难用,我现在基本都是把他们卸载掉,用 docker-machine 的方案直接在虚拟机里跑一个完整的 Linux,然后再跑满血的 Docker,不用 docker-machine 工具的话你自己创建一个虚拟机装个 Linux,然后装 Docker 配置一个局域网访问,最后在 WSL 里配置一个 DOCKER_HOST 环境变量就可以直接用指令操纵虚拟机里的 Docker 服务了。

    netstat 我的 WSL2 里可以用,你看看是不是要装个 net-tools 软件包,这个在很多 Linux 发行版都是不预装的,手动安装一下就好。

    总结下来就是:
    1. WSL 的设计目标是应用开发的时候用的,硬件开发、系统开发、跑服务都不是它能胜任的。
    2. WSL2 和自己创建的 Hyper-V 虚拟机差别比较大,有跑服务的需求可以自己创建虚拟机并配置固定 IP 。
    3. 有问题可以把问题发出来,大家帮你解决,很多事情下结论还比较早,只要你还有那么一点点热情,问题都会解决的。
    pkoukk
        32
    pkoukk   126 天前
    之前用 hyperv 和 wsl2 开发了一年左右吧,除了偶尔出现 localhost 不通的情况,其他好像也没啥问题
    网络上的问题大多数都能通过 wsl --shutdowm 解决
    至于为啥现在不用了...因为内存占用太高了,公司发的本配置不咋滴
    andyangyu
        33
    andyangyu   126 天前
    @echo1937 我也走了这个坑, 后来发现 win10 新版 Virtualbox 和 hyper-v 可以共存, vagrant 就可以用 virtualbox 作为后端了.
    sky96111
        34
    sky96111   126 天前 via Android
    @bfdh 我直接用的 QEMU
    df0618
        35
    df0618   126 天前
    @libook IP 你装了 docker 的话可以直接 host.docker.internal
    xman99
        36
    xman99   126 天前
    本地开发 php 的,开启 wsl2 内置功能后,卡到无法工作。 把 docker 桌面版 里面 wsl2 内联关闭后,还可以的。就是单次接口需要 2s 左右才响应的
    join
        37
    join   126 天前 via iPhone
    @libook 这就是 windows 坑的所在,每个用户的环境不一致,导致遇到的问题也不一样。你看起来配置没问题运行得好好的,但出了问题搜索引擎通常解决不了问题。而且微软的提问社区工作人员回答质量非常差,根本解决不了问题。 你也找不到地方去解决问题,这就是闭源的问题所在。这对开发者是不友好的。开发者的使用环境和普通用户真的不一样。我依赖的组件是我工作必须,它不工作了,我也没法工作了,我的软件也没法工作了。而普通用户遇到问题换个电脑或软件,或重装操作系统就解决了。
    fuxiuyin
        38
    fuxiuyin   126 天前 via iPhone
    最简单的 hyper-v 网络就是创建一个 internel 的 switch,然后加一个 nat 。直接搜 hyper-v internel switch internet access
    join
        39
    join   126 天前 via iPhone
    @fuxiuyin 这些我都干了,也能用了但就是中途会出问题,而且解决不掉。
    bfdh
        40
    bfdh   126 天前
    @zoain #29 Win7 我没试过,不知道有没有这个问题。不过现在有点不敢用各类修改版 /精简版,还是更相信官方原版。

    @sky96111 #34 我有同事用 QEMU 的,一样存在 CPU 占用高的问题。
    honkki
        41
    honkki   126 天前
    wsl2 真的难用 一直用的 wsl1 docker 直接跑在 vmware 虚拟机
    xsen
        42
    xsen   126 天前
    virtualbox + Ubuntu(bridge) + docker + portianer
    WenjieYe
        43
    WenjieYe   126 天前
    可能是能力有限,一直没搞懂 Hyper- V 的网络设置
    Rache1
        44
    Rache1   126 天前
    @xman99 直接用 wsl 挂载 /mnt 挂载项目的话很慢。。。我的一个空项目都要 6s+ 😂
    xman99
        45
    xman99   126 天前
    @Rache1 #44 所以 我放弃 wsl2 模式,直接用 hyper 的模式了
    bl
        46
    bl   126 天前
    使用 linux
    hijoker
        47
    hijoker   126 天前
    直接 vmware 就完了,折腾 wsl 这些都是自己找罪受
    libook
        48
    libook   126 天前
    @df0618 #35 Docker Desktop 会自动在 WSL2 下设置好,可以直接用 docker 指令,IP 问题主要是自己跑一些服务的时候在 Windows 上不好确定应该使用哪个 IP 来访问,因为每次重启电脑都会随机一个新的 IP 。
    terence4444
        49
    terence4444   126 天前 via iPhone
    忍了 HyperV 两个月实在受不了了,换成了 VirtualBox
    libook
        50
    libook   126 天前
    @join #37 WSL 毕竟不是真正的 Linux 操作系统,微软也不是这么标榜的,所以还是要看 WSL 究竟能解决什么问题,然后看是否能满足自己的需求,再决定用不用。

    想要玩转 WSL 需要了解的信息还是挺多的,有些信息不了解全屏 Linux 的思维定式就很容易发生预期之外的事情,而且大多资料国内找不到,官方文档也没有,我找到的不少有用信息都是在 microsoft/WSL 的 GitHub Issues 里。

    我自己有两台 Windows,一台日常使用另一台当做服务器,配置 WSL 环境都比较顺,WSL 满足不了的也都找到了替代方案。

    所以我对 WSL 的评价可能没你那么差,个人建议还是冷静下来,有什么以为可以来 V 站上问,大多问题应该都是能找到答案的。
    MiketsuSmasher
        51
    MiketsuSmasher   126 天前
    @Yadomin 不会这就是老电脑装 Windows10 性能差的原因之一吧?
    anubu
        52
    anubu   126 天前 via Android
    Windows Server 2019 + Hyper-V + Debian 10 + Docker + Kubernetes

    稳定使用一年多,没怎么折腾,没碰到太奇怪的网络问题。
    abeholder
        53
    abeholder   126 天前
    上面提到 WSL2 不能固定 ip 的可以用下 wsl2host ;

    wsl2 要不是图它启动速度快 ,我都打算换回 Vargrant + VirtualBox 了...
    abeholder
        54
    abeholder   126 天前
    顺便一提 ,关于 ·wsl2 有时候你用着用着文件目录就变成了 unreachable· ,

    这个简直不能再认同 ,每次都得重启 wsl2 才能解决 。重启 wsl2 导致 宿主机的 docker 也得跟着重启,有时候 docker 还因为 wsl2 死活启动不起来 ,不过最近更新了几次 docker 之后,貌似没发现 docker 起不来的问题了 。
    FrankHB
        55
    FrankHB   126 天前
    看标题就猜吐槽这个,还真对了。
    我补个更直接的:那个分辨率,高分屏用起来就是呵呵……
    然后 VirtualBox 卡翔+论坛里一坨回答的都追不上版本答非所问(当时遇到 Hyper-V 共存问题)。。。
    Windows 桌面用省事还是老实 VMware 吧。
    FrankHB
        56
    FrankHB   126 天前
    @abeholder 跑个题,没怎么用 Docker,没遇到 WSL 问题,倒是出现过不止一次 Docker 把自己更新得起不来的状况……一次是更新后 docker.exe 就是坏的,还有一次把 docker-compose.exe 写坏了……
    thtznet
        57
    thtznet   121 天前
    @Yadomin 这说明 hyper-v 的虚拟层设计得非常好,性能损失非常小,甩对手几条街,虽然客户端的操作 UI 的确设计得不那么易用。
    thtznet
        58
    thtznet   121 天前
    join
        59
    join   117 天前 via iPhone
    @thtznet 其实性能损失挺多的,至少编译程序要慢很多。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1040 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:01 · PVG 07:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.