首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在WSL中移动ubuntu

如何在WSL中移动ubuntu
EN

Ask Ubuntu用户
提问于 2021-09-26 16:16:16
回答 1查看 1.4K关注 0票数 2

当我开始用WSL进行开发时,我不知道为什么,但我从微软商店安装了Ubuntu-20.04应用程序,而不仅仅是Ubuntu。我知道,唯一的区别是,当新的Ubuntu-20.04版本发布时,Ubuntu不会自动更新。我想做的就是让UbuntuUbuntu-20.04一样,而不需要重新配置它。我想把所有文件从Ubuntu-20.04转移到Ubuntu,但我不知道这样做是否安全。有人知道怎么做我想做的事吗?我也应该这么做吗?

编辑:这两个版本的ubuntu都运行在WSL-2上,我使用@NotTheDr01ds使用wsl -l -v进行了检查。

编辑2:我想要从Ubuntu-20.04Ubuntu的所有配置,包括所有文件和已安装的软件包

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2021-09-26 16:51:54

--为什么您可能根本不需要这样做--

好吧,第一件事。这可能是非常不必要的。

商店中的"Ubuntu“(没有版本号)自动更新的事实是……是的,但在现实中有点误导。

这有点难以解释,但是当您从Store安装"Ubuntu“(没有版本)时,您实际上得到了两样东西:

  • 当第一次(通过ubuntu.exe)运行时,安装程序在%UserProfile%\AppData\Local\Packages\CanonicalGroup...中创建实际的WSL实例。

当商店上有一个新版本时,唯一更新的是rootfs包。它不会更改已安装的实例。(这要归功于Reddit上的u/zoredache,他保留了让我想起这个。)

对于大多数用户来说,这是非常无用的,除非您:

  1. 取消注册实例(删除所有配置),并通过重新运行ubuntu.exe命令重新配置它。
  2. 希望使用该install.tar.gz创建第二个WSL/Ubuntu实例(使用wsl --import)。然后,新创建的实例将使用Store更新的rootfs。

这两种情况都不常见。即使不版本化的Store Ubuntu被更新为(大概) 22.04,它也不会更改已安装的20.04实例,只更改rootfs包。

当您最终想升级到22.04 (或临时版本)时,仍然需要运行sudo do-release-upgrade -d

所以考虑到..。由于您已经按照您想要的方式配置了Ubuntu-20.04,所以除了为WSL实例命名一个更短、更干净的Ubuntu之外,更改它对您没有太大的好处。

怎么做

也就是说,按照WSL2存储数据的方式,移动配置并不那么困难。WSL2实例的整个文件系统存储在名为ext4.vhdx的虚拟硬盘中。

由于您有两个Ubuntu安装(UbuntuUbuntu-20.04),您将在%userprofile%\AppData\Local\Packages\下找到其中两个ext4.vhdx文件。要获得确切的位置,请从PowerShell运行以下命令:

代码语言:javascript
复制
Get-ChildItem "$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*"

对于我的安装来说,那是:

代码语言:javascript
复制
...\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,包括所有文件、所有权和权限。
  • 此时,只需将所需的(Ubuntu20.04) ext4.vhdx复制到新安装的(Ubuntu)上即可。真正的诀窍就是确保你复制的是正确的。您可能希望运行您的Ubuntu-20.04发行版并进行快速更改,以便您可以轻松地看到“右”副本上的后一个时间戳。

唯一真正的要求是两个实例的默认用户应该是相同的。

另一种可能性--因为你用wsl --export备份了你想要的配置,所以你总是可以把它放到一个名为Ubuntu的新实例中。

  • 首先,您需要卸载Store Ubuntu
  • 然后为新实例选择一个目录。
  • wsl --import Ubuntu 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访问文件,请使用Windows中的\\wsl$\路径,如该Microsoft中所述。但是,如果您需要复制整个事件,就像在这个问题中一样,最好的选择是首先通过wsl --set-version 2 (首先执行wsl --export备份)将实例转换为D72。转换之后,文件系统将采用WSL2 ext4.vhdx格式。

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1365921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档