这是导入 WSL 导出并覆盖 "default" 安装的正确方法吗?

Is this the correct way to Import a WSL export, overwriting "default" installation?

我创建了一个 WSL(版本 1)Ubuntu 20.04 发行版,我已经导出它作为备份。我对原始发行版做了一些更改,想恢复导出。

原始发行版安装名为:Ubuntu-20.04

wsl --list

输出:

Windows Subsystem for Linux Distributions:
Ubuntu-20.04 (Default)

Ubuntu 的安装文件夹是安装的默认文件夹:

C:\Users\<my user name>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_xxxxx

(我已经更改了用户名和UID)

我查看了导入和导出选项,我可以轻松地将导出的文件导入到新文件夹中:

wsl --export Ubuntu-20.04 c:\temp\wcc-ubuntu-20-04-wsl.tar
wsl --import Ubuntu-20.04-New c:\wsl\ubuntu-new wcc-ubuntu-20-04-wsl.tar

然后出现在可用列表中:

wsl --list

输出:

Windows Subsystem for Linux Distributions:
Ubuntu-20.04 (Default)
Ubuntu-20.04-New

如果我想使用“新”导入,我必须先设置默认值,然后从命令行打开访问它:

wsl --setdefault Ubuntu-20.04-New
wsl -d Ubuntu-20.04-New -u myusername

如果我在开始菜单中使用 Ubuntu 图标,它似乎会忽略“新”默认设置并会打开原始安装。没问题,如果需要,我总是可以从命令行启动 WSL。

然后我研究了如何导入原始默认安装。我的研究表明,您可以使用“取消注册”选项删除发行版,然后将文件再次导入到同一位置。所以我 运行 注销命令:

wsl --unregister Ubuntu-20.04

但是,当我再次尝试导入时,将目标设置为设置文件夹,但我发现文件夹不是空的。

C:\Users\<my user name>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_xxxxx\LocalState

查看导入的 WSL,它只有两个文件夹:

取消注册后,rootfs 文件夹将被完全删除,临时文件仍然存在。要覆盖目的地,您必须删除临时文件夹。回顾原来的安装文件夹,这两个文件夹存在于“LocalState”子文件夹下。所以我手动删除了这两个文件夹。

然后我能够执行到原始文件夹的导入。我能够通过命令行以及开始菜单中的 ubuntu 图标启动 WSL。我唯一注意到的是命令提示符默认为“root”用户。

root@xxxxxxx:~#   

我可以使用切换用户“su”命令以正确的用户身份登录。

su - myusername
myusername@xxxxxxx:~#

我还没有对导入的 WSL 进行全面测试,以确保它能完成所需的一切。未发现任何错误。

我担心的是这可能会导致我未曾见过的问题。我确实阅读了几篇明确表示不要更改安装文件夹中的任何文件的帖子和博客。我希望那里的其他人也想做同样的事情并且没有问题,做了不同的事情或发现我使用的方法有问题。

非常感谢您抽出宝贵的时间来准备这篇文章以及任何评论或建议。

这是我用我的做的:

列出所有发行版并执行 wsl --unregister Ubuntu (Default) 或您要删除的任何发行版。

PS C:\Users\me> wsl --list
Windows Subsystem for Linux Distributions:
docker-desktop (Default)
docker-desktop-data

进行导入。

PS C:\Users\me> wsl --import Ubuntu C:\Users\me\wsl\Ubuntu E:\wsl\Ubuntu.tar

验证发行版是否已导入。

PS C:\Users\me> wsl --list
Windows Subsystem for Linux Distributions:
docker-desktop (Default)
Ubuntu <--
docker-desktop-data

将默认用户从 root 更改为您

PS C:\Users\me> ubuntu.exe config --default-user me

Ubuntu 设置为 wsl 的默认值

PS C:\Users\me> wsl --set-default Ubuntu

PS C:\Users\me> wsl --list
Windows Subsystem for Linux Distributions:
Ubuntu (Default) <--
docker-desktop
docker-desktop-data

Source

我最近刚做了一次导入,到目前为止一切正常。我的项目在 wsl 网络中,所以它也包含在导出中。