今天 WSL2 更新了 2.0.0 版本,详细更新内容见: https://github.com/microsoft/WSL/releases/tag/2.0.0
总结一下主要是:
需要至少 Windows 11 23H2 ,目前还没有发布正式版本,不过可以考虑加入 Insider 的 Release Preview 或者 Beta 通道,更新系统之后运行 wsl --update --pre-release
升级 WSL ,然后就可以在 %userprofile%\.wslconfig
里面设置以下内容:
[experimental]
autoMemoryReclaim=gradual # 可以在 gradual 、dropcache 、disabled 之间选择
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
然后你会发现,WSL2 和 Windows 主机的网络互通而且 IP 地址相同了,还支持 IPv6 了,并且从外部(比如局域网)可以同时访问 WSL2 和 Windows 的网络。这波升级彻底带回以前 WSL1 那时候的无缝网络体验了,并且 Windows 防火墙也能过滤 WSL 里的包了,再也不需要什么桥接网卡、端口转发之类的操作了。
详细更新公告见: https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/
关于自动释放 WSL2 虚拟硬盘空间,需要设置稀疏 VHD。
首先在上面的配置里再加一行:
sparseVhd=true
然后运行这个命令切换到稀疏 VHD:wsl --manage 发行版名字 --set-sparse true
比如 wsl --manage Ubuntu --set-sparse true
如果遇到了:
wsl: Hyper-V 防火墙不受支持
wsl: 不支持镜像网络模式,正在回退到 NAT 网络
wsl: DNS 隧道不受支持
请加入 Windows Insider 预览版计划,选择进入 Release Preview 或者 Beta 通道,然后更新系统!(当然选择 Dev/Canary 通道也不是不行,但是不稳定所以不建议)
或者如果不想加入预览版计划的话你也可以等几周,23H2 也快发布正式版了。
另外,使用 VSCode - WSL
插件的,建议去 VSCode 设置里把自动端口转发关掉(Remote: Auto Forward Ports
),避免冲突,因为 WSL2 更新之后新的网络已经是和你的 Windows 使用相同网络了,不再需要端口转发了。
如果你在 WSL 里使用 docker,那需要将 autoMemoryReclaim
配置为 dropcache
或者 disabled
,然后在 /etc/docker/daemon.json
里添加一句 "iptables": false
,否则你可能无法正常使用 docker。
101
TsubasaHanekaw 2023-09-19 16:46:37 +08:00
这波好了之后,windows 11 就成了最好的 linux 发行版
|
102
ShadowPower 2023-09-19 16:49:07 +08:00
@DigitalG
https://anthony-f-tannous.medium.com/wsl2-how-to-prepare-and-attach-virtual-drives-vhd-ac17b1fc7a61 这篇文章里有自动挂载的例子,但是启动 wsl 要用两条命令来完成。 |
103
BurgerTown 2023-09-19 16:49:23 +08:00
VSCode 好像没能适应 mirrored 极其的慢 把自动端口转发关了也是一样(关了好像有些进程还是会自动转发
|
104
sunmoon1983 2023-09-19 16:53:26 +08:00
我想要 win10 也能支持啊
|
105
leeyuzhe 2023-09-19 17:00:09 +08:00
发现一个问题,开 clash 的 tun mode 之后,wsl 里面上不了网。ping 所有域名都被转发到一个内网 ip 上面
|
106
hez2010 OP @default996 看错误代码是更新过程被中止。
可以考虑去 GitHub Release 页面下载 msix 包自己手动升级。 |
107
LANB0 2023-09-19 17:11:58 +08:00 2
23h2 要 beta 通道吧,似乎 Release Preview 搜不到更新
|
109
FYFX 2023-09-19 17:16:25 +08:00
@leonshaw
这个应该挺早就支持了吧, 我现在 wsl 的 /home 目录挂的就是单 ext4 分区的一个盘, 不过每次 wsl --shutdown 之后都要手动再挂一遍,开机是写了个脚本自动挂载的 https://learn.microsoft.com/en-us/windows/wsl/wsl2-mount-disk |
110
Akiya 2023-09-19 17:21:13 +08:00
终于不用再整端口转发的麻烦事了吗
|
111
hez2010 OP @leeyuzhe 可以考虑关掉 clash 然后重启一下系统。转发到的那个内网 IP 有可能是 clash 给你设置的代理,既然都用 tun mode 了就应该把代理的地址从设置里清掉。
|
112
leeyuzhe 2023-09-19 17:29:01 +08:00
@hez2010 #111 没有手动或者自动设置全局代理,只有 tun mode ,关掉后 wsl 可以正常上网。但是 idea 还是不行
|
113
yeohreet 2023-09-19 17:38:13 +08:00
可以可以,基本痛点都解决了。
|
114
hez2010 OP @leeyuzhe 有可能 idea 帮你做了端口转发然后发生端口冲突了,对于原来的网络来说有必要,对于新的来说属于是多此一举。
|
115
a632079 2023-09-19 17:45:09 +08:00 1
@cylx3124 #69
https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/#automatic-memory-reclaim However, this feature does require disabling cgroups v1 in WSL, which can cause some issues. In early testing we noticed that this will break the docker daemon when running it as a service in WSL, and so if you’re using this feature we recommend you use Docker Desktop for your docker needs. We are working with the Docker team to address this in the future. If you’d like to customize your idle detection thresholds and more, we’d recommend doing so by not enabling this feature and creating a bash script, see this GitHub gist for instructions. You can also set this to drop which will instead drop caches entirely after detecting idle, and will not require any cgroup changes. 总结下来,如果你是直接 apt install docker 的话,那你需要打开 systemed 转 cgroup2 ,然后禁用 cgroup 1 。亦或者直接切 Docker Desktop ,亦或者直接采用 drop 策略。 |
116
dryadent 2023-09-19 17:45:20 +08:00
我有个问题,wsl 微软官方只支持 Ubuntu 么,可以装其他的发行版么
|
117
a632079 2023-09-19 17:51:31 +08:00
@dryadent 可以啊,Fedora ,CentOS (现在是 Rocky ),Debian ,Arch 啥的都在商城里能直接搜到。如果自己打包的话会麻烦一些。不过微软他自己肯定是优先基于 ubuntu 测试的。
|
118
hez2010 OP @dryadent Ubuntu Debian CentOS Kali Arch Fedora openSUSE Manjaro 甚至 Alpine 等等,基本上所有发行版都有,微软商店里面找不到的话 GitHub 上也有很多社区开发者自己做了 WSL 的发行版。
|
119
Nasei 2023-09-19 18:05:57 +08:00
这下边提 mac 的就是搞笑的,一旦你要编译的代码涉及到很多 native 的库,你就知道 mac 有多坑了,只能当成一个远程上网本到服务器上编译。但是 wsl 可以
|
120
gav1nvv 2023-09-19 18:13:37 +08:00
之前就是因为网络问题,导致基于微服务的 docker 开发特别困难,有空试试
|
121
Ming5Ming 2023-09-19 19:21:18 +08:00
不知道那个开着 wsl 睡眠以后开机占用 100%cpu 的 bug 修了没有🙄
|
123
brsyrockss 2023-09-19 19:40:15 +08:00
@lblblong deng 12
|
124
mmdsun 2023-09-19 19:47:31 +08:00 via iPhone
@20015jjw
WSL 子系统是软件的形式提供的,能同时启动运行多款 Linux 系统( Ubuntu ,Debian ,Kali,CentOS...等),用到多系统的调试和编译太方便了,某个子系统搞坏了,卸载重装子系统 APP 就行。 |
125
cubecube 2023-09-19 21:24:28 +08:00
警告!警告!警告!不要随意跳 preview ,很容易被坑跳不回来,我上次等了半年多,无奈重装了
|
126
sf4675822 2023-09-19 21:26:08 +08:00
我的 win11 是 dev 频道的,最新版 23545 ,仍然出现
wsl: Hyper-V 防火墙不受支持 wsl: 不支持镜像网络模式,正在回退到 NAT 网络 wsl: DNS 隧道不受支持 |
127
cyp0633 2023-09-19 21:29:59 +08:00
还会占走一大片端口么
|
128
felixcode 2023-09-19 21:41:26 +08:00
23545.1000 dev 频道,出现
wsl: Hyper-V 防火墙不受支持 wsl: 不支持镜像网络模式,正在回退到 NAT 网络 wsl: DNS 隧道不受支持 |
129
slert 2023-09-19 21:50:22 +08:00
不错 刚好因为网络的问题弃用 wsl
|
130
leonshaw 2023-09-19 23:01:48 +08:00 via Android
|
131
supersu 2023-09-19 23:05:40 +08:00
访问 c 盘 d 盘奇慢的问题解决了么~
|
132
Inf1nity 2023-09-19 23:30:17 +08:00
试了一下新特性,使用体验非常丝滑,之前的痛点几乎都解决了。
目前唯一的痛点是 WSL2 不能直接使用 Windows 主机上的 USB 设备(目前的解决方案是使用 usbipd ),如果以后能解决这个问题的话就真成最好的 Linux 发行版了。 |
133
poplar50 2023-09-19 23:42:25 +08:00 via Android
@daya 可以。共享 windows 显卡驱动,在 wsl 里可以直接 nvidia-smi 查看显卡。可以直接装 nvidia-docker ,跟裸装 linux 性能大概有 5-10%的损失。
|
134
bnull 2023-09-20 02:02:58 +08:00
好家伙,相交 beta 更新更快的 dev 渠道居然还是 22H2 但是版本已经到 23545 了,一样用不了
|
135
dingwen07 2023-09-20 02:43:21 +08:00
这下 Windows 是最强 Linux distro 了
|
136
Jat001 2023-09-20 05:20:25 +08:00
@leeyuzhe #105 你是用的 fake-ip 吗? fake-ip 是劫持 DNS 解析,把所有域名都指向 fake-ip-range 网段内的 IP ,不可能是同一个 IP ,只是同一网段。
我试了下,只有 https 不行,http 请求是可以的,无论需不需要翻墙。 |
137
Jat001 2023-09-20 06:19:51 +08:00
https://learn.microsoft.com/en-us/windows/wsl/wsl-config#experimental-configuration-settings
还有些其他选项没列出来,但试了下好像没什么区别 |
138
deorth 2023-09-20 06:51:16 +08:00 via Android
很好,那什么时候 windows 支持 btrfs
|
139
ch3n9w 2023-09-20 08:24:57 +08:00
微软早三年更新这样的功能我就不会入坑 linux 桌面了...
|
140
yuyanglive 2023-09-20 09:02:02 +08:00
@arfaWong
wsl 下的 docker 能用吗? |
142
ShadowPower 2023-09-20 09:28:49 +08:00
@yuyanglive 其实我在 2017 年的时候(当时 WSL1 刚修完各种大 bug )就已经尝试 WSL 下使用 Docker 了。
2018 年的时候在 V2EX 上发了个回复: https://www.v2ex.com/t/446914?p=2#r_5623149 在那时候就可以做到非常完美的程度,例如: 可以在 WSL 下挂载 Windows 目录下的文件到 Volume 里。 当年我还在做 HyperFabric ,它的 Peer 节点在 Docker 内部跑,然后 Peer 会启动 Docker 容器跑 Chaincode 。这需要能连接到 Docker 容器外部的 Docker Daemon 才能实现。官网的实例不用做额外配置,直接用 WSL1 都可以。官方的 Linux 示例,一行代码都不改,直接跑通。( PS:之前用 Apple Silicon macOS 都跑不通……) 那时候还用来开发了 Kubernetes 容器编排微服务,用这种环境来做测试,也没问题。 至于 WSL2 Docker 的话,比上面提到的还要完善。 |
143
ShadowPower 2023-09-20 09:29:41 +08:00
@yuyanglive 打错了,是 Hyperledger Fabirc
|
144
arfaWong 2023-09-20 09:30:57 +08:00
@yuyanglive #140 我通过 docker desktop 安装的,wsl 下 docker 正常
|
145
JeromeCui 2023-09-20 09:38:42 +08:00
试了一下,intellij idea 搭配 wsl 还是不好用,算了,继续用我的 Kubuntu
|
146
a33291 2023-09-20 10:10:21 +08:00
win11 canary 版本升级到 2.0.0 后安装 Ubuntu 出现错误
wslregisterdistribution failed with error: 0x8004032d |
147
yuyanglive 2023-09-20 10:20:03 +08:00
@ShadowPower
我的是 win11 22h2 ,wsl --update --pre-release 升级的 wls, docker 也是直接安装的 wsl 版本 设置 autoMemoryReclaim=gradual 后,wsl 里的 docker 跑不起来了,跟 70 楼情况一样,这一行注释掉就行了 |
148
yuyanglive 2023-09-20 10:21:09 +08:00
@arfaWong
我的是 win11 22h2 ,wsl --update --pre-release 升级的 wls, docker 也是直接安装的 wsl 版本 设置 autoMemoryReclaim=gradual 后,wsl 里的 docker 跑不起来了,跟 70 楼情况一样,这一行注释掉就行了 |
149
ding2dong 2023-09-20 10:24:36 +08:00
挺好的,大半年没写代码了,等升级后试试,先去钓鱼了
|
150
leeyuzhe 2023-09-20 10:26:25 +08:00
|
151
ShadowPower 2023-09-20 10:41:46 +08:00
@yuyanglive 这在微软的博客里提到了,微软正在和 docker 团队沟通这一问题。然后博客里建议使用 Docker Desktop 。
In early testing we noticed that this will break the docker daemon when running it as a service in WSL, and so if you’re using this feature we recommend you use Docker Desktop for your docker needs. We are working with the Docker team to address this in the future. 其实还有其他问题,在楼主发的第一条附言的链接里都有说明。 |
152
capric 2023-09-20 10:43:24 +08:00
Windows 10 企业版 LTSC 21H2 (19044.3448)直接安装 github release 2.0.0 之后更新.wslconfig 后重启,再打开现有 linux
wsl: 不支持镜像网络模式,正在回退到 NAT 网络 wsl: Hyper-V 防火墙不受支持 wsl: DNS 隧道不受支持 |
153
vhwwls 2023-09-20 11:29:30 +08:00
windows11 的 hyperv 是不是和 vmware 有冲突,我印象中以前在 windows10 下面 hyperv 和 vmware 可以共存的?
|
154
iawes 2023-09-20 13:40:45 +08:00
Windows 以后会不会出一个 Linux 内核版
|
155
hez2010 OP @iawes 感觉不太可能。
读了 windows internals 之后深感 linux 内核在 windows 内核前面如同玩具,就算要出 linux 内核版,现阶段 linux 缺少的东西也非常多。 |
156
default996 2023-09-20 15:56:11 +08:00
@BurgerTown 试过了,提示没有安装权限……只能退出安装。
还是等正式版吧 |
157
wei2629 2023-09-20 18:58:28 +08:00
nb 了 windows 是最好的 linux 发行版了。
|
158
well775397252 2023-09-21 00:04:17 +08:00
@BurgerTown 我用 mirrored 端口不能访问。。。
|
159
nodejsexpress 2023-09-21 00:30:19 +08:00
用惯了 ubuntu 桌面, 似乎对微软无感了.
主要平时没有微信干扰, 可以静静地开发. 游戏也没有接触, 用最多是 ZSH+IDE+浏览器 |
160
jokcylou 2023-09-21 07:58:36 +08:00
我更新了为啥 networkMode 不生效呢,我已经在 dev channel 了
|
161
hades97 2023-09-21 09:35:34 +08:00
想问一下,这个要怎么更新呀?
|
162
BurgerTown 2023-09-21 09:57:09 +08:00
@well775397252 #158 看具体情况吧 我这边是可以 localhost:xx 访问的 但是不知道为什么 VSCode 就超级慢...
|
164
well775397252 2023-09-21 15:46:55 +08:00
@BurgerTown #162 能看一下你预览版的版本吗?我怀疑是版本不是最新?
|
166
haolongsun 2023-09-21 19:35:48 +08:00
g 不是 beta 或者 pre release 版本的 win 更新完直接代理炸了 wsl 内怎么也连不上网 又不想升级系统 操了
|
167
haolongsun 2023-09-21 20:10:05 +08:00
@leeyuzhe 你怎么解决的呀
|
168
well775397252 2023-09-21 21:21:27 +08:00
@magicedy #95 docker 端口那个 mirror 用不了
|
169
luvmhx 2023-09-21 22:11:48 +08:00 via iPhone
@wildman9527 哈哈哈哈,懂不懂 Windows 最为最佳 Linux distro 的实力啊
|
170
leeyuzhe 2023-09-22 11:29:35 +08:00
@haolongsun #167 换回桥联啊,把 networkingMode 改成 nat 然后正常在 wls2 节点下面配置桥连
|
171
cloud2000 2023-09-22 20:17:14 +08:00 1
我也遇到和上面几位一样的:
wsl: Hyper-V 防火墙不受支持 wsl: 不支持镜像网络模式,正在回退到 NAT 网络 wsl: DNS 隧道不受支持 正式的解决办法是: 要切换到最“激进”的 Win 11 Canary 通道才行,滞后的 Beta 等通道不行。 即使升级了 wsl2,也不行。 |
172
paulluis2dev 2023-09-24 15:38:27 +08:00
@mingwiki
@TsubasaHanekaw @dingwen07 别吹了,别吹了,一直拿用户做测试,不完成的作品拿出来吹,还有一些问题至今没解决呢,要省心还不如虚拟机装原生 Linux ,WSLg 一直不稳定也有问题 |
173
jiangyingjuner 2023-09-24 20:44:20 +08:00
@default996 衷心请问怎么解决的问题,msstore 前两天自动给我更新了 WSL ,现在出现这个错误打不开了
|
174
hez2010 OP @paulluis2dev WSL2 大概是唯一的自带丝滑的双显卡支持、四家显卡( NVIDIA 、AMD 、INTEL 、高通)的 Wayland 支持( WSL only )的同时还有 GUI 硬件加速的 Linux 发行版。
|
175
BurgerTown 2023-09-25 10:22:53 +08:00
@well775397252 #164 版本
Windows 11 专业版 版本 23H2 安装日期 2022/5/14 操作系统版本 22631.2338 体验 Windows Feature Experience Pack 1000.22674.1000.0 |
176
default996 2023-09-25 14:49:24 +08:00
@jiangyingjuner #173 我是卸载了系统里面的“适用 windows 的 Linux 子系统”,然后重装 wsl
|
177
worldquant 2023-09-27 10:20:35 +08:00
挺坑的,需要更新到 25×××
|
178
hez2010 OP @worldquant 不需要的,已经推送给 Release Preview 了。
|
179
worldquant 2023-09-27 22:41:49 +08:00
|
180
tsanie 2023-10-10 11:46:06 +08:00
@well775397252 #168 我试了下可以,我在 docker 里跑了个 iperf3 server ,用局域网另外一个设备连接可以跑通,不过 windows 要设置下防火墙,打开 5201 端口。
[ 5] local 10.0.10.100 port 55670 connected to 10.0.10.20 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 283 MBytes 2.37 Gbits/sec 0 3.15 MBytes [ 5] 1.00-2.00 sec 280 MBytes 2.35 Gbits/sec 0 3.15 MBytes ... Accepted connection from 10.0.10.100, port 35084 [ 5] local 10.0.10.20 port 5201 connected to 10.0.10.100 port 55670 [ ID] Interval Transfer Bandwidth [ 5] 0.00-1.00 sec 273 MBytes 2.29 Gbits/sec [ 5] 1.00-2.00 sec 281 MBytes 2.35 Gbits/sec ... 系统版本是 23H2 22631.2361 ,wsl 是 2.0.4.0 |
181
tsanie 2023-10-10 11:55:17 +08:00
@worldquant #178 我是 22H2 正式版 22621.2361 ,然后安装了个 23H2 启用包 KB5027397 ,版本号更新为 22631.2361
启用包就 180K ,安装后更新通道还是在正式版,没有加入 insider program https://z1.ax1x.com/2023/10/10/pPxICtg.png |
182
infinityv 2023-10-13 23:25:46 +08:00 via iPhone
我是 beta 通道 当前是 22H2 22621.2428 ,更新到 23H2 一直失败(下载进度卡 0%然后失败)报错“我们目前找不到为你的版本发布的任何更新”。不知道咋办
|
183
skrbug 2023-10-18 00:26:08 +08:00
我碰到个奇怪的问题,wsl2 + easyconnection 好像没办法一起配合使用
|
184
sunmoon1983 2023-11-08 09:23:39 +08:00
```
PS C:\Users\Abc> wsl -u root wsl: Unknown key 'experimental.autoMemoryReclaim' in C:\Users\Abc\.wslconfig:2 wsl: Unknown key 'experimental.networkingMode' in C:\Users\Abc\.wslconfig:4 wsl: Unknown key 'experimental.dnsTunneling' in C:\Users\Abc\.wslconfig:5 wsl: Unknown key 'experimental.firewall' in C:\Users\Abc\.wslconfig:6 wsl: Unknown key 'experimental.autoProxy' in C:\Users\Abc\.wslconfig:7 ``` |
185
TomCN 364 天前
今天更新了 23H2 ,正式版可以用了
========================================================================== $ curl -svo /dev/null https://google.com * Uses proxy env variable no_proxy == '192.168.*,172.31.*,172.30.*,172.29.*,172.28.*,172.27.*,172.26.*,172.25.*,172.24.*,172.23.*,172.22.*,172.21.*,172.20.*,172.19.*,172.18.*,172.17.*,172.16.*,10.*,127.*,localhost' * Uses proxy env variable https_proxy == 'http://127.0.0.1:10809' * Trying 127.0.0.1:10809... * Connected to (nil) (127.0.0.1) port 10809 (#0) * allocate connect buffer! * Establish HTTP proxy tunnel to google.com:443 > CONNECT google.com:443 HTTP/1.1 > Host: google.com:443 > User-Agent: curl/7.81.0 > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 Connection established < |
186
TomCN 364 天前
|
187
nextone 357 天前
WSL 2.0.9 发布了,Windows 10 22H2 能用吗
|
188
qwqaq 255 天前
@sunmoon1983 #104 @lblblong #2 @lilei2023 #26 @qing18 #47
Windows 10 21H2 (19044.4046) 亲测能用 WSL2 官方文档里提的版本要求是:Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11 https://learn.microsoft.com/en-us/windows/wsl/install |
189
qwqaq 255 天前
#188
😅 但是 `networkingMode=mirrored`、`firewall`、`dnsTunneling`、`autoProxy` 文档里说 Win10 不能用: https://learn.microsoft.com/en-us/windows/wsl/wsl-config > Entries with an * after the value type are only available on Windows 11. > > Entries with an ** after the value type require Windows 11 version 22H2 or higher. |
190
Shook 253 天前
请问应用了新版以后,可以 ping google.com 但是无法 curl 'http://google.com' 应该咋办啊?
|
191
ayiyaha 244 天前
@leeyuzhe 171 天过去了,2024-03-09,idea 访问 wsl 的项目还是 127.0.0.42,还有这个问题, 只能通过 remote wsl 连接,但那个有点占内存,唉
|
192
leeyuzhe 242 天前
set `wsl.proxy.connect.localhost` registry value 这个可以,但还是有别的奇奇怪怪的问题,比如 kafka 在 mirrored 模式下老是获取不到客户端 ip 。。。
|