更改 WSL2 的存储位置

更改 WSL2 的存储位置

我想知道如何更改存储包含 Debian WSL2 容器信息的文件夹的位置。根据 Microsoft Doc,它位于

C:\Users\<UserName>\.wslconfig 

但我找不到该文件夹

测试解决方案

%UserProfile%\wslconfig.

图像

图片翻译文字:

Windows can't find 'C:/Users/David/wslconfig'. Check the spelling and try again

答案1

注意:我发现这个问题还有早期版本这里。我已针对该问题发布了新的答案,其中包含有关该wsl --import --vhd选项的信息,在我撰写此答案时该信息尚未提供。我保留此答案,因为它确实提出了一个略有不同的问题(我回答过),但大多数用户应该会看到之前问题的最新答案。


较早的答案:

几点说明:

根据 Microsoft Doc,它位于

C:\Users\<UserName>\.wslconfig

嗯,不,这不是 WSL 的发行版存储的地方。这只是WSL 配置文件。您找不到它,因为它默认不存在(也不需要)。如果您想要覆盖其中一个默认设置,则只需创建它。

从 Microsoft Store 安装的 WSL 发行版通常位于以下包特定目录中:

%userprofile%\AppData\Local\Packages\

您可以通过在 PowerShell 中运行以下命令来获取实际位置:

Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | 
    ForEach-Object {
        (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath 
    }

但话虽如此,您不应该直接访问该目录。

相反,使用内置的 WSL 功能来:

  • 备份现有发行版并将其恢复到新位置
  • 在新发行版中设置默认用户名
  • 取消注册旧的发行版

具体来说:

请不要直接复制粘贴下面的命令而不去理解它们的作用。请单独运行每个命令,这样您就可以处理可能发生的任何错误。

首先,退出现有的发行版(在您的情况下是 Debian)。

然后,在 PowerShell 中(以普通用户身份,不是行政):

wsl -l -v
# Confirm the existing distribution name
# Modify variables below as needed/desired
$WSL_ROOT="D:\WSL"
$WSL_IMAGE_PATH="${WSL_ROOT}\images"
$WSL_OLD_DISTRO_NAME="Debian"
$WSL_NEW_DISTRO_NAME="Debian_WSL2"
$WSL_INSTANCE_PATH="${WSL_ROOT}\instances\${WSL_NEW_DISTRO_NAME}"

mkdir $WSL_IMAGE_PATH
mkdir $WSL_INSTANCE_PATH

# Create a backup/export of the existing Debian in     `D:\WSL\images\Debian.backup.tar`
wsl --shutdown
wsl --export $WSL_OLD_DISTRO_NAME "${WSL_IMAGE_PATH}\${WSL_OLD_DISTRO_NAME}.backup.tar"

# Import that backup into the new location/distribution:
wsl --import $WSL_NEW_DISTRO_NAME $WSL_INSTANCE_PATH "${WSL_IMAGE_PATH}\${WSL_OLD_DISTRO_NAME}.backup.tar" --version 2

# Start the new distro:
wsl ~ -d $WSL_NEW_DISTRO_NAME    

接下来,您需要设置默认用户名,因为 WSL 不会“记住” --imported 发行版的用户名。在新的 Debian 发行版中:

sudo -e /etc/wsl.conf
# Yes, you are already root, but `sudo -e` is just a fairly safe way to invoke the default editor regardless of distribution

添加以下内容:

[user]
default=<your_normal_username>

保存并退出编辑器。

exit外壳/WSL。

回到同一个 PowerShell 会话(因此所有变量仍然完好无损):

wsl --terminate $WSL_NEW_DISTRO_NAME
wsl --set-default $WSL_NEW_DISTRO_NAME
wsl ~

您现在应该以普通用户身份在新的 Debian 位置运行。

确认一下,wsl.exe -l -v应该显示新发行版正在运行,而旧发行版没有运行。此外,从 PowerShell:

Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | 
    ForEach-Object { 
        (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath 
    }

... 将显示已安装的发行版及其位置。

确认一切正常后:

警告:这是一个破坏性的、不可恢复的操作

$WSL_OLD_DISTRO_NAME="Debian"
wsl --unregister $WSL_OLD_DISTRO_NAME

您也可以从商店卸载 Debian 应用程序,但我个人建议保留它。

相关内容