完全重新安装 WSL

yod*_*bar 34 windows linux uninstall installation windows-subsystem-for-linux

我安装了WSL 1,喜欢在我的 PC 上安装 Linux,然后发现两个操作系统之间文件互操作性稀缺的局限性。

因此,我按照规范安装了WSL 2(在 BIOS 设置和所有内容中启用了虚拟化),但安装并未完全正常工作,我无法将其设置为默认值,并且并非所有 shell 命令都按预期响应。
我用谷歌搜索,有人遇到了类似的问题,但没有提出那么多直接的解决方案(我想这仍然是一个相对较新的案例)。

所以我想尽可能深地删除 WSL 并从头开始重新安装 WSL 2。

  • 彻底删除 WSL 的最安全、最明智的流程是什么?
  • 是否可以在不安装 WSL 1 的情况下从头开始安装 WSL 2?

Not*_*1ds 35


更新:目前这个答案有点过时了。如果您运行的是在 Windows 10 或 11 22H2 之前安装的旧版 WSL,那么这可能是有关如何卸载的正确答案。但是,如果正在运行 WSL 的商店版本(或 UWP 版本),则请查看我的新答案(和/或其他用户的答案,如果存在)。


是否可以在不安装 WSL 1 的情况下从头开始安装 WSL 2?

否。WSL2 需要基本 WSL 支持。

彻底删除 WSL 的最安全、最明智的流程是什么?

这是我所拥有的关于删除与 WSL 相关的所有内容的最佳信息。

听起来您认为现有实例是一个失败的原因,但如果您想为后代备份它,您可以从以下开始:

  • wsl --export <distroname> archivename.tar

然后删除现有的发行版安装:

  • 您从应用商店安装的任何发行版,应首先通过 Windows 中的“应用程序和功能”(又名“添加或删除程序”)删除。这也适用于通过下载的 Appx 包手动安装的发行版。

然后检查以确保没有留下任何东西。从 PowerShell 或 CMD:

  • wsl -l
  • wsl --unregister <distroname>

您可能只想从商店安装一个新的发行版。其他组件的任何额外重新安装都不太可能产生影响。但如果你确实想删除它们:

  • 从 Windows 中的“应用程序和功能”(也称为“添加或删除程序”)中,删除“适用于 Linux 更新的 Windows 子系统”。我相当确定这是 Linux 内核更新。如果您想在下一步之前确保它完全消失,可能需要重新启动。

*从“打开或关闭 Windows 功能”中,禁用“Linux 的 Windows 子系统”。根据注释,在下一步之前可能需要重新启动。

  • 从 Windows 中的“打开或关闭 Windows 功能”中,禁用“虚拟机平台”。这就是 WSL2 Hyper-V 支持。

  • 重启。

当您从那里重新安装时,如果您能确认“Windows Subsystem for Linux Update”在安装内核更新包后返回到“应用程序和功能”(安装文档中的步骤 4 ,我将不胜感激。我将根据该信息更新此答案。


Not*_*1ds 23

此答案指的是较新的 Store/UWP 版本的 WSL。要确认您使用的是此较新版本,请从 PowerShell 运行以下命令:

Get-AppxPackage |? { $_.Name -like "*WindowsSubsystemforLinux*" }
Run Code Online (Sandbox Code Playgroud)

如果您看到结果,请继续阅读此答案。如果您没有得到结果,那么您可能正在运行旧版本的 WSL。请参阅我关于如何完全卸载该版本的旧答案。

对于 Store/UWP 版本,答案已更改:

是否可以在不安装 WSL 1 的情况下从头开始安装 WSL 2?

是的,在 Windows 11 22H2 下,wsl --install默认情况下只会安装 WSL2。要安装 WSL1,您必须添加wsl --install --enable-wsl1.

请注意,该--enable-wsl1选项在 Windows 10 上不可用,即使在与较新的 WSP 版本兼容的完全更新的系统上也是如此。在 Window 10 (19045.2311) 上,WSL1 仍会自动安装并通过wsl --install.

彻底删除 WSL 的最安全、最明智的流程是什么?

这是我所拥有的关于删除与 WSL 相关的所有内容的最佳信息。这应确保 (a) 删除所有功能,以及 (b) 回收所有磁盘空间。

  1. (可选)备份现有发行版:

    听起来您认为现有实例是一个失败的原因,但如果您想为后代备份它,您可以从以下开始:

    wsl --export <distroname> archivename.tar
    
    Run Code Online (Sandbox Code Playgroud)

    通过 确认要备份的所有发行版名称wsl -l -v

    或者,仅将对您重要的文件从发行版复制到发行版之外的安全位置。通常,这将包括您的主目录中的所有内容,但也会查看/var/etc可能想要保留的任何文件。

  2. (可选)确认备份分发的有效性:

    当然,如果备份对您很重要,请确认它可以使用wsl --import新名称。

  3. 取消注册现有发行版:

    对于使用 找到的每个发行版wsl -l -v,通过以下方式将其删除:

    wsl --unregister <distroname>
    
    Run Code Online (Sandbox Code Playgroud)

    警告:这是一个破坏性且不可逆的操作,除非您有上述有效的备份。

  4. 卸载从应用商店安装的所有分发包(应用程序):

    转到“设置” -> “添加或删除程序”,然后查找您可能已从商店安装的任何发行版(Ubuntu、Debian、Alpine、openSUSE 或其他)。这实际上与您上面未注册的发行版是分开的。这些软件包包括最初创建您的发行版的 Distro Launcher 和 rootfs(例如ubuntu2004.exe)。

    卸载每个发行版。

    在较旧的 Windows 版本中,卸载这些软件包也会卸载相应的发行版,从而导致一些意外的数据丢失。看来大多数最新的系统都要求通过两个单独的步骤来删除它们,这是一件好事。

  5. 另外,在“设置” -> “添加或删除程序”中,查找并删除任何“适用于 Linux 的 Windows 子系统”应用程序。这可能包括:

    • 适用于 Linux 的 Windows 子系统:主要 WSL 包本身
    • 适用于 Linux 的 Windows 子系统更新:更新旧版本(内置,作为 Windows 功能)WSL 版本的内核包。
    • Windows Subsystem for Linux WSLg Preview:Windows 11 附带的 WSLg 功能。
  6. 此时最好重新启动以释放任何其他正在使用的文件。

  7. 接下来,转到“设置” -> “打开或关闭 Windows 功能”

  8. 如果已启用,请禁用:

    • 虚拟机平台
    • Linux 的 Windows 子系统

    Windows 可能会提示重新启动。

  9. 重新启动后,确认以上项目均已成功删除。此时,任何wsl命令都应该简单地返回默认的“安装”帮助文本。

从此处重新安装的推荐方法是:

  • 打开提升的 PowerShell。最好作为普通用户在管理员提升的会话中执行此操作,而不是作为单独的管理员用户。

    wsl --install
    
    Run Code Online (Sandbox Code Playgroud)

    默认情况下,这将:

    • 重新启用虚拟机平台
    • 从 Microsoft Store 安装最新的 WSL 版本。此版本现在直接包含内核,而不是像以前那样需要单独的安装步骤。
    • 从 Microsoft Store 安装默认的 Ubuntu 发行版

    另请参阅wsl --help其他安装选项。例如,您可以在此阶段跳过发行版的安装或选择不同的发行版。