如何从 Windows 10 和 Windows 11 访问同一个 WSL 实例?

如何从 Windows 10 和 Windows 11 访问同一个 WSL 实例?

我有一个多启动系统,有时我会启动 Windows 10,有时我会启动 Windows 11。在 Windows 10 中,我能够将我的 WSL2 Linux 实例的 vhdx 磁盘移动到另一个驱动器。我知道在 Windows 11 中我可能可以做同样的事情来克隆实例,但我不想克隆,我想访问同一个实例以节省空间。这该怎么做?他们不会同时访问同一个实例,所以我不必担心与此相关的任何问题,有时我会启动 Windows 10 并访问它,有时我会在 Windows 11 中访问它。

答案1

这种方法看起来有点老套,但应该可行。由于我没有双启动 Win10/Win11,因此我尚未验证,但我对此非常有信心。这是我过去建议的一种技术的修改,由于双重访问,必须进行两次。虽然它看起来相当复杂,但请注意我有点“过度解释” :-)。

从你的问题来看,声音就像您可能已经完成了其中的一部分,但是为了确保万无一失,我还是要“从头开始”。

另外,您没有提到发行版,因此我假设是 Ubuntu,因为它是默认的和最常见的。

从 Windows你想要共享的 WSL 安装

首先,从您已安装发行版的 Windows 版本开始。我相信这是适合您的 Windows 10,因此我将以此为参考。

首先退出 WSL 并前往 PowerShell。

运行以下命令,修改您想要的任何路径或名称:

# Modify this next line if you'd like to use a different location
$WSL_BASE = "C:\WSL"
wsl -l -v # Confirm the distribution name and adjust next line if needed
$WSL_ORIGINAL_NAME = "Ubuntu"
$WSL_NEW_NAME = "Ubuntu-Shared"

wsl --shutdown

mkdir "$WSL_BASE\instances\$WSL_NEW_NAME"
mkdir "$WSL_BASE\images"
cd "$WSL_BASE"

wsl --export "$WSL_ORIGINAL_NAME" "$WSL_BASE\images\$WSL_ORIGINAL_NAME.tar"
wsl --import "$WSL_NEW_NAME" "$WSL_BASE\instances\$WSL_NEW_NAME" "$WSL_BASE\images\$WSL_ORIGINAL_NAME.tar" --version 2
wsl --set-default $WSL_NEW_NAME
wsl ~

您应该位于复制的 WSL 实例中,但以 root 用户身份。我们稍后会在 Windows 11 下修复此问题,因为我们无论如何都会“丢弃”此安装。退出 WSL,然后再次从 PowerShell 中执行此操作:

rm "$WSL_BASE\instances\$WSL_NEW_NAME"

这样,我们就复制并删除了共享位置中的发行版。这还会(安全地)创建所需的注册表项。但是,删除实例文件后,我们(暂时)无法使用此发行版,除非我们从 Win11 中“修复”它。

从 Windows没有有你想要共享的 WSL 安装

我们将在 Windows 11 中执行类似的过程,使用您在第一步中创建的 tar/image 文件。不用多说,但请使用$WSL_BASE您在 Windows 11 中使用的相同文件。

从 PowerShell:

# Use the same WSL_BASE that you used in Win10
$WSL_BASE = "C:\WSL"
# The WSL_ORIGINAL_NAME must also match what 
# was used in Windows 10
$WSL_ORIGINAL_NAME = "Ubuntu"
$WSL_NEW_NAME = "Ubuntu-Shared"

mkdir "$WSL_BASE\instances\$WSL_NEW_NAME"
cd "$WSL_BASE"

wsl --import "$WSL_NEW_NAME" "$WSL_BASE\instances\$WSL_NEW_NAME" "$WSL_BASE\images\$WSL_ORIGINAL_NAME.tar" --version 2

wsl ~ -d $WSL_NEW_NAME

与之前一样,您应该是 root 用户,因为 WSL 不会“记住” --imported 发行版中的默认用户名。要解决此问题,请使用以下命令创建/etc/wsl.conf设置您的默认用户:

read -p "Your default WSL username: " DEFAULT_USER

# One-liner - Must be copied/pasted intact:
sudo sh -c "( cat << EOF
[user]
default=$DEFAULT_USER
EOF
) >> /etc/wsl.conf"

exit

退出 WSL 发行版并返回到 PowerShell:

wsl --shutdown
wsl --set-default $WSL_NEW_NAME
wsl ~

现在您应该拥有一个共享的默认 Ubuntu-Shared 发行版,它可以在 Windows 10 和 Windows 11 上正常运行。

一旦您确认一切正常,请使用 对其进行另一次备份wsl --export,然后从 Windows 10 中卸载原始发行版。当然,您可以从“开始”菜单中通过右键单击“Ubuntu”(或发行版名称)并选择“卸载”来执行此操作。

您还可以删除我们在中创建的原始图像文件D:\WSL\images

如果您遇到任何问题,请告诉我。我已经在自己的系统上验证了上述每个命令,但当然,实际上并没有在两个不同的双启动 Windows 上执行过。我可能在复制/粘贴时遗漏了某些内容,如果是这样,我深表歉意!我们可以根据需要修复它,但可能需要重新做一遍。

相关内容