我刚刚将笔记本电脑中的Windows 10升级到Redstone1。因此,我对Linux子系统(即Windows上的WSL,LXSS或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 Junction(硬链接(hard link))。我已经完全卸载了WSL,并将RootFS的mklink
运行到另一个硬盘驱动器上,当我再次重新安装WSL 时,它无法创建新用户,并且报告错误,代码为0x80070003。
然后我到处搜索,得到了:moving Linux filesystem - issue #449。 似乎移动和建立WSL RootFS的硬链接(hard link)仅在Windows 10 Build 14388之前有效,而在Windows 10 Build 14393 RTM中则无效。 唯一的方法是将整个%LocalAppData%
移动到外部硬盘驱动器,但是由于我是笔记本电脑用户,而且无法随处携带外部硬盘驱动器,所以我不能这样做!
因此,我想问一下,是否还有其他方法可以将WSL移出系统分区?如果不能这样做,是否可以在其他地方创建额外的VoIFS工作目录并编译我的东西?
谢谢并恭祝安康,
jackson
最佳答案
如果您使用的是Windows 10版本1903(2019年4月更新)或更高版本,则可以尝试使用the export
and import
options的WSL命令行工具。如果您使用的是Windows 10较旧的版本,则可以使用lxRunOffline将发行版移动到另一个驱动器。
使用WSL命令行工具
在Windows 10版本1903(2019年4月更新)或更高版本中,可以使用wsl.exe
命令行工具。
1.导出分发。 创建一个.tar
文件,并使用wsl.exe --export
进行分发
wsl.exe --export <DistributionName> <Tar-FileName>
例如,要导出
Ubuntu
分布,可以使用C:\> wsl.exe --export Ubuntu c:\data\ubuntu.tar
2.将发行版本导入目标文件夹。 然后,您可以将导出的发行版导入另一个文件夹
wsl.exe --import <DistributionName> <Folder-To-Install> <Tar-FileName>
例如,要将导出的
Ubuntu
导入新的UbuntuCustom
发行版,可以使用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)"
设置适当的权限。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
关于windows - 将WSL(Windows上的Bash)根文件系统移至另一个硬盘驱动器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38779801/