当前位置: 首页 > 知识库问答 >
问题:

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

严阳成
2023-03-14

我刚刚将笔记本电脑中的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,它只位于//home

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

然后我四处搜索,得到了这个消息:移动Linux文件系统-问题#449。似乎移动和制作WSL RootFS的硬链接只在Windows10Build14388之前起作用,而在Windows10Build14393 RTM中不起作用。唯一的方法是将整个%LocalAppData%移动到外部硬盘,但我不能这样做,因为我是笔记本电脑用户,不能到处带外部硬盘!

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

谢谢和问候,杰克逊

共有3个答案

姬俊驰
2023-03-14

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

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

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

请注意,从秋季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/

相化
2023-03-14

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

在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

注意:您可以随时检查用于移动使用这些命令的WSL发行版的脚本https://github.com/pxlrbt/move-wsl

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

1.设置对目标文件夹的权限。首先,我认为您必须对要移动分发的文件夹设置一些权限。您可以使用icacls

C:\> whoami
test\jaime

C:\> icacls D:\wsl /grant "jaime:(OI)(CI)(F)"

注意:除了上述权限外,我还激活了Windows中的长路径名。

2.移动配电盘。使用lxrunoffline移动

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

 类似资料:
  • 这个问题似乎不是关于特定的编程问题,软件算法或主要由程序员使用的软件工具。如果您认为该问题将与其他 Stack Exchange 站点的主题相关,则可以发表评论以解释问题可能在哪里可以得到解答。 我刚刚将笔记本电脑中的Windows 10升级到红石1。所以我对Linux子系统进行了测试(又名。WSL、LXSS 或 Windows 上的抨击)。基本上,一切都很好,但是存在一个问题,即WSL的根FS位

  • 我在windows上下载了git,还有一些其他东西,包括GitBash。 虽然我不知道为什么bash终端被包含在“git”中,但它不仅支持git的功能,还支持其他功能,比如mkdir、cp、mv,就像一个真正的linux bash终端一样。 最近我知道了WSL(WindowsLinux子系统),它使bash终端在windows中可用。 git bash在功能上是否不如WSL? 它是否包含一些WSL

  • 我需要过去7天的存储日志来移动一个新文件夹。但是,我不能移动它们,并得到了这个错误。 重命名(/var/www/html/eMarketing/storage/logs/old-log-2020-02-27,/var/www/html/eMarketing/storage/logs/laravel-2020-02-27.log):不是目录 我的密码在这里

  • 问题内容: 情况: 我正在做一个自动化,我必须从一组文件中仅下载CSV文件。现在我只想将CSV文件从一个文件夹移动到另一个文件夹。 题: 您能为我提供代码,以便在文件移动后立即从源文件夹中删除文件吗? 到目前为止,这是我的代码: 编辑:但是我仍然面临一个问题。它会立即下载所有文件,然后删除。但是我的要求是这样的- 它应该下载第一个文件->将下载的文件移到另一个文件夹中->从下载文件夹中删除第一个下

  • 我得到以下错误: 线程“main”java.lang.IllegalArgumentException:错误的fs:hdfs:/user/o/datasets/data.txt,应为:file:/// 也是如此,因为它们用于在文件系统之间传输文件,而不是在文件系统内传输文件。我还尝试了,但根本没有任何作用(没有错误或任何东西)。

  • 我正在尝试创建一个PowerShell脚本,当我的电脑打开时,我可以每天早上运行该脚本,以移动我最近下载的所有类型。x从文件夹y到目标z。 当我运行该代码时,我得到这个错误: