V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hez2010
V2EX  ›  程序员

WSL2 今天史诗级更新

  hez2010 · 221 天前 · 30915 次点击
这是一个创建于 221 天前的主题,其中的信息可能已经有所发展或是发生改变。

今天 WSL2 更新了 2.0.0 版本,详细更新内容见: https://github.com/microsoft/WSL/releases/tag/2.0.0

总结一下主要是:

  1. 支持自动回收内存
  2. 支持自动释放 WSL2 虚拟硬盘空间
  3. 支持和 Windows 使用相同的网络(镜像网络)
  4. 支持 DNS Tunneling
  5. 支持 Windows 设置的代理
  6. 支持 Windows 防火墙
  7. 支持 Multicast

需要至少 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 里的包了,再也不需要什么桥接网卡、端口转发之类的操作了。

第 1 条附言  ·  221 天前

详细更新公告见: 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

第 2 条附言  ·  221 天前

如果遇到了:

wsl: Hyper-V 防火墙不受支持
wsl: 不支持镜像网络模式,正在回退到 NAT 网络
wsl: DNS 隧道不受支持

请加入 Windows Insider 预览版计划,选择进入 Release Preview 或者 Beta 通道,然后更新系统!(当然选择 Dev/Canary 通道也不是不行,但是不稳定所以不建议)

或者如果不想加入预览版计划的话你也可以等几周,23H2 也快发布正式版了。

另外,使用 VSCode - WSL 插件的,建议去 VSCode 设置里把自动端口转发关掉(Remote: Auto Forward Ports),避免冲突,因为 WSL2 更新之后新的网络已经是和你的 Windows 使用相同网络了,不再需要端口转发了。

第 3 条附言  ·  187 天前

如果你在 WSL 里使用 docker,那需要将 autoMemoryReclaim 配置为 dropcache 或者 disabled,然后在 /etc/docker/daemon.json 里添加一句 "iptables": false ,否则你可能无法正常使用 docker。

194 条回复    2024-04-11 14:42:30 +08:00
1  2  
Cola98
    1
Cola98  
   221 天前   ❤️ 1
网络这一点看起来体验会很好
lblblong
    2
lblblong  
   221 天前   ❤️ 19
win10 不能用就很烦
dobelee
    3
dobelee  
   221 天前
配置后启动:
wsl: Hyper-V 防火墙不受支持
wsl: 不支持镜像网络模式,正在回退到 NAT 网络
wsl: DNS 隧道不受支持
hez2010
    4
hez2010  
OP
   221 天前   ❤️ 1
@dobelee 参考原文:**需要至少 Windows 11 23H2 ,目前还没有发布正式版本,不过可以考虑加入 Insider 的 Release Preview 或者 Beta 通道。**
你可以加入 Windows Insider 进入 Release Preview 或者 Beta 通道,然后更新系统,然后就可以了。
nianlifeixing
    6
nianlifeixing  
   221 天前
感觉更新还蛮大的,以前有段时间折腾,装了 wsl2 ,虚拟化老是蓝屏,感觉不如 wsl1 ,虽然 wsl1 很慢。。
至少网络这块好多了
x1aoYao
    7
x1aoYao  
   221 天前
WSL2 的版本号终于是 2.x 了
我现在 1 和 2 同时在用,这次网络交互升级后 WSL1 依旧比 WSL2 有个优势:和 Win 交互访问文件效率
Baymaxbowen
    8
Baymaxbowen  
   221 天前
能局域网访问简直太棒了
BuffDog
    9
BuffDog  
   221 天前
新手用 wsl2 交叉编译啥的都很顺畅,这波把网络问题搞了就很赞
proxytoworld
    10
proxytoworld  
   221 天前
固定 IPwin11 老早就有了,不过自动回收内存这个可以
但目前用的 win10 ,64g 内存也没啥,这个东西还没这么大诱惑让我升级
Richardhtw
    11
Richardhtw  
   221 天前
cool~
leewi9coder
    12
leewi9coder  
   221 天前
总感觉没有 vagrant 封个 box 稳,求打醒
daya
    13
daya  
   221 天前
