J. *_*Doe 21 updates windows windows-subsystem-for-linux 20.04
版本
Microsoft Windows [版本 10.0.19044.1586]
WSL 版本
WSL 2
内核版本
5.10.16
发行版
Ubuntu20.04LTS
其他软件
Docker Desktop (Windows),版本 4.6.1 (76265) Docker Engine v20.10.13
重现步骤 我已经从 Microsoft Store 安装了 WSL 几天,并且运行良好。我从 Microsoft Store 获取了有关 WSL 的更新,并对其进行了更新,然后它停止工作。
bash shell的预期行为 。适用于 Linux 的 Windows 子系统已安装,因此应该可以正常运行。
实际行为 您好,我几天前已成功安装 WSL,一切正常。但在我从 Microsoft Store 获得有关 WSL 的更新后,我更新了 WSL,从那时起它就抛出此错误。我还重新启动了计算机并检查以确保我的虚拟机平台和适用于 Linux 的 Windows 子系统已打开,我发现这两个服务都已打开。我仍然遇到同样的错误。我可以得到关于这方面的任何指导吗?因为我必须使用 WSL 来实现我的教育目的,这将非常有帮助,谢谢
Installing, this may take a few minutes...<br>
WslRegisterDistribution failed with error: 0x80070050<br>
Error: 0x80070050 The file exists.
Press any key to continue...
Run Code Online (Sandbox Code Playgroud)
诊断日志 无响应
Not*_*1ds 36
基于最新信息的第二个可能的答案。我无法亲自对此进行测试,因为我没有遇到问题。
在尝试此操作之前,请备份(使用我在之前的答案中提到的步骤)。
wsl --shutdown(来自 PowerShell 或 CMD)\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\LxssDistributionName找到里面有的钥匙Ubuntu20.04LTS。将 更改Ubuntu20.04LTS为Ubuntu-20.04.理论上,可以通过将发行版名称更改回应有的名称来解决问题。
Not*_*1ds 11
更新:这个答案是我第一次尝试解决方案(它确实有效),以及“安全”的方法。然而,我作为第二个答案发布的“快速而简单”(但不太“安全”)的注册表编辑似乎也适用于多个用户。 该答案包含问题的背景以及为什么这两种技术都可以解决问题。
通过阅读几个 Github 问题(包括从外观上看您在那里发布的问题),这似乎是 Ubuntu 应用程序最近的 Store 更新的问题。或ubuntu.exe(编辑:我现在相信这只发生在,但如果您在该版本ubuntu2004.exe上遇到此问题,请告诉我)在更新后被破坏。ubuntu2004.exeubuntu.exe
该ubuntu.exe命令实际上做了两件事——它首先检查 Ubuntu 是否安装在 WSL 中。如果没有,它会提取 Ubuntu rootfs 并要求您配置用户名和密码。如果已安装,它将使用该发行版启动 WSL。
该问题似乎实际上是从Microsoft Store 中的“Ubuntu 20.04”应用程序的早期版本开始的。安装的发行版的名称应该是(历史上), Ubuntu-20.04。以前的版本似乎有一个错误,它被重命名了Ubuntu2004.LTS(感谢@Pat 在评论中指出了这一点)。
这会给所有更新的用户带来类似的问题。然而,Canonical 似乎很快就解决了这个问题。
不幸的是,如果您在商店中存在“错误版本”的窗口期间安装,那么修复会破坏您的功能,因为现在:
ubuntu2004.exe正在寻找名为 的发行版Ubuntu-20.04。Ubuntu20.04LTS),因此它尝试再次运行 rootfs/configuration 阶段。但 WSL 文件已经提取并配置,导致错误。有几种选择:
就我个人而言,我只是更改任何链接以使用该-编辑 - 实际解决这个问题是值得的。wsl.exe命令而不是ubuntu.exe(或ubuntu2004.exe)。假设 Ubuntu 是您的默认 WSL 发行版(通过 找到wsl -l -v),那么将具有相同的效果,只需启动它即可。
从 Github 报告来看,您可以通过取消注册 Ubuntu 发行版来真正解决该问题。请注意,这是一个破坏性操作,会删除您现有的 Ubuntu 发行版。
假设发行版仍在运行,通过wsl命令,可以在注销之前对其进行备份,然后在注销后恢复。
我会分两步完成此操作:
首先,通过命令创建发行版的备份wsl --export。退出发行版,然后转到 PowerShell 并:
wsl -l -v
# Change "Ubuntu-20.04" in the next line to match the distribution name in use
wsl --export Ubuntu-20.04 ubuntu_backup.tar
Run Code Online (Sandbox Code Playgroud)
其次,找到您的 Ubuntu WSL 发行版的虚拟驱动器。在文件资源管理器中启动:
%userprofile%\AppData\Local\Packages
Run Code Online (Sandbox Code Playgroud)
然后找到CanonicalGroupLimited...Ubuntu(名称可能有所不同。
在里面,找到..\LocalState\ext4.vhdx. 将该文件复制到安全位置。
准备好两个不同的备份后,就可以从 WSL 取消注册 Ubuntu。请记住,这是一个破坏性操作:
wsl -l -v
# Change "Ubuntu-20.04" in the next line to match the distribution name in use
wsl --unregister Ubuntu-20.04
Run Code Online (Sandbox Code Playgroud)
重新运行ubuntu2004.exe或ubuntu.exe(从命令行或“开始”菜单)
Ubuntu 将再次运行其安装和初始配置(它现在应该可以使用未注册的“坏”版本)。虽然您可以在此处输入用户名和密码,但我们无论如何都会丢弃此“安装”。
退出 Ubuntu 发行版
来自 PowerShell:
wsl --terminate Ubuntu-20.04 # or Ubuntu
Run Code Online (Sandbox Code Playgroud)
将ext4.vhdx您上面保存的内容复制回%userprofile%\AppData\Local\CanonicalGroup...Ubuntu...\LocalState新创建的内容中。
此时,ubuntu.exe或ubuntu2004.exe命令应该再次起作用(以及从“开始”菜单)。
| 归档时间: |
|
| 查看次数: |
47712 次 |
| 最近记录: |