如何重置 Windows 子系统 (Linux) 的手动安装?

如何重置 Windows 子系统 (Linux) 的手动安装?

有关的:有没有办法在 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>

管理和配置适用于 Linux 的 Windows 子系统

答案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

如果这些都不能解决问题,卸载并重新安装可能会解决问题。您可能希望使用 备份文件夹/hometar -czf因为大多数用户特定配置都保存在那里。接下来使用wsl.exe --unregister <Distribution Name>命令卸载发行版。备份对用户可能很重要,因为前面的命令会删除整个根文件夹。。/现在您可以像往常一样安装新的发行版并提取以前的/home备份文件夹tar -xf

答案4

尝试这个:

wsl --set-default-version 2

您还可以将 wsl 的版本设置为任何已安装的发行版:

wsl --set-version Ubuntu-20.04 1

相关内容