WSL2 对调用显卡资源的支持如何?能安装 ROCm 、stable diffusion 跑图吗
LitterGopher
    14
LitterGopher  
   221 天前   ❤️ 1
我:我承认 wsl 很方便,假如,我是说假如,假如我直接装 Linux 系统,阁下又当如何应对?
微软:反正授权费用已经在你笔记本价格里面了。
junkk
    15
junkk  
   221 天前
解决运行 PHP 非常慢的问题了么....
x1aoYao
    16
x1aoYao  
   221 天前
@hez2010 话说 Win11 现在好用了吗?当初升级了又回滚了...
wildman9527
    17
wildman9527  
   221 天前   ❤️ 1
@LitterGopher #14
阁下会尝试用 微信、企业微信、QQ 来联系你. 而你根本收不到, 或只能看到乱码🤣 . ..
WashFreshFresh
    18
WashFreshFresh  
   221 天前
wslg 也支持了吗
tairan2006
    19
tairan2006  
   221 天前
做得好啊

不过还是等正式版发布
javalaw2010
    20
javalaw2010  
   221 天前   ❤️ 1
@junkk 运行 php 非常慢大概率是因为你在 windows 文件系统创建的项目,使用的是 wsl2 的 PHP 执行的,wsl2 下访问 windows 文件夹是通过网络进行的,所以很慢,解决办法就是你把项目创建到 wsl2 里面就可以了。不管你用的是 vscode 还是 phpstorm ,都可以很好的支持 wsl2 里的项目了。
WashFreshFresh
    21
WashFreshFresh  
   221 天前
试了下,wslg 正在更新 2.0.0
jamosLi
    22
jamosLi  
   221 天前
@x1aoYao 可以了,就开始一段时间是屎坑。现在有更新就更,用起来还行。就是 win10 老毛病,偷吃内存。
happyxhw101
    23
happyxhw101  
   221 天前
我随手就抛出一个 linux 单系统
leeyuzhe
    24
leeyuzhe  
   221 天前   ❤️ 2
自动回收内存,自动回收硬盘,使用 windows 代理全是我的痛点
LitterGopher
    25
LitterGopher  
   221 天前
@wildman9527 可是,我还有一台 mac 啊🤣。
lilei2023
    26
lilei2023  
   221 天前
为啥 win10 不信啊,烦烦烦
junkk
    27
junkk  
   221 天前
@javalaw2010 #20 意思是把挂载 win 的目录改成 直接在 wsl2 里创建项目,然后挂载 wsl2 的目录到 docker ,然后 phpstorm 打开 wsl2 的目录开发么?


这种对 debug 会有影响吗?

之前搜到过这种方法,总感觉有点怪加上麻烦,就没这么用
x86
    28
x86  
   221 天前
支持 Windows 设置的代理这个太好了
WashFreshFresh
    29
WashFreshFresh  
   221 天前
wslg 更新后配置了新的选项,提示这个

wsl: Hyper-V 防火墙不受支持
wsl: 不支持镜像网络模式,正在回退到 NAT 网络
wsl: DNS 隧道不受支持
loading
    30
loading  
   221 天前 via iPhone
搭车问:
wsl2 的虚拟硬盘是哪个文件,如果 win 炸了,我用 winpe 能不能救出里面的数据?(我是说我万一有个小文件在里面)
hez2010
    31
hez2010  
OP
   221 天前
@WashFreshFresh 仔细看原文,你系统版本不够要求。
pkoukk
    32
pkoukk  
   221 天前
@junkk #27 没用过 jb 家的东西,但是 vscode 是通过 remote 的方式进行的,在 wsl 里起一个 vscode server ,你在 windows 里的 vscode 编辑会传送给 server ,然后 server 修改 wsl 系统下的文件。虽然说起来很繁琐,但是实际体验和直接编辑 windows 目录下的文件没有区别,甚至更好,因为 vscode 的内置 terminal 也会直接在 wsl 下运行。
可以找找试试 jb 家的 remote ,应该也是支持 wsl 的
javalaw2010
    33
javalaw2010  
   221 天前
