将WSL(Windows上的Bash)根文件系统移至另一个硬盘驱动器?

Move WSL (Bash on Windows) root filesystem to another hard drive?

我刚刚将笔记本电脑中的Windows 10升级到Redstone1。因此,我对Linux子系统(又名Windows上的WSL,LXSS或Bash)进行了测试。基本上,一切都很好,但是存在一个问题,即WSL的RootFS位于%LocalAppData%路径(例如C:\\Users\\xyz\\AppData\\Local)中,这也是Windows OS所在的位置。它占用了笔记本电脑中的大量SSD硬盘空间,我希望可以将其移动到外部硬盘中。

还有另一个问题。由于其他硬盘驱动器分区是作为DriveFS挂载的,因此它不支持某些Linux文件系统功能,例如chmod,并且我的某些Linux项目构建脚本仅在VoIFS中起作用,而VoIFS仅位于//home中。铅>

因此,我尝试将整个WSL RootFS移至另一个硬盘驱动器。首先,我尝试为C:\\Users\\xyz\\AppData\\Local\\lxss创建一个NTFS交汇点(硬链接)。我已经完全卸载了WSL,并将RootFS的mklink运行到另一个硬盘驱动器,当我再次重新安装WSL时,它无法创建新用户,并且报告错误,代码为0x80070003。

然后我四处搜索,然后得到了:移动Linux文件系统-问题#449。似乎移动和建立WSL RootFS硬链接仅在Windows 10 Build 14388之前有效,而在Windows 10 Build 14393 RTM中则无效。唯一的方法是将整个%LocalAppData%移至外部硬盘驱动器,但是由于我是笔记本电脑用户,而且无法随处携带外部硬盘驱动器,因此我无法做到这一点!

所以我想问,还有其他方法可以将WSL移出系统分区吗?如果不能这样做,是否可以在其他地方创建一个额外的VoIFS工作目录并编译我的东西?

感谢和问候,
杰克逊


如果您使用的是Windows 10版本1903(2019年4月更新)或更高版本,则可以尝试使用exportimport选项的WSL命令行工具。如果您使用的是Windows 10的较早版本,则可以使用lxRunOffline将发行版移动到另一个驱动器。

使用WSL命令行工具

在Windows 10版本1903(2019年4月更新)或更高版本中,可以使用wsl.exe命令行工具。

1。导出分发。创建一个.tar文件,并使用wsl.exe --export

进行分发

1
wsl.exe --export <DistributionName> <Tar-FileName>

例如,要导出Ubuntu发行版,可以使用

1
C:\\> wsl.exe --export Ubuntu c:\\data\\ubuntu.tar

2。将分发导入到目标文件夹。然后,您可以将导出的发行版导入另一个文件夹

1
wsl.exe --import <DistributionName> <Folder-To-Install> <Tar-FileName>

例如,要将导出的Ubuntu导入到新的UbuntuCustom发行版中,可以使用

1
C:\\> wsl.exe --import UbuntuCustom d:\\wsl\\UbuntuCustom c:\\data\\ubuntu.tar

注意:您可以在https://github.com/pxlrbt/move-wsl

中查看使用这些命令移动WSL发行版的脚本。

使用LxRunOffline

在任何Windows 10版本中,都可以使用lxRunOffline将发行版移动到另一个驱动器。

1。设置对目标文件夹的权限。首先,我认为您必须对将分发文件移动到的文件夹设置一些权限。您可以使用icacls <dir> /grant"<user>:(OI)(CI)(F)"设置适当的权限。

1
2
3
4
C:\\> whoami
test\\jaime

C:\\> icacls D:\\wsl /grant"jaime:(OI)(CI)(F)"

注意:除了上述权限,我还激活了Windows中的长路径名。

2。移动发行版。使用lxrunoffline move

1
C:\\wsl> lxrunoffline move -n Ubuntu-18.04 -d d:\\wsl\\installed\\Ubuntu-18.04

您可以使用

检查安装文件夹

1
2
C:\\wsl> lxrunoffline get-dir -n Ubuntu-18.04
d:\\wsl\\installed\\Ubuntu-18.04

3。运行发行版。移动发行版后,可以使用wsl或相同的lxrunoffline

运行发行版

1
2
3
4
5
6
7
C:\\wsl> lxrunoffline run -n Ubuntu-18.04 -w
user@test:~$ exit
logout

C:\\wsl> wsl
user@test:/mnt/c/wsl$ exit
logout


WSL(当前)不支持将发行版移动或安装到非系统驱动器。但是,这是我们在将来的Windows版本中探索的方案。

请注意,从Fall Creators Update(FCU)开始,发行版现已通过Windows应用商店安装并下载并扩展到其他文件夹(即不在%localappdata%\\\\\\\\ lxss下)。

注意:当我们正在努力在将来的Windows版本中改进此情况时,请不要从Windows或Windows应用程序的残留文件夹中摸索出来:https://blogs.msdn.microsoft.com/commandline/2016 / 11/17 /请勿更改使用Windows应用程序和工具的Linux文件/


看看https://github.com/DDoSolitary/LxRunOffline

1
2
scoop install lxrunoffline
choco install lxrunoffline
  • 安装时不需要Internet访问。
  • 将任何Linux发行版安装到磁盘上的任何位置。
  • 将现有安装移动到其他位置。
  • 复制现有安装。 (创建备份。)
  • 注册现有的安装目录。 (用于便携式用途。)