几个月前,我创建了一个 WSL1,并在用户名下使用了 Ubuntu 应用程序。void
后来,我决定将其升级到 WSL2,但在升级过程中遇到了错误。后来,我发现这是由于 BIOS 虚拟化设置造成的。
无论如何,我已经执行了这些操作来删除 WSL2。
https://pureinfotech.com/uninstall-wsl2-windows-10/
- 删除 Ubuntu 应用程序
- 卸载适用于 Linux 的 Windows 子系统更新
- 从 Windows 功能中清除虚拟机平台选项
- 从 Windows 功能中清除“适用于 Linux 的 Windows 子系统”选项
完成这些操作后,我启用了 BIOS 虚拟化并再次下载了 WSL2,运行起来非常顺畅。
问题是我想知道我在void
用户名下在 WSL1 下创建的文件发生了什么。执行上述操作后它们是否也被删除了,还是它们只是在我的 Windows 机器的某个地方。
类似的第二个问题:
如果我删除我的 Ubuntu 应用程序(从 Windows 应用商店),那么这也会删除我在该用户名下创建的所有数据(文件夹等)吗?
答案1
简短回答:当你卸载 WSL1 Ubuntu 时,你在其中创建的文件几乎肯定也会被删除。
更多细节:
与从 Microsoft Store 安装的大多数 Windows 10 应用一样,应用本身通常安装到的子目录中C:\Program Files\WindowsApps
。此目录受到保护,普通用户无法访问,因此您通常不会与其交互。
然后,当您ubuntu.exe
首次运行(或其变体之一)时,WSL 会创建一个“实例”(通常称为“发行版”,但在我看来,该术语实际上应该保留其正常定义)。该实例安装到%userprofile%\AppData\Local\Packages\Canonical...\
。Canonical...
子目录名称将略有不同,具体取决于您从商店安装的版本。
您在 WSL 的根文件系统中看到的所有文件都位于..\Canonical...\LocalState
子目录中。
- 对于 WSL1,这些文件实际上在 Windows 本身的 下可见
..\LocalState\rootfs
,但永远不应直接访问(或面临腐败风险)。 - 对于 WSL2,文件位于
ext4.vhdx
同一目录中命名的虚拟 HDD 中。
无论版本如何,卸载商店应用都会删除两个都App 包C:\Program Files\WindowsApps\...
和 的文件系统%userprofile%\Local\Packages\Canonical...
。
我其实并不确定,但我在几个系统上尝试了一下,这些系统上我没有使用过发行版来确认。老实说,我有点惊讶,因为卸载应用程序不应卸载与该应用程序相关的数据。但是,对于从应用商店安装的 WSL 发行版,它会卸载。
请注意,您可以非常轻松地备份您的实例,而且我会定期备份,尤其是在安装后立即备份,这样我就可以获得一个“干净/新鲜”的映像,可用于创建其他实例。WSL 的优点之一是您可以快速启动发行版的新实例来尝试某些东西,然后在完成后将其丢弃。
该wsl --export
命令用于备份实例。它将创建一个 tarball全部实例中的文件(包括系统和用户文件)。然后可以使用该 tarball 创建新实例wsl --import
。这些 ed 映像的优点import
在于它们不是与应用程序本身绑定。换句话说,卸载商店应用程序将不是已删除您使用 手动创建的实例wsl --import
。
巧合的是,我最近将所有“商店安装”实例移至“手动”实例。还有其他优势:
- 您可以在任何驱动器/子目录中创建这些新实例。并不局限于您的
AppData
目录。 - 如上所述,卸载 Store 应用不会删除这些实例。
- 你可以随意命名它们,例如
Ubuntu20.04_WSL1
另请注意,Windows 11 版本的 WSL 具有添加驱动器(物理和虚拟)的功能wsl --mount
。当我转向 Windows 11 时,我的计划是看看它在创建分离驱动器上进行安装,以便我的用户数据与根文件系统/home
分开。.vhdx