使用 WSL 在 /mnt/d 上安装 Ubuntu

使用 WSL 在 /mnt/d 上安装 Ubuntu
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.04D:

  • 通过以下方式启动您的新实例:

    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 安装的副本,在其中尝试一些东西,然后删除“临时”副本。

相关内容