wsl2 中的文件物理存储在哪里? [关闭]

Posted

技术标签:

【中文标题】wsl2 中的文件物理存储在哪里? [关闭]【英文标题】:Where are the files inside wsl2 physically stored? [closed] 【发布时间】:2021-01-18 22:59:24 【问题描述】:

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

所以实际上我有两个相关的问题。

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

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

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

【问题讨论】:

我投票结束这个问题,因为这不是软件开发独有的问题。 @Braiam 我认为 WSL 与任何 IDE 一样是一种软件开发工具。当然和容器一样多。至少这是它的预期目的。 MS 甚至将其作为组成他们新的远程开发套件的 3 个扩展之一(请原谅我,我不记得名字了。)根据help center 的要点,没关系。你同意吗。不要试图令人不快;我真的很好奇。我自己还在学习规则。 @NateT 等等,它是 windows、linux、cpus 和咖啡机,对这些主题没有任何疑问。它必须是软件开发所独有的。这甚至不是软件开发,而是询问有关用户功能实现的详细信息。 @Braiam 咖啡机...如果只有。我们需要一个网站:D 好点 @Braiam 也许这个问题应该迁移到ServerFault 或其他 S.E.论坛?我明白 Braiam 的观点,但这个问题仍然有用。 【参考方案1】:

这是您最后一个问题的答案:使用符号链接

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

我还将从您的用户文件夹中编辑/创建 .wslconfig 文件,以将交换文件移动到您存储 WSL 虚拟机的文件夹中,并可能编辑/添加 CPU 内核和 RAM 分配的选项

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

像往常一样启动您的 WSL 虚拟机。

【讨论】:

【参考方案2】:

我在 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:正如 cmets 中所指出的,我忘记了“--export”命令。

【讨论】:

感觉你的答案中缺少wsl --export 步骤,对吧?此外,有关如何为新导入的实例设置用户名的信息,请参阅this answer。 我个人的偏好(我敢肯定,每个人都会有所不同)是为导入的实例本身创建类似%userprofile%\Documents\WSL\instances(或VMsdistros)的东西,以及%userprofile%\Documents\WSL\images对于导出的.tar 文件。这样您就可以cd $env:userprofile\Documents\WSL(在 PowerShell 中)并轻松访问系统上的图像和实例。 根据我的经验,没有理由重新启动。新实例应该立即可用。 您可以使用以下命令解决默认用户的问题,在 PS 中执行:<distro-name> config --default-user <username>,在您的情况下为Ubuntu config --default-user sergio 默认用户问题:创建echo -e "[user]\ndefault=abhasker" >> /etc/wsl.conf,然后重启wsl --shutdown【参考方案3】:

所有文件都存储在安装目录下的ext4.vhd文件中,不能像ext4(obv)那样直接挂载到windows上

改变上述vhd文件的位置有两种方式,官方的,繁琐的方式和非官方的又快又脏的方式

官方的繁琐方式

    从 CMD/PowerShell 将发行版导出到带有 wsl.exe --export <Distro> <FileName> 的位置 使用wsl.exe --import <Distro> <InstallLocation> <FileName> [Options] 将发行版导入其他位置

这样做的问题是它非常耗时,在你这样做之后,祈祷它可以毫无问题地导出和导入价值数 GB 的数千个文件

快速而肮脏的方式

这涉及到一个名为 lxrunoffline 的非官方开源 WSL 管理器

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

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

现在这个过程很简单,就像lxrunoffline move -n <distroname> -d <destination-folder>

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

希望我能帮上忙

编辑:错字

【讨论】:

".exe" 所以它是 ntfs?它是如何工作的?

以上是关于wsl2 中的文件物理存储在哪里? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

表空间及组成表空间的物理文件

Mac 上的 Docker 机器:在 docker 主机/docker 机器上看不到已安装的卷?卷物理存储在哪里?

请问有关系统的网卡物理地址的设置的文件在哪里能找到?xp ...

python读取文件操作文件放在哪里

Openstack 之 正常关闭一个物理宿主机

数据库如何在文件系统上物理存储数据?