wsl 是否已经足够完善? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
windyland
V2EX    问与答

wsl 是否已经足够完善?

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

    很早以前就听说了微软家的 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     Solana     929 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 20:01 PVG 04:01 LAX 12:01 JFK 15:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86