【问题标题】:Move WSL (Bash on Windows) root filesystem to another hard drive?将 WSL(Windows 上的 Bash)根文件系统移动到另一个硬盘驱动器?
【发布时间】:2016-12-11 07:29:53
【问题描述】:

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

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

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

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

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

感谢和问候, 杰克逊

【问题讨论】:

标签: windows windows-subsystem-for-linux


【解决方案1】:

我在 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\&lt;your-username&gt;。高山:
\\wsl$\Alpine\home\&lt;your-username&gt;

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果您使用的是 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 &lt;dir&gt; /grant "&lt;user&gt;:(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
      

      【讨论】:

      • 这是迄今为止我认为最好的选择
      • 我能够成功运行上述命令,但是 linux 发行版仍然存在于 %APPDATA% 文件夹中,可以安全删除吗?
      • 在我的例子中,命令是 lxrunoffline move -n Ubuntu -d E:\prog\WSL\Ubuntu
      • wsl 命令解决方案工作正常。我写了一个小脚本来自动化这些步骤:github.com/pxlrbt/move-wsl
      • “move”这个词中缺少的是删除原始的 WSL 分布。删除可以通过cmd来完成:wsl --unregister Ubuntu
      【解决方案4】:

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

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

      注意:虽然我们正在努力在未来的 Windows 版本中改进这种情况,但请请勿从 Windows 或 Windows 应用程序中潜入发行版文件夹:https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/

      【讨论】:

      • WSL GH Issue #449 跟踪询问 - 那里有一些可能对您有用的建议,但将发行版移动到非系统驱动器的功能尚未完全构建。
      猜你喜欢
      • 2012-12-11
      • 2016-11-15
      • 1970-01-01
      • 2021-11-23
      • 2011-04-29
      • 1970-01-01
      • 2014-04-12
      • 2021-12-13
      • 2014-02-02
      相关资源
      最近更新 更多