长话短说 - WSL2 在尝试对任何发行版执行任何操作时会一直挂起,直到系统重新启动。我尝试过启动/停止 LxssManager,但似乎没有任何效果。此时我只想从分布中恢复数据。不通过 WSL 访问 shell 是否可行?
更多细节。
- 我可以在系统启动时执行大多数 WSL 命令,
wsl -l -v
然后再尝试打开或执行与发行版相关的任何操作 wsl -l -v
尝试运行发行版后,WSL 会永久冻结,直到系统重新启动。之前运行的命令现在无限期挂起,因此,例如,我在尝试启动发行版后无法执行。wsl --help
运行正常,也一样wsl --set-default-version
。wsl --export
挂了,所以我无法使用它。wsl
诸如、、wsl --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
答案1
是的,数据恢复是可能的。WSL 2 将分发数据存储在.vhd
磁盘映像中。不幸的是,它们的位置差异很大。我发现Reddit 上的这个脚本(根据用户名,来自超级用户贡献者 NotTheDr01ds?):
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ |
ForEach-Object {
(Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath
} | Format-List
它在我的计算机上有效。只需将其粘贴到 PowerShell 窗口中,然后按Enter。
在此脚本报告的文件夹中,你会发现一个EXT4.VHD文件。只需将此文件复制到任何地方,您就会有一个备份。您可以使用兼容的虚拟机软件 (Hyper-V,虚拟盒以及在转换映像格式后的其他版本)在 VM 中使用 Linux。磁盘映像不包含任何分区方案,只有ext4文件系统。您可以像这样挂载它(只读,以免造成意外更改):
mount -o ro /dev/sdx /mnt/wsl-rescue
然后,您可以从您的分发中找到数据/mnt/wsl-rescue
并将其复制到其他地方。
您可以使用任何现代 Linux 进行此救援。例如,Ubuntu Live DVD 映像就可以了,而且不需要安装。
备份数据后,您可以继续恢复 WSL——如果需要,可以完全重置它。