当我开始开发时,WSL
我不知道为什么,但我Ubuntu-20.04
从 Microsoft 商店安装了应用程序,而不是仅仅Ubuntu
. 我知道唯一的区别是新版本发布Ubuntu-20.04
时不会自动更新。Ubuntu
我想做的就是在Ubuntu
不Ubuntu-20.04
重新配置的情况下制作。我想将所有文件从 移动Ubuntu-20.04
到Ubuntu
,但我不知道这样做是否安全。有人知道如何做我想做的事吗?我也应该这样做吗?
编辑:ubuntu 的两个版本都在运行WSL-2
我已经使用wsl -l -v
@NotTheDr01ds 所说的检查过它。
编辑2:我希望我的所有配置Ubuntu-20.04
包括Ubuntu
所有文件和已安装的包
为什么您可能根本不需要这样做
好的,第一件事。这可能是非常不必要的。
商店中的“Ubuntu”(没有版本号)自动更新的事实是……是的,但在现实中有点误导。
这有点难以解释,但是当您从商店安装“Ubuntu”(无版本)时,您实际上会得到两件事:
一个 rootfs 包 (
install.tar.gz
) 在C:\Program Files\WindowsApps\CanonicalGroup...
. 您可以通过启动管理 PowerShell 并运行Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName }
.首次运行时(通过
ubuntu.exe
),安装程序会在您的%UserProfile%\AppData\Local\Packages\CanonicalGroup...
.当 Store 上有新版本时,唯一会更新的是 rootfs 包。它不会更改您安装的实例。(感谢 Reddit 上的 u/zoredache,他不断提醒我这一点。)
这对大多数用户来说毫无用处,除非您:
ubuntu.exe
命令重新配置它。install.tar.gz
来创建第二个 WSL/Ubuntu 实例(使用wsl --import
)。然后,新创建的实例将使用 Store-updated rootfs。这两种情况都不是很常见。即使未版本化的 Store
Ubuntu
更新到(大概)22.04,它也不会更改您安装的 20.04 实例,只会更改 rootfs package。sudo do-release-upgrade -d
当您最终想要升级到 22.04(或临时版本)时,您仍然需要运行 a 。因此,鉴于...由于您已经
Ubuntu-20.04
按照您想要的方式进行了配置,因此更改它对您没有太大的好处,除了Ubuntu
为 WSL 实例命名一个更短、更简洁的名称之外。无论如何要怎么做
也就是说,WSL2 存储数据的方式,移动配置并不是那么困难。WSL2 实例的整个文件系统存储在名为
ext4.vhdx
.由于您有两个 Ubuntu 安装(
Ubuntu
和Ubuntu-20.04
),您将ext4.vhdx
在%userprofile%\AppData\Local\Packages\
. 要获取确切位置,请从 PowerShell 运行以下命令:对于我的安装,那是:
在这一点上,解决方案可能相当明显,但当然要小心:
退出所有正在运行的 WSL 实例。
然后
wsl --shutdown
确保当前没有任何运行。wsl --export Ubuntu-20.04 2021-09-26_Ubuntu-20.04_backup.tar
使用(或任何您想调用的备份文件)备份现有配置并不是一个坏主意。这基本上创建了当前 rootfs 的 tarball,包括所有文件、所有权和权限。此时,只需将您想要的 (Ubuntu-20.04) 复制
ext4.vhdx
到新安装的 (Ubuntu) 上。真正的诀窍是确保您复制正确的。您可能想要运行您的Ubuntu-20.04
发行版并进行快速更改,以便您可以轻松地在“正确”副本上看到后一个时间戳。唯一真正的要求是两个实例的默认用户应该相同。
另一种可能性 - 由于您使用 备份了所需的配置
wsl --export
,因此您始终可以wsl --import
将其放入名为Ubuntu
.Ubuntu
。AppData
目录下。wsl --import Ubuntu <directory> path\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2
我把我的
%userprofile%\Documents\WSL\instances
和我的tar
备份保存在%userprofile%\Documents\WSL\images
. 这使我可以通过wsl --import
. 能够在不影响我的日常环境的情况下测试一些东西真是太好了。任何阅读本文的 WSL1 用户请注意。WSL1 的 rootfs 不存储在虚拟 HDD 文件中,而是作为
...\LocalState\rootfs\
. 请不要直接访问这些文件,因为它很容易导致 WSL 文件系统损坏(请参阅Microsoft devblog)。如果您只需要从 Windows 访问文件,请使用该
\\wsl$\<distro>
Microsoft 博客中所述的 Windows 中的路径。但是,如果您需要复制整个内容,就像在这个问题中一样,最好的办法是首先将实例转换为 WSL2,通过wsl --set-version <distro> 2
(先做wsl --export
备份)。转换后,文件系统将采用 WSL2ext4.vhdx
格式。