有关的:有没有办法在 Win10(v1709)上安装适用于 Linux 的 Windows 子系统(无需使用商店)?
安装 WSL 发行版时外部Microsoft Store(例如在受限网络上,请参阅链接)的许多标准与该发行版交互的方式都不可用。在我的示例中,当我通过“设置”>“应用和功能”时,发行版未显示在列表中,并且管理功能不可用。如果我的手动安装的 Linux 实例处于错误状态,重置它并将其恢复为全新安装的正确方法是什么?
编辑:迄今为止遇到的“不良状态”示例包括“apt-get update”期间的 BSOD,导致无法恢复的状态。此外,执行多个配置更改来解决问题,删除或禁用服务并安装其他软件包而不密切跟踪更改的内容,希望“重新开始”以测试解决方案是否确实可以自行工作。
答案1
如果我手动安装的 Linux 实例处于错误状态,重置它并恢复到全新安装的正确方法是什么?
如果你运行的是 Windows 10 版本 1903:
wsl --unregister <DistributionName>
如果您运行的是 Windows 10 版本 1709、1803 或 1809:
wslconfig /unregister <DistributionName>
答案2
您可以使用巧克力味(例如使用私有 NuGet 存储库)并选择 Debian 映像:
choco install wsl-debiangnulinux
但是之后
- 只有“WSL Terminal”和“Debian Terminal”等快捷方式可用。
- 系统不会提示您创建用户,只会启动 root shell
- 你将无法在“设置/应用和功能”中找到适用于 WSL 的 Linux 发行版,因此也无法找到“高级选项”或“重置”
顺便说一句,wsl 命令行可用,但你必须手动创建你的用户帐户(根据发行版使用 useradd 或 adduser),授予 sudo(sudo 组或 sudoers),然后/etc/wsl.conf
使用[user]
部分创建default=yourlogin
- 请参阅wsl-配置文档。就我而言,<distribution> config --default-user yourlogin
没有效果。
如果发生确定性中断,唯一的选择似乎是按以下顺序运行:
wsl --export <distribution> wsl-backup-<distribution>.tar
wsl --unregister <distribution>
choco install wsl-<distribution>
wsl --import <distribution> wsl-backup-<distribution>.tar
希望您不会因为导入文件而遇到麻烦。
答案3
警告:以下信息并非完全官方记录,因为问题涉及 WSL 中发行版的“手动安装”。因此,该过程可能有点不同在未来的 Windows 10 版本中。
要理解这一点,首先我们需要知道通过 Windows 商店安装发行版和手动安装发行版之间的区别。将 Windows 商店视为 Windows 中的包管理器。它监视所有已安装、卸载、更新等的包。因此,设置菜单中有一个已安装应用程序的列表。安装发行版时,它会以 Appx 包(ZIP 存档)的形式出现。该包包含该发行版的 rootfs tarball(GZIP tar 文件)(示例install.tar.gz
)、启动器可执行文件(示例ubuntu.exe
)和一些其他内容。
首次执行该启动器时,它会提取 tarball(类似tar -xf
命令)并在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\{GUID}
注册表项中创建一个注册表项。此注册表项很重要,它提供了发行版的安装位置、默认用户等。
安装发行版时手动创建了相同的注册表项,但具有不同的基本路径和其他内容。由于此手动过程不是通过 Windows 应用商店进行的,因此它未在“设置”应用中列出。但wsl.exe --list --all
命令可以显示 WSL 中已安装的所有发行版。这样,我们就不会获得启动器可执行文件,但我们可以使用 完成所有操作wsl.exe
。
我们如何从“不良状态”中恢复?如果你熟悉 UNIX 世界,假设 WSL 中的发行版如下chroot 环境。 总是备份 WSL 发行版. 与实际基于 Debian 的发行版中一样,我们通常运行以下命令来修复软件包:
sudo dpkg –configure -a
sudo apt update –fix-missing
sudo apt install -f
如果这些都不能解决问题,卸载并重新安装可能会解决问题。您可能希望使用 备份文件夹/home
,tar -czf
因为大多数用户特定配置都保存在那里。接下来使用wsl.exe --unregister <Distribution Name>
命令卸载发行版。备份对用户可能很重要,因为前面的命令会删除整个根文件夹。。/
现在您可以像往常一样安装新的发行版并提取以前的/home
备份文件夹tar -xf
。
答案4
尝试这个:
wsl --set-default-version 2
您还可以将 wsl 的版本设置为任何已安装的发行版:
wsl --set-version Ubuntu-20.04 1