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

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

There is an another problem. Since the other hard drive partitions are mounted as DriveFS, it does not support some Linux filesystem features like chmod, and some of my Linux project build scripts only works in VoIFS, which only located in / and /home.

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

Then I searched around, and I got this: 移动 Linux 文件系统-问题 # 449. 似乎 WSL RootFS 的移动和硬链接只能在 Windows10 Build 14388之前工作,它不能在 Windows10 Build 14393 RTM 中工作。 The only way is moving the whole %LocalAppData% to the external hard drive, but I cannot do that since I'm a laptop user and I can't bring an external hard drive everywhere!

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

谢谢,还有问候, 杰克逊

106686 次浏览

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

Note that as of Fall Creators Update (FCU), distros are now installed via Windows store and are downloaded to, and expanded to different folders (i.e. not under %localappdata%\lxss).

注意: 当我们在未来的 Windows 版本中努力改进这个场景时,请 DO NOT深入到 Windows 或 Windows 应用程序的发行版文件夹中: https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/

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

scoop install lxrunoffline
choco install lxrunoffline
  • 安装时不需要上网。
  • 将所有 Linux 发行版安装到磁盘上的任何位置。
  • Moving existing installations to other locations.
  • 复制现有安装(创建备份)
  • 注册现有的安装目录

If you are using Windows 10 version 1903 (April 2019 Update) or later, you can try the WSL command line tool with ABC0和 import选项. If you are using an older Windows 10 version, you can move the distribution to another drive using LxRunOffline.


使用 WSL 命令行工具

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

导出发行版。 创建一个 .tar文件,使用 wsl.exe --export移动发行版

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

For instance, to export an Ubuntu distribution, you can use

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

注意: 您可以在 < a href = “ https://github.com/pxlrbt/move-WSL”rel = “ norefrer”> https://github.com/pxlrbt/move-WSL 检查移动使用这些命令的 WSL 发行版的脚本


使用 LxRunOffline

在任何 Windows10版本中,都可以使用 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

You may check the installation folder using

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

Comment from @pixelarbeit

Wsl 命令解决方案工作正常 自动化这些步骤: github.com/pxlrbt/move-wsl

我所做的步骤:

  1. 为 windows 安装 gitbash 以便从 Github运行命令
  2. 打开发行版,添加文件

/etc/wsl.conf

[user]
default=<yourAccount>
  1. 在 CMD“ wsl.exe ——关闭”
  2. next time I open the distro, my user is the default one and all looks like it was before, great!

谢谢!

更新: 我使用来自 Windows store 的“ Windows 终端”程序,但是不知怎么的,设置/etc/wsl.conf 并不总是起作用。但我发现,尝试去设置和设置为启动目录
阿尔卑斯山:
\\wsl$\Alpine\home\<your-username>

可以简单地将已安装的发行版移动到其他位置

stop wsl first: wsl --shutdown

存储在注册表 Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{some guid}\BasePath中的发行版路径 enter image description here 将发行版移动到另一个位置并更新注册表中的路径。