WSL自动更新后无法打开
现象:物理机突然自动重启,重启后无法再打开WSL,并报错
无法将磁盘“C:\Program Files\WSL\system.vhd”附加到 WSL2: 系统找不到指定的文件。
错误代码: Wsl/Service/CreateInstance/CreateVm/MountVhd/HCS/ERROR_FILE_NOT_FOUND
Press any key to continue...
在物理机上查看导致重启的事件原因
eventvwr.msc -> Windows 日志 -> 系统 -> 筛选器 -> 输入事件ID1074
1074,该事件表示系统因某个进程或用户的请求而重新启动或关闭。
进程 msiexec.exe 由于以下原因已代表用户 NT AUTHORITY\SYSTEM 启动计算机 M3NGL 的 重启: 没有找到这个原因的标题
原因代码: 0x80030002
关机类型: 重启
注释: Windows Installer 使系统重新启动来完成或继续“Windows Subsystem for Linux”的配置。
尝试打开WSL,但报错
无法将磁盘“C:\Program Files\WSL\system.vhd”附加到 WSL2: 系统找不到指定的文件。
错误代码: Wsl/Service/CreateInstance/CreateVm/MountVhd/HCS/ERROR_FILE_NOT_FOUND
Press any key to continue...
原因查验,WSL自动更新至最新版本,可以发现本地版本和 https://github.com/microsoft/WSL/releases 中最新版本一致
>wsl --version
WSL 版本: 2.4.13.0
内核版本: 5.15.167.4-1
WSLg 版本: 1.0.65
MSRDC 版本: 1.2.5716
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows 版本: 10.0.26100.3476
但自动更新后,原来的 system.vhd 不见了。
$Solution$
在 https://github.com/microsoft/WSL/releases 下载版本一致的msi文件,下载到本地后,创建C盘的tmp文件夹并选定该文件夹进行安装
msiexec /a c:\tmp\wsl.2.x.x.x.x64.msi /qb TARGETDIR=c:\tmp\wsl
安装完成后,在安装路径c:\tmp\wsl下的子目录中有system.vhd,复制到原来的WSL文件夹中即可,一般是C:\Program Files\WSL
复制后报错磁盘相关的错误(因为在操作过程中曾误点过vhdx文件,导致物理机加载了WSL的虚拟磁盘)
无法将磁盘“\\?\D:\VirtualMachine\WSL_ubuntu20\ext4.vhdx”附加到 WSL2: 另一个程序正在使用此文件,进程无法访问。
错误代码: Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_SHARING_VIOLATION
打开 diskmgmt.msc 分离不明来源的磁盘(实际上就是WSL的虚拟磁盘空间),选择“分离 VHD”以卸载该虚拟磁盘(卸载时会有提示磁盘的来源)

$Reference$
https://github.com/microsoft/WSL/issues/11288
📑
目录