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