更改 WSL 安装位置

Lin*_*ing 12 installation windows-subsystem-for-linux

我正在尝试在我的电脑 (Windows 10) 中安装适用于 Linux 的 Windows 子系统。我通过以管理员身份运行打开了“命令提示符”窗口,并wsl --install在不更改初始默认文件夹的情况下运行C:\Windows\system32。因此,WSL 默认安装在此位置。

后来,我通过转到Settings -> Apps & Features -> Windows Subsystem for Linux Update -> Uninstall卸载了 WSL 。

然后,我下载并安装了 WSL Update C:\users\myaccount。但是,当我从开始菜单运行 WSL 时,它仍然会转到C:\Windows\system32.

有没有办法将 WSL 安装的默认位置移动到C:\users\myaccount. 此外,我注意到从“设置” -> “应用程序和功能”C:\Windows\system32卸载 WSL 后,WSL 仍在文件夹中。

Not*_*1ds 18

重要的是要了解 WSL 安装涉及多个组件,并且您是否可以“移动”或更改它们的安装位置对于每个组件都是不同的:

  1. wsl.exe命令是您主要询问的内容,在最近的版本中内置于 Windows 中。您没有(也不能)wsl.exe通过任何Windows 功能应用程序和功能设置实际安装或卸载实际内容。当您安装 Windows 时它就存在。

  2. Linux 的基本 Windows 子系统(在某种程度上是“lxss”),它也作为“Windows 功能”内置于 Windows 中。作为一项 Windows 功能,它可以启用或禁用,但据我所知,不能卸载。正如您在我的帖子中看到的,这占用的磁盘空间非常少。

  3. WSL2 虚拟机平台,也是 Windows 功能。

与所有其他 Windows 功能一样,您无法更改文件所在的位置。大多数都会在System32. 事实上,当您启用该功能时您位于该目录中,这一事实与此无关。

我不记得其中的哪些文件C:\Windows\System32\lxss我不记得安装 Windows 时目录

其他非 Windows 内置组件包括:

  1. WSL2 Linux 内核。这实际上是您卸载“Windows Subsystem for Linux Update”时删除的内容。我同意它的名称令人困惑。

    此官方内核还与其他 WSL 二进制文件一起安装在子目录中,以C:\Windows\System32\lxss\tools. 虽然您无法更改安装此内核的文件夹,但如果您愿意,可以将其移动到另一个目录,并在Windows(而非 Linux)用户配置文件目录中创建一个文件,其名称.wslconfig包含以下内容:

    [wsl32]
    kernel="C:\path\to\kernel"
    
    Run Code Online (Sandbox Code Playgroud)

    您还可以编译其他内核并将它们放置在您喜欢的任何位置,指向您想要在.wslconfig.

  2. 一个或多个 WSL 发行版。

    当您使用 Microsoft Store 或从 Microsoft Store 安装发行版时wsl --install -d <distro>,它默认安装在%USERPROFILE%\AppData\Local\Packages\<PackageName>. 可以通过导出并重新导入它们来“移动”它们。

    来自 PowerShell:

    mkdir D:\WSL\images # For example
    mkdir D:\WSL\instances\<newDistroName>
    cd D:\WSL
    
    wsl -l -v # Verify distro name to export
    wsl --export <distroname> .\images\<distroname>.tar
    wsl --import <newDistroName> .\instances\<newDistroName> .\images\<distroname>.tar
    wsl --set-default <newDistroName>
    
    Run Code Online (Sandbox Code Playgroud)

    您还需要通过文件在复制的实例中设置默认用户名,如本答案/etc/wsl.conf中所述。

    也可以将分发文件从您的AppData文件夹强制移动到另一个位置,然后更新注册表相应的注册表位置 ( HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss)。不过,我没有测试过,也没有看到其他人尝试过。如果你想尝试一下,请确保你有wsl --export上面的备份。


cfe*_*ard 8

如果更改特定发行版的位置是目标,这可能是最快、最安全的方法:

  1. wsl --终止发行版名称
  2. 将 ext4.vhdx 文件移动到 new_location
  3. wsl --取消注册发行版名称
  4. wsl --就地导入发行版名称 ext4.vhdx_file_in_new_location

所有 4 项操作都是即时的。