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

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

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

  1. 文件存储在哪里?
  2. 如果它们存储在我的操作系统的硬盘驱动器中,我可以以某种方式将我的 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 的观点,但这个问题仍然有用。

标签: windows-subsystem-for-linux wsl-2


【解决方案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文件的位置有两种方式,官方的,繁琐的方式和非官方的又快又脏的方式

    官方的繁琐方式

    1. 从 CMD/PowerShell 将发行版导出到带有 wsl.exe --export <Distro> <FileName> 的位置
    2. 使用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?它是如何工作的?
    猜你喜欢
    • 2013-11-08
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2019-07-24
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多