@junkk #27 没问题的,phpstorm 发现是 wsl2 内的项目会自动启动 wsl2 的支持,docker desktop for windows 的话,也会自动启用对默认 wsl2 发行版的支持,你直接在 wsl2 内敲 docker 命令就可以了,对 phper 来说的话,除了创建项目的目录改变了,其他的变化几乎是透明的。
javalaw2010
    34
javalaw2010  
   221 天前
@pkoukk 不用 remote 也支持的,windows 上的 jetbrians IDE 会往 wsl2 里塞一个进程,通过通信解决一些跨系统的问题。
iold
    35
iold  
   221 天前
这就去更新一下
noahhhh
    36
noahhhh  
   221 天前 via Android
@daya 没问题
binaryify
    37
binaryify  
   221 天前
镜像网络太好了
tsanie
    38
tsanie  
   221 天前
这两个月应该就发 23H2 正式版了,不想再进 insider 了
gam2046
    39
gam2046  
   221 天前
insider 进了一次 我就放弃了,BSoD 好几次,一时半会也退不出来,被迫重装系统,然后是浪费了好多时间。

老老实实等正式版本的推送吧。
sayakafs
    40
sayakafs  
   221 天前
开了这玩意儿就不能进行虚拟机嵌套了
hahasong
    41
hahasong  
   221 天前
桥接都用习惯了,当虚拟机管理,咋改来改去
Biggoldfish
    42
Biggoldfish  
   221 天前
赞一个 等推送到正式版了

目前双开 WSL 1 和 2 中,需要 Windows 文件系统下用 Linux 工具用 WSL 1 ,需要更加贴近真实 Linux 或 GPU 用 WSL2
Tiande
    43
Tiande  
   221 天前 via iPhone
还是 vmware 好用点,开了 hyperv 好多东西不能用
bing1178
    44
bing1178  
   221 天前
一直用 WSL1 ,然后这波升级是 WSL2 添加了 1 的特性 。。
zed1018
    45
zed1018  
   221 天前
@javalaw2010 但是支持的非常差,比如 intelliJ 的 wsl 支持到现在很多功能都不正常,而且经常会出新 bug ,甚至好不容易做的 tomcat 的运行支持到现在也是不 work 的状态,可能最新的 2.2 修复了。还是得用 gateway ,唯一的问题就是 gateway 没有 settings sync ,每个项目还独立。目前稍微好一点的方案是 intelliJ 装好配好,然后用 intelliJ 启动一个项目这样 jb client 会把 intelliJ 的配置和插件带一份过去,起码不会打开是啥也没有自定义过的状态了。
locoz
    46
locoz  
   221 天前 via Android
内存问题终于解决了…之前吃了内存就不吐出来,还得设内存限制,都不好长期开着
qing18
    47
qing18  
   221 天前
win10 怎么不能用呀,不想用 win11
arfaWong
    48
arfaWong  
   221 天前
已更新😁
a632079
    49
a632079  
   221 天前
可以可以,基本痛点都解决了。
javalaw2010
    50
javalaw2010  
   221 天前
@zed1018 哦还有这种 Bug?我不是 javer 不经常用 intellij 所以不是很清楚这个 Bug 。外企好像都这风格,再严重的 bug 只要不是 security 相关的都等着发版周期,而 jetbrians 家的发版周期一年都屈指可数。。。说回来 gateway 实在是太难用,我以前考虑过直接在 wsl2 里装 jetbrains IDE 的方案,不过实验下来有几个影响体验的问题:
1. jetbrains linux 版本全系 runtime 不支持输入法跟随,输入中文的时候候选框一直在左下角的位置
2. jetbrains 全家桶不原生支持 wayland ,所以分数缩放有问题,4K 屏 150%或者 175%的缩放体验非常差
3. wslg 会在窗口包一层边框,似乎这个边框是无法去掉的
如果能接受以上的问题的话,那体验确实会比 gateway 体验好一些
cst4you
    51
cst4you  
   221 天前
