使用 wslcompact 缩小后 WSL 无法启动

使用 wslcompact 缩小后 WSL 无法启动

在使用 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 来修复它

相关内容