当我开始开发时,WSL
我不知道为什么,但我Ubuntu-20.04
从 Microsoft Store 安装了应用程序,而不是仅仅从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
所有文件和已安装的软件包
答案1
为什么你可能根本不需要这样做
好的,首先要说的是。这可能没什么必要。
商店中的“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
),安装程序会在您的 中创建您的实际 WSL 实例%UserProfile%\AppData\Local\Packages\CanonicalGroup...
。
当商店发布新版本时,唯一需要更新的是 rootfs 软件包。不是更改已安装的实例(感谢 Reddit 上的 u/zoredache 继续让我想起了这一点。
对于大多数用户来说,这是毫无用处的,除非你:
- 取消注册该实例(删除所有配置)并通过重新运行命令来重新配置它
ubuntu.exe
。 - 想要使用它
install.tar.gz
来创建第二个 WSL/Ubuntu 实例(使用wsl --import
)。然后,新创建的实例将使用 Store-updated rootfs。
这两种情况都不太常见。即使未版本化的 StoreUbuntu
更新到(大概)22.04,也不会改变你的已安装20.04 的实例,只有 rootfs包裹。
sudo do-release-upgrade -d
当您最终想要升级到 22.04(或临时版本)时,您仍然需要运行。
所以,鉴于...由于您已经按照自己想要的方式进行了配置,所以除了为 WSL 实例Ubuntu-20.04
获取一个更短、更清晰的名称之外,更改它对您没有什么好处。Ubuntu
无论如何,该怎么做
也就是说,由于 WSL2 存储数据的方式,移动配置并不那么困难。WSL2 实例的整个文件系统存储在名为 的虚拟 HDD 中ext4.vhdx
。
由于您有两个 Ubuntu 安装(Ubuntu
和),您会在下Ubuntu-20.04
找到其中两个文件。要获取确切位置,请从 PowerShell 运行以下命令:ext4.vhdx
%userprofile%\AppData\Local\Packages\
Get-ChildItem "$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*"
对于我的安装,那是:
...\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
...\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
此时解决方案可能相当明显,但当然要小心:
退出所有正在运行的 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 文件系统损坏(请参阅微软开发博客)。
如果您只需要从 Windows 访问文件,请使用\\wsl$\<distro>
Microsoft 博客中所述的 Windows 路径。但如果您需要复制整个内容(如本问题中所述),最好的办法是先通过wsl --set-version <distro> 2
(先备份wsl --export
)将实例转换为 WSL2。转换后,文件系统将采用 WSL2ext4.vhdx
格式。