wsl2 中的文件物理存储在哪里?

Where are the files inside wsl2 physically stored?

我已经在我的 windows 机器上安装了 wsl2,但我无法确定文件的实际存储位置。
请注意,我并不是说我想在文件资源管理器中浏览它们——我知道这可以通过在资源管理器中输入 \wsl$\.
来完成 如果我不得不猜测,我会说文件存储在存储 os 的同一硬盘驱动器中。

其实我有两个相关的问题。

  1. 文件存储在哪里?
  2. 如果它们存储在我的 os 的硬盘驱动器中,我可以以某种方式将我的 wsl 重新定位到另一个硬盘驱动器吗?

编辑:
我能够找到安装路径,在我的机器中路径是:
C:\Users\Eliran\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState

有没有办法将它安装到另一个位置?

所有文件都存储在安装目录下的ext4.vhd个文件中,不能像ext4(obv)

那样直接挂载到windows

有两种方法可以更改上述 vhd 文件的位置,一种是官方的、繁琐的方式,另一种是非官方的快速而肮脏的方式

官方繁琐方式

  1. 从 CMD/PowerShell
  2. 将发行版导出到 wsl.exe --export <Distro> <FileName> 的位置
  3. 使用 wsl.exe --import <Distro> <InstallLocation> <FileName> [Options]
  4. 将发行版导入到不同的位置

这样做的问题是它非常耗时,在你这样做之后,祈祷它导出和导入价值几千兆字节的数千个文件没有任何问题

快速而肮脏的方式

这涉及一个名为 lxrunoffline

的非官方开源 WSL 管理器

要安装它(最多需要一分钟)阅读开发人员的说明 here

如果您是通过从发布页面手动下载二进制文件安装的,请确保将其安装到 PATH 中的目录,例如 C:\Windows

现在过程很简单 lxrunoffline move -n <distroname> -d <destination-folder>

例如lxrunoffline move -n Ubuntu-20.04 -d G:\wsl\

希望我有所帮助

编辑:打字错误

我在 PowerShell 中执行了这些命令,将我的 Ubuntu 发行版从 C: 移动到驱动器 D:\wsl-ubuntu :

PS C:\Users\smarc> mkdir D:\wsl-ubuntu  (create new location)
PS C:\Users\smarc> wsl -l -v            (list wsl distros)
NAME                   STATE           VERSION
Ubuntu                 Running         2
PS C:\Users\smarc> wsl --shutdown
PS C:\Users\smarc> wsl -l -v            (verify if is stopped)
NAME                   STATE           VERSION
Ubuntu                 Stopped         2
PS C:\Users\smarc> wsl --export Ubuntu ubuntu.tar  
PS C:\Users\smarc> wsl --unregister Ubuntu
PS C:\Users\smarc> wsl --import Ubuntu D:\wsl-ubuntu\ .\ubuntu.tar --version 2

最后重启电脑。

我遇到的唯一问题是启动 Ubuntu 应用程序时的默认用户是 root。我需要执行 $ su sergio 来输入我的个人用户。

您可以在进程结束时删除 ubuntu.tar。

#edit 2021-04-13:正如评论中所指出的,我忘记了“--export”命令。

这是对您最后一个问题的回答:使用符号 links

  • 以管理员身份打开命令提示符
  • 使用 wsl --shutdown
  • 关闭 wsl 虚拟机
  • 将文件夹更改为 C:\Users\Eliran\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\
  • LocalState 文件夹移动到另一个位置,例如 Z:\wsl\Ubuntu\
  • mklink /J LocalState Z:\WSL\Ubuntu\LocalState
  • 创建符号 link

我还会 edit/create 您的用户文件夹中的 .wslconfig 文件,以将交换文件移动到您存储 WSL 虚拟机的文件夹,也许 edit/add [=51] 选项=] 内核和 RAM 分配

[wsl2]
memory=4GB
processors=2
swap=1GB
swapFile=Z:\WSL\swap.vhdx
  • memory 是 WSL 将使用的最大 ram;
  • processors 是分配给您的 WSL 虚拟机的内核;
  • swap是交换文件的大小;
  • swapFile 是您交换的位置,据我所知,所有 WSL 虚拟机都使用它;注意路径中的双斜杠,它们对于路径是必需的。

像往常一样启动 WSL VM。