在使用 wslcompact 压缩后 WSL 启动失败后,有什么方法可以修复吗(https://github.com/okibcn/wslcompact/)收到的错误是The operation timed out because a response was not received from the virtual machine or container. Error code: Wsl/Service/CreateInstance/HCS_E_CONNECTION_TIMEOUT
答案1
在使用 wslcompact 压缩后 WSL 启动失败,有什么方法可以修复吗?
呃,也许吧?我并不抱太大希望,但当然值得一试。
我假设您已经重新启动了系统,如果没有,当然,请尝试一下。
有了这个显而易见的建议...
值得一试的建议...
尝试从以下开始:
wsl ~ -d <distro_name> /usr/bin/bash --noprofile --norc
令人怀疑,但如果有效的话,那么事情可能就会更容易恢复。
尝试重新导入 VHDX
由于您正在压缩,我猜磁盘空间可能是执行以下步骤时的问题。您需要备份可能远程可用,而且这些可能相当大,所以我建议为此使用单独的驱动器。只要您信任它(即,您过去使用过驱动器一半以上的空间,并且能够在之后读取数据 - 很多“廉价”驱动程序会错误地报告空间并导致损坏),USB 驱动器就可以工作。
至少有两个地方可以查找要备份的文件:
您的分发数据目录:
从 Powershell 运行:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object { (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath }
查看您的发行版所报告的目录
ext4.vhdx
并进行备份。临时目录
wslcompact
:根据消息来源,这应该是:
$Env:TEMP\wslcompact
另请参阅此处任何
.vhdx
文件。如果我正确阅读了源代码,它应该以发行版命名。备份它们。
建议:将磁盘上的文件的哈希值与使用 PowerShell 备份的哈希值进行比较Get-FileHash <filename> -Algorithm MD5
(感谢这个 SO 答案)。
再次,由于我假设空间是一个问题:
- 最后一次确认你无法启动 WSL
- 您已备份了
ext4
,对吗?
然后继续使用以下分发版开始清理:
wsl --unregister <distro_name>
最后警告:这将消除无需确认即可从您的系统中移除 WSL 分发和虚拟驱动器。
删除发行版后,创建一个新的分布新的位置新的名称。如果您找到多个.vhdx
文件,我相信我上面要求您备份的第一个文件可能更有可能完好无损,但我不确定。如果以下方法不起作用,请用.vhdx
您找到的任何其他文件重试。
mkdir <NEW-path-for-distribution>
wsl --import --vhd <NEW_distro_name> <NEW-path-for-distribution> <location_of_backed_up.vhdx>
wsl ~ -d <NEW_distro_name>
如果此方法有效,那么你可能正在root
使用那个发行版。你需要按照我的回答中的说明进行操作这里设置默认用户。
再次,如果它有效,您可能希望将其设置为默认分布:
wsl --set-default <NEW_distro_name>
再次,如果它不起作用,请使用.vhdx
您找到的任何其他方法再试一次。
祝你好运!
答案2
好吧,我终于找到了解决办法。我通过将损坏的 vhdx 连接到另一个虚拟机然后对其进行 fsck 来修复它