wsl2 冻结(无法运行任何发行版)。我可以恢复数据吗?视窗11

lem*_*mek 7 windows linux windows-subsystem-for-linux wsl2

长话短说 - 当尝试在任何发行版上执行任何操作时,WSL2 会永远挂起,直到系统重新启动。我尝试过启动/停止 LxssManager,但似乎没有任何效果。此时我只想从发行版中恢复数据。是否可以通过 WSL 访问 shell?

更多细节。

  • wsl -l -v我可以在尝试打开或执行与分发相关的任何操作之前执行大多数 WSL 命令,例如在系统启动时执行
  • 尝试运行发行版后,WSL 会永远冻结,直到系统重新启动。wsl -l -v以前运行的命令现在无限期地挂起,因此例如我在尝试启动分发后无法执行。wsl --help工作正常,与 相同wsl --set-default-version
  • wsl --export挂起,所以我无法使用它。
  • wslwsl --status、等命令wsl --shutdown会挂起 WSL。
  • 我已经安装了另一个发行版,尽管已安装,但尝试运行它会导致同样的问题。

一些 WSL 信息(我的系统语言是波兰语,因此名称可能有所不同)

wsl --version

Susbsystem WSL version: 1.1.6.0
Kernel version: 5.15.90.1
Service WSLg version: 1.0.50
MSRDC version: 1.2.3770
Direct3D version: 1.608.2-61064218
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows system version: 10.0.22621.1485
Run Code Online (Sandbox Code Playgroud)

Dan*_*l B 10

是的,数据恢复是可能的。WSL 2 将分发数据存储在.vhd磁盘映像中。不幸的是,它们所在的位置差异很大。我在 Reddit 上找到了这个脚本(通过用户名,来自超级用户贡献者 NotTheDr01ds?):

\n
Get-ChildItem HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Lxss\\ |\n    ForEach-Object {\n        (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath\n    } | Format-List\n
Run Code Online (Sandbox Code Playgroud)\n

它可以在我的机器上运行。只需将其粘贴到 PowerShell 窗口中,然后按Enter

\n

在该脚本报告的文件夹中,您\xe2\x80\x99 将找到一个ext4.vhd文件。只需将此文件复制到任意位置即可获得备份。您可以在虚拟机内使用兼容的虚拟机软件( Hyper-VVirtualBox等转换映像格式后的软件)和 Linux 来访问此备份。磁盘映像不包含任何分区方案,仅包含ext4文件系统。您可以像这样安装它(只读,以免进行意外的更改):

\n
mount -o ro /dev/sdx /mnt/wsl-rescue\n
Run Code Online (Sandbox Code Playgroud)\n

然后,您可以从您的发行版中找到数据/mnt/wsl-rescue并将其复制到其他地方。

\n

您可以使用任何现代 Linux 来进行救援。例如,Ubuntu Live DVD 映像即可,无需安装。

\n

备份数据后,如果需要,您可以通过完全重置来继续恢复 WSL\xe2\x80\x94。

\n