Windows 11 狗都不用(
wingzhingling
    52
wingzhingling  
   221 天前 via Android
更新 win11 的动力主要来源于 wsl 和 wsa ,也是挺幽默的
javalaw2010
    53
javalaw2010  
   221 天前   ❤️ 2
@loading 到注册表找`HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss`,这下面的文件夹里面有你发行版的名称和虚拟磁盘的路径,要救数据的话,把 vhdx 文件复制出来备份好,之后不管是虚拟机挂载还是直接新建新的 wsl2 发行版直接替换 vhdx 文件这都看你心情了。
meixg
    54
meixg  
   221 天前
真的是史诗级更新,之前挂公司代理要各种修改 resolv.conf ,这回看起来不用了。
SZP1206
    55
SZP1206  
   221 天前
挺好挺好,网络的痛点被解决了
tony1016
    56
tony1016  
   221 天前
macOS:什么是 linux
Cu635
    57
Cu635  
   221 天前
是说 win 10 之后也不会有这个更新么?

@tony1016 #56
它自己就可以算是了。macOS 本身就是类 unix ,再用 homebrew 安装一下 gun 风格的命令行工具不就基本能用了么……
tony1016
    58
tony1016  
   221 天前
@Cu635 赶紧拉倒吧
limaofeng
    59
limaofeng  
   221 天前
就网络这块就很不错了,不知道什么时候出正式发布。之前 WSL2 吃内存吃的严重,我都是重启 WSL 来释放内存的
treblex
    60
treblex  
   221 天前   ❤️ 3
win10 使用 wsl --update --pre-release 可以找到更新,不知道有没有问题
DearMark
    61
DearMark  
   221 天前
Microsoft: 你懂 Linux 开发吗,库克?
ShadowPower
    62
ShadowPower  
   221 天前
有这些特性之后感觉已经被 Windows 生态绑架了,办公、娱乐、开发都可以一套系统全部搞定
asyncd
    63
asyncd  
   221 天前
@tony1016 #56 优越感爆棚
zorui
    64
zorui  
   221 天前
@LitterGopher 我:我承认 Linux 很方便,假如,我是说假如,假如我要使用微信,QQ ,玩游戏,阁下又当如何应对?
腾讯:反正都有又不是不能用,来玩手游呀。
qinfengge
    65
qinfengge  
   221 天前
好好好,我宣布微软的亲妈复活一天
chengxiao
    66
chengxiao  
   221 天前
@zorui linux 玩游戏这方面 steam 已经帮你解决 80%的问题了....当然腾讯特供除外
lovestudykid
    67
lovestudykid  
   221 天前
Windows explorer 支持隐藏 . 开头的文件了吗?
MCyunpeng98
    68
MCyunpeng98  
   221 天前
@javalaw2010 #33 您好,问个问题,在 Windows 中,开启 wsl2 ,安装 Ubuntu ,我如果要配合 docker 搭建 php
的 LNMP 环境,是吧 NMP 安装在 docker 上的容器上跑嘛
zxw567
    69
zxw567  
   221 天前
奇怪了,我目前用的最新的 dev channel 也提示
wsl: Hyper-V 防火墙不受支持
wsl: 不支持镜像网络模式,正在回退到 NAT 网络
wsl: DNS 隧道不受支持
cylx3124
    70
cylx3124  
   221 天前
刚试了一下设置 autoMemoryReclaim=gradual 后,wsl 里的 docker 跑不起来了

还是先观望一下吧
c3de3f21
    71
c3de3f21  
   221 天前
什么时候能自带串口支持就好了
chinaguaiu
    72
chinaguaiu  
   221 天前
很好,wsl2 之前在网络访问上的一系列历史问题都将被扫入历史的垃圾堆
leonshaw
    73
leonshaw  
   221 天前
能挂系统盘上的 ext4 分区了吗?
javalaw2010
    74
javalaw2010  
   221 天前   ❤️ 1
@MCyunpeng98 完全 OK 的,我就是这么用的 laradock ,如果要挂载路径的话记得挂载 wsl2 的路径,总之使用原则上记住一条,避免跨文件系统读写,体验就很好。
javalaw2010
    75
javalaw2010  
   221 天前   ❤️ 1
@javalaw2010 #53 题外话,用这个 https://github.com/bostrot/wsl2-distro-manager 开源 GUI 创建 wsl2 ,可以自定义 vhdx 的路径。
sighforever
    76
sighforever  
   221 天前
终于解决网络问题,太好了
20015jjw
    77
20015jjw  
   221 天前 via iPhone
好厉害呀
我选 mac
不搞自己
muooOOO
    78
muooOOO  
   221 天前 via Android
现在就等什么时候支持 usb 设备
MCyunpeng98
    79
MCyunpeng98  
   221 天前
@javalaw2010 #74 wsl2 的路径是那里?,我记得 /mnt 下的 abc 是 Windows 的硬盘
javalaw2010
    80
javalaw2010  
   221 天前   ❤️ 1
@MCyunpeng98 #79 对,除了/mnt 下的你随便挂载
default996
    81
default996  
   221 天前
wsl --status
WSL 正在完成升级...
更新失败(退出代码: 1603)。
Error code: Wsl/CallMsi/E_ABORT
---------- 挂掉了,浪费了几个小时
MCyunpeng98
    82
MCyunpeng98  
   221 天前
@javalaw2010 #80 嗯,感谢
bianhui
    83
bianhui  
   221 天前
Pre-release 啊,全是 bug 更新啥啊,release 了再说吧
join
    84
join  
   221 天前   ❤️ 1
两年多以前逃到了 Linux ,之后再也没想过要回来。最近买了 steam deck ,惊喜的发现很多游戏 linux 支持还不错。
https://www.v2ex.com/t/794193
cnoder
    85
cnoder  
   221 天前
@treblex #60 蹲蹲
arfaWong
    86
arfaWong  
   221 天前
更新前记得 wsl --shutdown
DigitalG
    87
DigitalG  
   221 天前
话说,wsl 能方便设置自动挂载 vhd 分区了吗?比如把系统和数据放在不同的 vhd 文件里。我知道有手动的方式,但用起来还是比较麻烦(之前尝试用 windows 的 task ,碰到了一些问题放弃了)
Jirajine
    88
Jirajine  
   221 天前 via Android
@zorui #64 这些应用就算用 win/mac 也不可能直接安装到宿主机上运行,所以并没有什么障碍。
lyxeno
    89
lyxeno  
   221 天前
能释放空间爽到了。之前占用空间只会变大不会变小...
smartruid
    90
smartruid  
   221 天前
nice
xwcs
    91
xwcs  
   221 天前
mcluyu
    92
mcluyu  
   221 天前
Store WSL is now accessible from Session 0

第一条就是这个, 太好了,终于可以愉快的 ssh 连回去了
h947136
    93
h947136  
   221 天前
@xwcs 必须是 Release Preview 22621.2359 版本或以上的,要加入预览体验计划
xomix
    94
xomix  
   221 天前
懒得折腾,等正式版吧,功能很吸引人
magicedy
    95
magicedy  
   221 天前
"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."
用 systemd 的 docker 确实别开 autoMemoryReclaim ,另外就算没开这个,docker 端口貌似也是有点问题(有人没问题能正常用的不?),还是继续用 bridged 好了(吐槽下,本来只想更新 win 11 beta 看看任务栏不合并效果,结果更完 win11 beta 自动把 wsl2 也更新到 pre-release 了。。)
cslive
    96
cslive  
   221 天前
@daya #13 wsl2 支持 cuda ,不要另外下载驱动,官网有说明
halleyLiu
    97
halleyLiu  
   221 天前
厉害了,之前的网络真的很蛋疼
BurgerTown
    98
BurgerTown  
   221 天前   ❤️ 1
@default996 去 Github 下载 MSI 安装包 我今天也是这样的 安装过程中遇到问题就 Ignore
xwcs
    99
xwcs  
   221 天前
@h947136 我一直都是 beta 渠道,版本也是 22631.2271 了
mingwiki
    100
mingwiki  
   221 天前
巨硬牛逼,终于等到需要的功能了。这下可以吹 wsl 是最牛批的 linux 发行版。
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2909 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 12:36 · PVG 20:36 · LAX 05:36 · JFK 08:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.