99

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

还有一个问题。由于其他硬盘分区挂载为DriveFS,它不支持一些Linux文件系统功能,如chmod.,而我的一些Linux项目构建脚本只能在VoIFS中工作,它只位于//home.

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

然后我四处搜索,我得到了这个:移动 Linux 文件系统 - 问题 #449似乎为 WSL RootFS 移动和制作硬链接仅适用于 Windows 10 Build 14388 之前,它不适用于 Windows 10 Build 14393 RTM。唯一的方法是将整个移动%LocalAppData%到外部硬盘驱动器,但我不能这样做,因为我是笔记本电脑用户,我不能随处携带外部硬盘驱动器!

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

谢谢和问候,杰克逊

4

4 回答 4

183

如果您使用的是 Windows 10 版本 1903(2019 年 4 月更新)或更高版本,您可以尝试带有选项exportimportWSL 命令行工具。如果您使用的是较旧的 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)"

注意:除了上述权限外,我还激活了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
于 2018-08-09T13:02:06.947 回答
9

WSL does not (currently) support moving or installing distro to non-system drives. However, this is a scenario we are exploring for future Windows releases.

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).

NOte: While we're working to improve this scenario in future Windows releases, please DO NOT spelunk into the distro folders from Windows or Windows apps remains: https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/

于 2017-10-24T20:31:15.747 回答
8

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

scoop install lxrunoffline
choco install lxrunoffline
  • 安装时无需访问 Internet。
  • 将任何 Linux 发行版安装到磁盘上的任何位置。
  • 将现有装置移至其他位置。
  • 复制现有安装。(创建备份。)
  • 注册现有的安装目录。(用于便携式使用。)
于 2018-07-13T20:57:19.813 回答
3

我在 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!

更新:我使用来自 Windows 商店的“Windows 终端”程序,并且以某种方式设置 /etc/wsl.conf 并不总是有效。但我发现,尝试进入设置并设置为起始目录
\\wsl$\Ubuntu-20.04\home\<your-username>。对于高山:
\\wsl$\Alpine\home\<your-username>

于 2021-05-11T00:22:13.140 回答