我想知道如何更改存储包含 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 不会“记住” --import
ed 发行版的用户名。在新的 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 应用程序,但我个人建议保留它。