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

时间:2016-08-05 01:34:13

标签: windows windows-subsystem-for-linux

我刚刚将笔记本电脑中的Windows 10升级到Redstone 1.所以我测试了Linux子系统(也就是Windows上的WSL,LXSS或Bash)。基本上,一切都很好,但是有一个问题是WSL的RootFS位于%LocalAppData%路径(例如C:\Users\xyz\AppData\Local),这也是我的Windows操作系统所在的位置。它在我的笔记本电脑中消耗了大量的SSD硬盘空间,我希望我可以将它移动到我的外置硬盘。

还有另一个问题。由于其他硬盘驱动器分区作为DriveFS安装,它不支持某些Linux文件系统功能,如chmod,我的一些Linux项目构建脚本仅适用于VoIFS,仅位于/和{ {1}}。

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

然后我四处搜寻,得到了这个:moving Linux filesystem - issue #449似乎移动和制作WSL RootFS的硬链接仅适用于Windows 10 Build 14388之前,它在Windows 10 Build 14393 RTM中不起作用。唯一的方法是移动整个mklink到外部硬盘驱动器,但我不能这样做,因为我是笔记本电脑的用户而我无法随处携带外置硬盘!

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

谢谢和问候, 杰克逊

4 个答案:

答案 0 :(得分:11)

您可以使用lxRunOffline将发行版本移动到另一个驱动器。

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

C:\> whoami
test\jaime

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

注意:除了上述权限,我还激活了long path names in Windows

2。移动分布。使用lxrunoffline move

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

您可以使用以下方式检查安装文件夹

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

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

运行分发
C:\wsl> lxrunoffline run -n Ubuntu-18.04 -w
user@test:~$ exit
logout

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

答案 1 :(得分:2)

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

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

NOte:虽然我们正在努力在未来的Windows版本中改进此方案,但不要从Windows或Windows应用程序中插入发行文件夹仍然是:https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我在 Windows Home 中有 WSL2 Ubuntu20.04

来自@pixelarbeit 的评论

<块引用>

wsl 命令解决方案工作正常。我写了一个小脚本 自动化这些步骤:github.com/pxlrbt/move-wsl

我所做的步骤:

  1. 为 windows 安装 gitbash 以运行来自 github 的命令
  2. 打开发行版,添加文件

/etc/wsl.conf

[user]
default=<yourAccount>
  1. 在 CMD 中“wsl.exe --shutdown”
  2. 下次我打开发行版时,我的用户是默认用户,一切看起来都像以前一样,太棒了!

谢谢@pixelarbeit!