很早以前就听说了微软家的 WSL 技术,但是因为对新技术的稳定性抱怀疑态度,所以昨天才用上了基于 WSL 的 Ubnutu,谷歌找了一圈发现很少地方有谈到二代 WSL 的各种坑,由于体验过于愉快(相较于 vmware ),所以萌生了转移开发环境的想法,于是过来问一问大伙 2020 年的 WSL 是否已经足够成熟?还有哪些使用时会遇到的坑?
1
Sngo 2020-04-05 12:40:18 +08:00
刚入手了 windows,安装完 wsl,还没来得及重启体验
|
2
lhx2008 2020-04-05 14:03:22 +08:00
完善是完善,可是 JetBrains 不完善,VSC 配合还行
|
3
derek80 2020-04-05 17:05:20 +08:00 via iPhone
目前 2.0 基本稳定了。docker k3d 跑的很溜。但是仍然期待 ms 出 linux 发行版。
|
5
murmur 2020-04-05 17:23:33 +08:00 3
wsl 对我来说是弥补命令行的东西,如果是真 linux 我会双系统,win 的兼容机最大优势就是随便装系统,干嘛不用呢
|
7
Artikel23399 2020-04-05 17:55:59 +08:00 via Android
最近一直在用,感觉很舒服,比较麻烦的是外面访问 wsl2 里面的服务,去网上抄了个脚本设置端口转发可以解决
|
9
derek80 2020-04-05 18:08:13 +08:00 via iPhone
@yicong135 安装 windows desktop 还会多跑一个 vm, 目前只是没有 systemd init.d 的启动脚本还是可以用的
|
10
derek80 2020-04-05 18:09:04 +08:00 via iPhone
我是按完全 Linux 方案安装,然后手动启动 daemon 。
|
12
jonah 2020-04-05 18:19:45 +08:00 via Android
试用了下 wsl2,遇到连接 vpn,ubuntu 上不了网的问题。又乖乖装了双系统。
|
13
lhx2008 2020-04-05 18:29:34 +08:00
@windyland #11 就是 Jetbrains 不能直接打开 WSL2 里面的文件夹作为项目,必须是在 Windows 这边
|
14
efaun 2020-04-05 18:30:52 +08:00 via Android
否
|
17
lhx2008 2020-04-05 18:55:58 +08:00
@leighton #15 https://youtrack.jetbrains.com/issue/IDEA-197573 这里说每个语言的兼容性还有待支持,虽然我还不太清楚兼容性的问题在哪里
|
18
richard1122 2020-04-05 20:45:09 +08:00
wsl2 很不错,编译 chromium 啥的都没问题,vscode remote 和 android studio 跑在 remoteX 上都不卡
|
19
Remember 2020-04-05 20:52:58 +08:00
wsl2 就是一个 hyperv 虚拟机, 剪裁过的, 为毛不装 hyperv,virtualbox ,自己装 Ubuntu?
|
20
anguiao 2020-04-05 21:19:23 +08:00 via Android 4
@Remember 好像说反了吧,既然 WSL 2 有完整的 Linux 内核,为什么还要另外装一个虚拟机呢?
更不要说 WSL 2 有更快的启动速度、更小的资源占用、更方便的互操作。 WSL 2 里面可以用“code .”直接调用 Windows 的 VSCode 打开当前目录,虚拟机没法方便的实现这一点吧? |
21
windyland OP @Remember 我就是用惯了 VMware,但是一直苦于虚拟机的各种不便( IP 配置,文件共享,内存分配),所以才在体验 wsl 之后赞不绝口的✧٩(ˊωˋ*)و✧
|
22
sunhk25 2020-04-05 21:38:39 +08:00 via Android
wsl 里用 Ubuntu 搭建 Nginx 服务器可行吗
|
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 的效果。 |
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 )。
|
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 就可以生效。
|
28
luzemin 2020-04-05 22:14:36 +08:00
最近尝试 WSL2+.NET Core+Docker 的尝试,https://www.cnblogs.com/talentzemin/p/12581028.html
|
29
hwdef 2020-04-05 23:00:57 +08:00
wsl1 本身 IO 性能太差。wsl2 与主机的 IO 太差,wsl2 的网络是个问题,不像 wsl1 那么方便。
|
30
systemcall 2020-04-06 00:23:33 +08:00 via Android
@Remember hyper-v 装 ubuntu 点几下就行了,微软自己搞的定制版虚拟机启动快不少,沙盒和应用程序防护也比自己搭的方便吧。可惜不能像以前那样和 win32 交互了
|
31
mooyo 2020-04-06 02:11:37 +08:00 via iPhone
目前从 linux 迁移到了 wsl2 以下问题需要注意
win 关闭快速启动,否则 localhost 转发会偶尔出现问题 不要跨系统 io,效率非常低。 vscode remote 是个好东西。 使用 genie 解决 systemd 的问题。 通过开机脚本解决自启动问题。 localhost 转发不是对所有场景都生效,原因未知。 |
32
ZZSZZSZZS 2020-04-06 10:39:45 +08:00 via iPhone
@mooyo 我这迁移到了 wsl2,快速启动工作正常,应该是微软的 bug,之前我把 Windows defender 内核防护打开后也出现过快速启动无法运行的情况,后来重装系统了快速启动就又有了
|
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 也好,都不支持。。。 |
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 失败,这个时候只需要重置网络就好了。
|
35
ZZSZZSZZS 2020-04-06 10:51:56 +08:00 via iPhone
wsl2 还是有很多不错的地方的,比如启动很快几乎感觉不到,双向文件共享,可以在 wsl 里运行 Windows 的程序等等,io 比 wsl1 极大提升了(除 /mnt ),有了内核,有了 ext4,终于可以愉快的搞交叉编译了,
|
36
Plumes 2020-04-06 13:36:43 +08:00 via iPhone
跨系统 io 的问题还是没有解决,npm run watch 很痛苦
|
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 把它唤醒。太蠢了 |
38
LANB0 2020-05-24 09:30:36 +08:00 via Android
你们都没遇到过 wsl2 内存一直增长的问题? 2004 版本,8G 内存编译 openwrt,wsl 的占用能达到 6G,停止编译还不会把内存归还宿主机。看 GitHub 说是早已经解决了,实际用配置文件限制内存会必现蓝屏
|