OS: Windows 11
我在 Windows 11 Pro 上安装了 WSL 并加载了 Ubuntu 20.04,如下所示(从以管理员身份运行的命令提示符中):
wsl --install Ubuntu-20.04
安装完成,没有任何错误。然后我退出了 Ubuntu 会话,并进入:
c:\windows\system32
然后我输入:
wsl
最后进入 Ubuntu 终端会话:
john@john-x5700: /mnt/c/Windows/system32
我有两个磁盘:C 和 D。在 Ubuntu 终端中显示为:
/mnt/c
和
/mnt/d
看起来 Ubuntu 安装在 /mnt/c 上。我想做的是将 Ubuntu 安装在 /mnt/d 中。这可能吗?
答案1
在了解如何在另一个驱动器上移动/安装 WSL 发行版之前,了解一些事情很重要。
wsl
首先,当您从 PowerShell 或 CMD(或实际上任何地方)运行 just (不带任何选项)时,它会告诉 WSL 从父进程传递给它的任何目录中启动。如果您C:\Windows\System32
在 CMD 中,那么它就会从那里启动。
所以你的 WSL起始目录与你的 WSL 实例的位置无关已安装。
您可以通过以下几种方式之一覆盖起始目录:
wsl ~
:将在 WSL 文件系统中默认用户的主目录中启动。对于 WSL2,该目录位于虚拟的磁盘。wsl --cd /
:将从该虚拟文件系统的根目录中启动。wsl --cd C:\
:将从 Windows 驱动器的根目录启动C:
,默认情况下安装在该根目录/mnt/c
,正如您已经发现的那样。这是一个挂载点在虚拟文件系统中,实际上是通过内部 WSL 网络公开的真实(可能的)物理驱动器。
无论您的实际 Ubuntu 发行版安装在何处,所有这些命令都将以相同的方式工作。
所以实际上,您不想将其移动到/mnt/d
;您想将其移动到的某个位置D:
。
那么 Ubuntu 安装在哪里?
那虚拟磁盘我提到的实际上是 WSL 中 Ubuntu 安装的主体。它包含整个 Linux(技术上称为“ext4”)文件系统,其中所有文件里面WSL 被存储。
虚拟磁盘会自动安装到:
%userprofile%\AppData\Local\Packages\Canonical<...>\LocalState\ext4.vhdx
那应该是这样的:
C:\Users\<your_windows_user>\AppData\Local\Packages\Canonical<...>\LocalState\ext4.vhdx
警告——不要尝试手动移动它。
那么我怎样才能移动它或者改变它的安装位置呢?
技术上,您无法“移动它”或“更改它的安装位置”,但作为一种完全可以接受的解决方法,您可以:
- 备份你现有的 Ubuntu 安装
- 将其恢复到您想要的任何目录(
D:\
在本例中为驱动器上) - 删除原件
要做到这一点:
首先,在 PowerShell 中,在驱动器的某处创建以下目录结构
D:
:mkdir D:\WSL\instances\Ubuntu2004 mkdir D:\WSL\images cd D:\WSL\images
然后,仍在
images
目录中:wsl --export Ubuntu-20.04 ubuntu.tar wsl --import Ubuntu2004 D:\WSL\instances\Ubuntu2004 ubuntu.tar --version 2
第一行创建备份,第二行在您的驱动器上创建一个名为
Ubuntu2004
(而不是默认的)的新 WSL 实例。Ubuntu-20.04
D:
通过以下方式启动您的新实例:
wsl ~ -d Ubuntu2004
WSL 不会“记住”已实例的默认用户,因此您目前
--import
应该记住。您需要为每个实例设置默认用户名root
这个答案.即:sudo -e /etc/wsl.conf
并添加以下内容:
[user] default=<your_username>
保存,退出,然后退出 Ubuntu。
wsl --terminate Ubuntu2004
wsl ~ -d Ubuntu2004
如果一切正常,则将该实例设置为默认实例。再次回到 PowerShell:
wsl --set-default Ubuntu2004
现在,当您输入时,
wsl ~
您将从该实例启动,您可以通过运行wsl -l -v
(再次从 PowerShell)和/或echo $WSL_DISTRO_NAME
(从 Ubuntu 内部)来确认。一旦你有确认的一切按预期工作,你可以删除原来的:
wsl --unregister Ubuntu-20.04
请记住,这是一个破坏性的操作并将删除该虚拟文件系统中的所有文件。
当然,即使现在安装在D:\WSL
目录下,除非您在启动时指定目录(通过类似wsl ~
或提到的其他方法之一),否则您仍然将从父进程传入的任何目录中启动(例如C:\Windows\System32
)。
一伟大的这种技术的优点是,一旦你学会了它,你就可以安装多个发行版。你可以轻松地创建现有 Ubuntu 安装的副本,在其中尝试一些东西,然后删除“临时”副本。