Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否将WSL(Windows上的Bash)根文件系统移动到另一个硬盘驱动器?_Windows_Windows Subsystem For Linux - Fatal编程技术网

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

是否将WSL(Windows上的Bash)根文件系统移动到另一个硬盘驱动器?,windows,windows-subsystem-for-linux,Windows,Windows Subsystem For Linux,我刚刚将笔记本电脑中的Windows 10升级到Redstone 1。因此,我对Linux子系统(aka.WSL、LXSS或Windows上的Bash)进行了测试。基本上,一切正常,但存在一个问题,WSL的RootFS位于%LocalAppData%路径中(例如C:\Users\xyz\AppData\Local),这也是我的Windows操作系统所在的位置。它在我的笔记本电脑上消耗了大量的SSD硬盘空间,我希望我能把它移到外置硬盘上 还有一个问题。由于其他硬盘驱动器分区是作为DriveFS安装

我刚刚将笔记本电脑中的Windows 10升级到Redstone 1。因此,我对Linux子系统(aka.WSL、LXSS或Windows上的Bash)进行了测试。基本上,一切正常,但存在一个问题,WSL的RootFS位于
%LocalAppData%
路径中(例如
C:\Users\xyz\AppData\Local
),这也是我的Windows操作系统所在的位置。它在我的笔记本电脑上消耗了大量的SSD硬盘空间,我希望我能把它移到外置硬盘上

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

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

然后我四处搜索,得到了这个:似乎移动和制作WSL RootFS的硬链接只在Windows 10 Build 14388之前有效,在Windows 10 Build 14393 RTM中不起作用。唯一的方法是将整个
%LocalAppData%
移动到外部硬盘,但我不能这么做,因为我是一个笔记本电脑用户,我不能到处带外置硬盘

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

感谢和问候, Jackson

WSL(目前)不支持将发行版移动或安装到非系统驱动器。然而,这是我们正在为未来的Windows版本探索的一个场景

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

注意:虽然我们正在努力在未来的Windows版本中改进此方案,但请不要从Windows或Windows应用程序中潜入发行版文件夹:

查看

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

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


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

1。导出分发。使用
wsl.exe--Export

wsl.exe --export <DistributionName> <Tar-FileName>
2。将分发导入目标文件夹。然后,您可以将导出的分发导入另一个文件夹

wsl.exe --import <DistributionName> <Folder-To-Install> <Tar-FileName>
注意:您可以在以下位置检查用于移动使用这些命令的WSL发行版的脚本:


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

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

C:\> whoami
test\jaime

C:\> icacls D:\wsl /grant "jaime:(OI)(CI)(F)"
注:除上述权限外,我还激活了

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

我在Windows Home中安装了WSL2 Ubuntu20.04

来自@pixelarbeit的评论


wsl命令解决方案运行良好。我给他写了一个小剧本 自动化这些步骤:github.com/pxlrbt/move-wsl

我采取的步骤是:

  • 安装gitbash for windows以从中运行命令
  • 打开发行版,添加文件
  • /etc/wsl.conf

    [user]
    default=<yourAccount>
    
    [用户]
    违约=
    
  • 在CMD“wsl.exe--关机”中
  • 下一次我打开发行版时,我的用户是默认用户,所有这些看起来都像以前一样,太棒了

    谢谢@pixelarbeit

    这听起来像是@DanielA.White的一个问题,但这个问题也与工作(编译)环境有关。查看此线程了解此功能的进展:跟踪提问-其中有一些建议可能对您有用,但将发行版移动到非系统驱动器的功能尚未完全构建。这是迄今为止最好的选择,我认为我能够成功运行上述命令,但linux发行版仍然存在于%APPDATA%文件夹中,删除是否安全?在我的例子中,命令是lxrunoffline move-n Ubuntu-d E:\prog\WSL\ubuntuth WSL命令解决方案工作正常。我编写了一个小脚本来自动化这些步骤:word“move”中缺少的是删除原始WSL发行版。可以通过cmd:wsl——注销Ubuntu来完成删除
    C:\wsl> lxrunoffline get-dir -n Ubuntu-18.04
    d:\wsl\installed\Ubuntu-18.04
    
    C:\wsl> lxrunoffline run -n Ubuntu-18.04 -w
    user@test:~$ exit
    logout
    
    C:\wsl> wsl
    user@test:/mnt/c/wsl$ exit
    logout
    
    [user]
    default=<yourAccount>