将 WSL(Windows 上的 Bash)根文件系统移动到另一个硬盘驱动器?
Move WSL (Bash on Windows) root filesystem to another hard drive?
我刚刚将笔记本电脑中的 Windows 10 升级到 Redstone 1。所以我测试了 Linux 子系统(又名 WSL、LXSS 或 Bash Windows)。基本上一切正常,但是有一个问题是WSL的RootFS位于%LocalAppData%
路径(例如C:\Users\xyz\AppData\Local
),这也是我的Windows[=50]所在的地方=]位于。它在我的笔记本电脑中消耗了大量 SSD 硬盘驱动器 space,我希望我可以将它移动到我的外部硬盘驱动器上。
还有一个问题。由于其他硬盘驱动器分区安装为 DriveFS,它不支持某些 Linux 文件系统功能,如 chmod
,并且我的一些 Linux 项目构建脚本仅适用于 VoIFS,它仅位于在 /
和 /home
.
所以我尝试将整个WSL RootFS移动到另一个硬盘上。首先,我尝试为 C:\Users\xyz\AppData\Local\lxss
创建一个 NTFS 连接(硬 link)。我已经完全卸载了 WSL,运行 mklink
将 RootFS 卸载到另一个硬盘,当我再次重新安装 WSL 时, 它无法创建新用户,而且它报告错误代码 0x80070003。
然后我四处寻找,得到了这个:moving Linux filesystem - issue #449。 WSL RootFS 的移动和制作link 似乎只在Windows 10 Build 14388 之前有效,在Windows 10 Build 14393 RTM 中无效。 唯一的方法是将整个 %LocalAppData%
移动到外部硬盘驱动器,但我不能这样做,因为我是笔记本电脑用户,我不能随身携带外部硬盘驱动器!
所以我想问一下,有没有其他方法可以将 WSL 移出我的系统分区?如果我做不到,我可以在其他地方创建一个额外的 VoIFS 工作目录并编译我的东西吗?
感谢和问候,
杰克逊
WSL(目前)不支持将发行版移动或安装到非系统驱动器。但是,这是我们正在为未来 Windows 版本探索的场景。
请注意,从 Fall Creators Update (FCU) 开始,发行版现在通过 Windows 商店安装,并下载并扩展到不同的文件夹(即不在 %localappdata%\lxss 下)。
注意:虽然我们正在努力在未来的 Windows 版本中改进这种情况,但请不要 从 Windows 或 spelunk 进入发行版文件夹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 发行版安装到磁盘上的任何位置。
- 将现有安装移动到其他位置。
- 正在复制现有安装。 (创建备份。)
- 注册现有的安装目录。 (对于便携式使用。)
如果您使用的是 Windows10 版本 1903(2019 年 4 月更新)或更高版本,您可以尝试使用 the export
and import
options. If you are using an older Windows 10 version, you can move the distribution to another drive using lxRunOffline.
的 WSL 命令行工具
使用 WSL 命令行工具
在Windows10版本1903(2019年4月更新)或更新版本中,您可以使用wsl.exe
命令行工具。
1.导出分布。 使用 wsl.exe --export
创建一个包含要移动的分布的 .tar
文件
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 发行版的脚本
使用 Lx运行离线
在任何 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 主页
中安装了 WSL2 Ubuntu20.04
来自@pixelarbeit 的评论
The wsl command solution works fine. I wrote a little script to
automate these steps: github.com/pxlrbt/move-wsl
我做的步骤:
- 为 windows 安装 gitbash 到 运行 来自 github
的命令
- 打开发行版,添加文件
/etc/wsl.conf
[user]
default=<yourAccount>
- 在 CMD 中“wsl.exe --shutdown”
- 下次我打开发行版时,我的用户是默认用户,一切看起来都像以前一样,太棒了!
谢谢@pixelarbeit!
更新: 我使用 windows 商店的“windows 终端”程序,但设置 /etc/wsl.conf 并不总是有效。但我发现,尝试转到设置并设置为起始目录
\wsl$\Ubuntu-20.04\home\<your-username>
。对于高山:
\wsl$\Alpine\home\<your-username>
我刚刚将笔记本电脑中的 Windows 10 升级到 Redstone 1。所以我测试了 Linux 子系统(又名 WSL、LXSS 或 Bash Windows)。基本上一切正常,但是有一个问题是WSL的RootFS位于%LocalAppData%
路径(例如C:\Users\xyz\AppData\Local
),这也是我的Windows[=50]所在的地方=]位于。它在我的笔记本电脑中消耗了大量 SSD 硬盘驱动器 space,我希望我可以将它移动到我的外部硬盘驱动器上。
还有一个问题。由于其他硬盘驱动器分区安装为 DriveFS,它不支持某些 Linux 文件系统功能,如 chmod
,并且我的一些 Linux 项目构建脚本仅适用于 VoIFS,它仅位于在 /
和 /home
.
所以我尝试将整个WSL RootFS移动到另一个硬盘上。首先,我尝试为 C:\Users\xyz\AppData\Local\lxss
创建一个 NTFS 连接(硬 link)。我已经完全卸载了 WSL,运行 mklink
将 RootFS 卸载到另一个硬盘,当我再次重新安装 WSL 时, 它无法创建新用户,而且它报告错误代码 0x80070003。
然后我四处寻找,得到了这个:moving Linux filesystem - issue #449。 WSL RootFS 的移动和制作link 似乎只在Windows 10 Build 14388 之前有效,在Windows 10 Build 14393 RTM 中无效。 唯一的方法是将整个 %LocalAppData%
移动到外部硬盘驱动器,但我不能这样做,因为我是笔记本电脑用户,我不能随身携带外部硬盘驱动器!
所以我想问一下,有没有其他方法可以将 WSL 移出我的系统分区?如果我做不到,我可以在其他地方创建一个额外的 VoIFS 工作目录并编译我的东西吗?
感谢和问候, 杰克逊
WSL(目前)不支持将发行版移动或安装到非系统驱动器。但是,这是我们正在为未来 Windows 版本探索的场景。
请注意,从 Fall Creators Update (FCU) 开始,发行版现在通过 Windows 商店安装,并下载并扩展到不同的文件夹(即不在 %localappdata%\lxss 下)。
注意:虽然我们正在努力在未来的 Windows 版本中改进这种情况,但请不要 从 Windows 或 spelunk 进入发行版文件夹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 发行版安装到磁盘上的任何位置。
- 将现有安装移动到其他位置。
- 正在复制现有安装。 (创建备份。)
- 注册现有的安装目录。 (对于便携式使用。)
如果您使用的是 Windows10 版本 1903(2019 年 4 月更新)或更高版本,您可以尝试使用 the export
and import
options. 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
命令行工具。
1.导出分布。 使用 wsl.exe --export
.tar
文件
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 发行版的脚本使用 Lx运行离线
在任何 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 主页
中安装了 WSL2 Ubuntu20.04来自@pixelarbeit 的评论
The wsl command solution works fine. I wrote a little script to automate these steps: github.com/pxlrbt/move-wsl
我做的步骤:
- 为 windows 安装 gitbash 到 运行 来自 github 的命令
- 打开发行版,添加文件
/etc/wsl.conf
[user]
default=<yourAccount>
- 在 CMD 中“wsl.exe --shutdown”
- 下次我打开发行版时,我的用户是默认用户,一切看起来都像以前一样,太棒了!
谢谢@pixelarbeit!
更新: 我使用 windows 商店的“windows 终端”程序,但设置 /etc/wsl.conf 并不总是有效。但我发现,尝试转到设置并设置为起始目录
\wsl$\Ubuntu-20.04\home\<your-username>
。对于高山:
\wsl$\Alpine\home\<your-username>