刚刚在 Windows 10 中为 Ubunutu Linux 安装了 WSL。
我想知道如何将数据和我们在 WSL 中下载和使用的所有软件存储到另一个目录(例如 D: 驱动器),因为它会很快占用 Windows 上的 C: 驱动器
我应该移动整个文件夹吗?还是我必须在路径中进行任何其他配置
目前,我的 WSL 数据存储在 AppData 文件夹中
C:\Users\User\
答案1
不,您不能只移动 WSL 的安装目录。WSL 使用注册表项来枚举已安装的发行版/实例的列表。
虽然理论上您可以移动目录,然后更新注册表项,但由于以下几个原因,仍然不建议这样做:
乱改注册表从来都不是“推荐的”(但有时是必要的)。
您从商店安装的发行版有自己的预定义名称和位置。更改这些将使“启动器”(例如
ubuntu.exe
)混乱。重新运行ubuntu.exe
(等等)可能会在检测到已移动时尝试安装第二个副本。
虽然没有办法“移动”现有的发行版,但有一些“多步骤”的解决方法,基本上可以归结为:
- 复制将现有分布迁移至新位置并命名。
- 删除(取消注册)旧的发行版。
好的,这就是“移动”的定义,是的,但是稍微复杂一些。
对于以下任何选项:
首先,创建您希望新发行版所在的位置。我将
D:\WSL\instances\Ubuntu_20.04_WSL2
在这里调用它,但请在下面的命令中根据需要替换该目录。我们还将新发行版/实例命名为
Ubuntu_20.04_WSL2
,但同样,您可以根据需要进行修改。我选择该名称是因为它“看起来”不像 Store 安装程序将创建的预定义名称之一。这样,我们就可以避免 Store 版本(我们最终将删除)与您想要使用的“移动”版本之间的混淆。我还假设您现有的发行版名为
Ubuntu
。
选项 1:WSL 预览方法
目前最简单的方法是如果您有:
- Windows 11
- 从 Microsoft Store 安装的“Windows Subsystem for Linux Preview”。
- WSL2 实例(您已在问题中标记)。对于其他实例,请注意此方法不适用于 WSL1 实例。
WSL 预览版提供了一项新功能,允许您使用该选项wsl --import
将现有 VHD 文件(WSL2 发行版的虚拟磁盘)直接连接到新实例/位置--vhd
。
退出任何正在运行的 WSL 发行版
从 PowerShell:
wsl -l -v # Confirm name of existing instance # You seem to already know this part, but for others # Find the location of the the virtual disk: Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object { (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath } wsl --shutdown wsl --import Ubuntu_20.04_WSL2 D:\WSL\instances\Ubuntu_20.04_WSL2 <package_directory_from_above>\ext4.vhdx --vhd wsl ~ -d Ubuntu_20.04_WSL2
现在,您将进入位于 D 盘上的新“克隆”实例。但是,您会注意到您是 root 用户,而不是“默认”用户。请按照这个答案创建一个
/etc/wsl.conf
文件来设置默认用户。一旦您确认新的发行版按预期工作,您就可以使用以下命令删除原始发行版:
wsl.exe --unregister Ubuntu # or whatever the original distribution was named
选项 2:WSL 的早期版本
我刚刚意识到我已经在另一个中提供了这个(和上面的)方法的大部分内容在 Ask Ubuntu 上回答最近。步骤与上面的类似,但总结一下:
wsl --export
现有的分布wsl --import
新的那一个- 设置用户名(如上)
wsl --unregister
准备好后旧的(如上所述)- 如果需要,删除
--export
ed文件。tar
请参阅询问 Ubuntu 的答案以了解完整详情。