使用wsl --shutdown命令导致Windows崩溃,寻求无需重启Windows即可关闭WSL2以压缩虚拟硬盘的方案
wsl --shutdown命令导致Windows崩溃,寻求无需重启Windows即可关闭WSL2以压缩虚拟硬盘的方案
兄弟,我太懂你这种WSL shutdown导致系统僵住的糟心体验了——之前帮不少用户解决过类似问题,给你几个靠谱的替代方案,不用重启Windows就能安全关掉WSL2,之后就能顺利压缩虚拟硬盘了:
逐个终止单独的WSL发行版:比起全局的
wsl --shutdown,逐个关闭发行版要温和得多,能避免系统卡死。操作步骤如下:- 打开PowerShell或CMD,输入
wsl -l -v查看当前运行的发行版(STATUS显示Running的就是) - 对每个运行中的发行版执行
wsl --terminate <发行版名称>,比如wsl --terminate Ubuntu-22.04 - 再次用
wsl -l -v确认所有发行版都处于Stopped状态即可
- 打开PowerShell或CMD,输入
通过任务管理器结束WSL相关进程:如果上面的方法不管用,直接从进程层面入手:
- 按下
Ctrl+Shift+Esc打开任务管理器,切换到「详细信息」标签 - 找到并结束以下进程(建议按顺序来):
- 对应你WSL发行版的进程(比如
ubuntu.exe) wslhost.exevmcompute.exe
- 对应你WSL发行版的进程(比如
- 等这些进程全部结束后,WSL2就彻底关闭了
- 按下
在WSL内部主动关机:打开你的WSL终端,直接在Linux环境里执行关机命令,让发行版正常退出:
- 如果只是普通退出,输入
exit即可;如果有后台进程在运行,先执行pkill -u $USER杀掉当前用户的所有进程(需要的话加sudo) - 或者直接执行
sudo shutdown now,让WSL发行版自己完成关机流程,这样也不会触发全局shutdown的问题
- 如果只是普通退出,输入
当WSL2完全关闭后,你就可以开始压缩虚拟硬盘了,步骤如下:
- 打开PowerShell,输入
diskpart启动磁盘分区工具 - 依次执行以下命令(记得替换成你自己的文件路径):
select vdisk file="C:\Users\<你的用户名>\AppData\Local\Packages\<发行版包名>\LocalState\ext4.vhdx" attach vdisk readonly compact vdisk detach vdisk - 发行版包名可以通过PowerShell命令
Get-AppxPackage *<发行版关键词>*查找,比如Ubuntu的话就用Get-AppxPackage *Ubuntu*
这些方法我自己亲测有效,碰到wsl --shutdown卡死的情况,用这些替代方案基本都能解决,你可以逐个试试哪个最适配你的系统~
备注:内容来源于stack exchange,提问作者theSparky




