V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
windyland
V2EX  ›  问与答

wsl 是否已经足够完善?

  •  1
     
  •   windyland · 2020-04-05 12:33:15 +08:00 via Android · 7241 次点击
    这是一个创建于 1712 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很早以前就听说了微软家的 WSL 技术,但是因为对新技术的稳定性抱怀疑态度,所以昨天才用上了基于 WSL 的 Ubnutu,谷歌找了一圈发现很少地方有谈到二代 WSL 的各种坑,由于体验过于愉快(相较于 vmware ),所以萌生了转移开发环境的想法,于是过来问一问大伙 2020 年的 WSL 是否已经足够成熟?还有哪些使用时会遇到的坑?

    39 条回复    2020-05-24 09:43:56 +08:00
    Sngo
        1
    Sngo  
       2020-04-05 12:40:18 +08:00
    刚入手了 windows,安装完 wsl,还没来得及重启体验
    lhx2008
        2
    lhx2008  
       2020-04-05 14:03:22 +08:00
    完善是完善,可是 JetBrains 不完善,VSC 配合还行
    derek80
        3
    derek80  
       2020-04-05 17:05:20 +08:00 via iPhone
    目前 2.0 基本稳定了。docker k3d 跑的很溜。但是仍然期待 ms 出 linux 发行版。
    randyo
        4
    randyo  
       2020-04-05 17:13:23 +08:00 via Android
    @derek80 win10 就是一个发行版😄
    murmur
        5
    murmur  
       2020-04-05 17:23:33 +08:00   ❤️ 3
    wsl 对我来说是弥补命令行的东西,如果是真 linux 我会双系统,win 的兼容机最大优势就是随便装系统,干嘛不用呢
    yicong135
        6
    yicong135  
       2020-04-05 17:53:09 +08:00 via Android
    @derek80 wsl2 docker 启动不了
    Artikel23399
        7
    Artikel23399  
       2020-04-05 17:55:59 +08:00 via Android
    最近一直在用,感觉很舒服,比较麻烦的是外面访问 wsl2 里面的服务,去网上抄了个脚本设置端口转发可以解决
    anguiao
        8
    anguiao  
       2020-04-05 17:56:07 +08:00 via Android
    @yicong135 Docker 装预览版就行,稳定版好像还不可以。
    derek80
        9
    derek80  
       2020-04-05 18:08:13 +08:00 via iPhone
    @yicong135 安装 windows desktop 还会多跑一个 vm, 目前只是没有 systemd init.d 的启动脚本还是可以用的
    derek80
        10
    derek80  
       2020-04-05 18:09:04 +08:00 via iPhone
    我是按完全 Linux 方案安装,然后手动启动 daemon 。
    windyland
        11
    windyland  
    OP
       2020-04-05 18:18:40 +08:00 via Android
    @lhx2008 把端口转发出来,然后不就能连接了😂
    jonah
        12
    jonah  
       2020-04-05 18:19:45 +08:00 via Android
    试用了下 wsl2,遇到连接 vpn,ubuntu 上不了网的问题。又乖乖装了双系统。
    lhx2008
        13
    lhx2008  
       2020-04-05 18:29:34 +08:00
    @windyland #11 就是 Jetbrains 不能直接打开 WSL2 里面的文件夹作为项目,必须是在 Windows 这边
    efaun
        14
    efaun  
       2020-04-05 18:30:52 +08:00 via Android
    leighton
        15
    leighton  
       2020-04-05 18:40:34 +08:00 via iPhone
    @lhx2008 #12 最新的 EAP 版已经支持了
    lhx2008
        16
    lhx2008  
       2020-04-05 18:48:18 +08:00
    @leighton #15 请问哪个地方写了,没找到
    lhx2008
        17
    lhx2008  
       2020-04-05 18:55:58 +08:00
    @leighton #15 https://youtrack.jetbrains.com/issue/IDEA-197573 这里说每个语言的兼容性还有待支持,虽然我还不太清楚兼容性的问题在哪里
    richard1122
        18
    richard1122  
       2020-04-05 20:45:09 +08:00
    wsl2 很不错,编译 chromium 啥的都没问题,vscode remote 和 android studio 跑在 remoteX 上都不卡
    Remember
        19
    Remember  
       2020-04-05 20:52:58 +08:00
    wsl2 就是一个 hyperv 虚拟机, 剪裁过的, 为毛不装 hyperv,virtualbox ,自己装 Ubuntu?
    anguiao
        20
    anguiao  
       2020-04-05 21:19:23 +08:00 via Android   ❤️ 4
    @Remember 好像说反了吧,既然 WSL 2 有完整的 Linux 内核,为什么还要另外装一个虚拟机呢?
    更不要说 WSL 2 有更快的启动速度、更小的资源占用、更方便的互操作。
    WSL 2 里面可以用“code .”直接调用 Windows 的 VSCode 打开当前目录,虚拟机没法方便的实现这一点吧?
    windyland
        21
    windyland  
    OP
       2020-04-05 21:36:38 +08:00 via Android
    @Remember 我就是用惯了 VMware,但是一直苦于虚拟机的各种不便( IP 配置,文件共享,内存分配),所以才在体验 wsl 之后赞不绝口的✧٩(ˊωˋ*)و✧
    sunhk25
        22
    sunhk25  
       2020-04-05 21:38:39 +08:00 via Android
    wsl 里用 Ubuntu 搭建 Nginx 服务器可行吗
    kindjeff
        23
    kindjeff  
       2020-04-05 21:39:12 +08:00
    使用 MacOS 三年的 vim 用户,因为疫情已经使用 wsl2+Extraterm 工作两个月了,真香。
    以前的各种乱七八糟小毛病都解决的七七八八,差不多完全可以用来工作了。

    还存在的问题:
    - 快捷键。比如 terminal 和其他应用里的复制粘贴按键就不一样,用 ahk 调过也没搞成功( Linux 同样有这个问题)
    - 内存泄漏。写个.wslconfig 限制一下最大内存可以一次性解决(最吃内存的通常是几个 docker 容器,MacOS 同样要限制 docker-machine 的最大内存,所以影响不大)
    - 每次重启完:docker 需要手动启动、hosts 会被复原、sysctl 改的东西需要重新改。我写了一个 start.sh 每次重启完电脑打开 terminal 都手动运行一下。
    - 把默认 shell 设置成 fish 时,Extraterm 会有毛病。不过可以配置 terminal 启动 shell 和 tmux 的启动 shell 来曲线实现默认 shell 的效果。
    kindjeff
        24
    kindjeff  
       2020-04-05 21:43:08 +08:00
    还有一个网络问题,我自己配置透明代理在网关层所以无所谓。问题就是 wsl2 外面启动的应用在 wsl2 里面不能用 127.0.0.1 访问到(因为是虚拟机),所以如果想在 wsl2 里面使用运行在宿主机上的代理工具,比如 clash,需要配置 clash 允许 LAN 访问,然后在 wsl2 里设置 proxy 为宿主机 LAN 地址(比如 192.168 )。
    windyland
        25
    windyland  
    OP
       2020-04-05 21:46:54 +08:00
    @kindjeff 非常感谢您详尽的回复,让我少踩一些坑(跑题:扇贝英语全家桶很棒)
    ErrorMan
        26
    ErrorMan  
       2020-04-05 22:10:00 +08:00   ❤️ 1
    @kindjeff 我有一些 WSL 1 下的经验,可能 WSL 2 下也可以用,docker 类的服务可以通过在 Widnwos 的启动文件夹里放置快捷方式来实现开机自动启动服务,启动文件夹运行 ”shell:startup" 可以直达; hosts 是每次系统启动时从 windows 端直接复制生成的,所以需要定制 hosts 的时候去修改 windows 那边的 hosts 就可以生效。
    ErrorMan
        27
    ErrorMan  
       2020-04-05 22:10:40 +08:00
    @ErrorMan 修正:Widnwos -> Windows
    luzemin
        28
    luzemin  
       2020-04-05 22:14:36 +08:00
    最近尝试 WSL2+.NET Core+Docker 的尝试,https://www.cnblogs.com/talentzemin/p/12581028.html
    hwdef
        29
    hwdef  
       2020-04-05 23:00:57 +08:00
    wsl1 本身 IO 性能太差。wsl2 与主机的 IO 太差,wsl2 的网络是个问题,不像 wsl1 那么方便。
    systemcall
        30
    systemcall  
       2020-04-06 00:23:33 +08:00 via Android
    @Remember hyper-v 装 ubuntu 点几下就行了,微软自己搞的定制版虚拟机启动快不少,沙盒和应用程序防护也比自己搭的方便吧。可惜不能像以前那样和 win32 交互了
    mooyo
        31
    mooyo  
       2020-04-06 02:11:37 +08:00 via iPhone
    目前从 linux 迁移到了 wsl2 以下问题需要注意
    win 关闭快速启动,否则 localhost 转发会偶尔出现问题
    不要跨系统 io,效率非常低。
    vscode remote 是个好东西。
    使用 genie 解决 systemd 的问题。
    通过开机脚本解决自启动问题。
    localhost 转发不是对所有场景都生效,原因未知。
    ZZSZZSZZS
        32
    ZZSZZSZZS  
       2020-04-06 10:39:45 +08:00 via iPhone
    @mooyo 我这迁移到了 wsl2,快速启动工作正常,应该是微软的 bug,之前我把 Windows defender 内核防护打开后也出现过快速启动无法运行的情况,后来重装系统了快速启动就又有了
    Osk
        33
    Osk  
       2020-04-06 10:45:53 +08:00
    我可以说有点鸡肋吗。。。

    wsl1:io 感人,特别是 npm 什么的来一个,会慢到怀疑人生。
    wsl2:hyper-v 了,rootfs 是 vhdx 了,io 大大提升了,但和主机文件系统交互变成 9pfs 了,9p 也更慢了,这是我 kvm+9p 的体验:/www.v2ex.com/t/656569


    另外,wsl2 和其他 hypervisor 冲突也很烦。wsl2 有时莫名其妙的占用大量内存,即使没有启动 wsl2.
    既然都是虚拟机,那我为何不自己开个虚拟机呢?除了没有主机文件系统直通只好用 smb 外,其它功能暂时用不上。而且自己的虚拟机 **不用焦虑重装 Windows 后我如何导入之前的 wsl 环境!!**


    之前开玩笑说 wsl 我是用来算 hash 的,被喷了,然而事实就是,wsl 我用了后,最终还是起了自己的虚拟机干活,wsl 在我这里是作为命令行的补充。所以目前还是 wsl1,因为 9p 的慢和 wsl2 吃内存我无法接受,反正做开发等工作是在自己的虚拟机里面的,无所谓了,而且自己的虚拟机在需要时我还能直接重启切换成实体机启动,获得更好的性能和直接的硬件访问。


    对于我个人来说:做 wsl2 还不如把 wsl2 的 9pfs 等功能移植到 hyper-v ( wsl2 底层本来就是 hyper-v ),hyper-v 本身也有快速创建 guest 的功能,易用性方面也不会差。另外,我个人使用 linux 时经常需要直接访问 usb 硬件,hyper-v 也好,wsl2 也好,都不支持。。。
    ZZSZZSZZS
        34
    ZZSZZSZZS  
       2020-04-06 10:46:38 +08:00 via iPhone
    wsl2 网络有大问题,首先是没有双向 localhost 映射,wsl 里不能通过 localhost 访问 Windows,另外无法用过局域网连接到 wsl 里的端口,必须手动添加端口转发啥的,最后是我的电脑上 hyperv 的 dns 服务一直有问题,用 dhcp 出来的 dns 服务器上不了网,需要手动改 dns,这个不仅是 wsl 这样,所有用了 hyperv 的东西都这样,有可能是和 Windows docker 冲突了,最后 hyperv 的虚拟交换机偶尔会 dhcp 失败,这个时候只需要重置网络就好了。
    ZZSZZSZZS
        35
    ZZSZZSZZS  
       2020-04-06 10:51:56 +08:00 via iPhone
    wsl2 还是有很多不错的地方的,比如启动很快几乎感觉不到,双向文件共享,可以在 wsl 里运行 Windows 的程序等等,io 比 wsl1 极大提升了(除 /mnt ),有了内核,有了 ext4,终于可以愉快的搞交叉编译了,
    Plumes
        36
    Plumes  
       2020-04-06 13:36:43 +08:00 via iPhone
    跨系统 io 的问题还是没有解决,npm run watch 很痛苦
    shunf4
        37
    shunf4  
       2020-04-06 19:07:24 +08:00
    WSL1 真的不太行,我自己在做一些比较高频的 IO 操作比如 rsync 、大仓库 git submodule update 的时候经常会卡住,issue https://github.com/microsoft/WSL/issues/2138 里提到了这个问题并且还没解决。

    然后目前 issue 里提到的最好的 workaround 是用 AutoHotkey 自动时不时调整下窗口大小,这样就能给相关的本不该睡得进程送一个 SIGWINCH 把它唤醒。太蠢了
    LANB0
        38
    LANB0  
       2020-05-24 09:30:36 +08:00 via Android
    你们都没遇到过 wsl2 内存一直增长的问题? 2004 版本,8G 内存编译 openwrt,wsl 的占用能达到 6G,停止编译还不会把内存归还宿主机。看 GitHub 说是早已经解决了,实际用配置文件限制内存会必现蓝屏
    windyland
        39
    windyland  
    OP
       2020-05-24 09:43:56 +08:00 via Android
    @LANB0 openwrt 编译我用 github action,跑编译还真不敢在 wsl 里折腾,能跑 ide 我就心满意足了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   870 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:37 · PVG 05:37 · LAX 13:37 · JFK 16:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.