Fork me on GitHub

Windows下Linux子系统迁移到非系统盘

@author:zhanjzh

Windows下的Linux子系统对于工作在Linux系统下的人而言是十分方便的,但是用久了就会发现子系统对C盘的占用空间越来越大,原因在于Linux默认安装在用户目录下的 AppData\Local\Packages 下。

本文介绍在Windows下对Linux子系统迁移的方法。

工具

mklink : 本质上是一个创建链接的工具,这里使用mklink 欺骗系统,使系统误以为还是安装在了C盘

首先,我们需要找到子系统安装的文件系统在哪个位置,根据以往的经验,系统位置在:

C:\Users\xxxx\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows

注意 AppData 文件夹是隐藏文件夹,你需要打开查看隐藏文件的选项。

但实际上这个根据你自己安装的子系统需要自己另外确定,我上次安装的文件夹是上面哪个,第二次安装又变成了下面这个:

C:\Users\xxxx\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc

定位Linux子系统的文件系统位置

简单直接的方法:

  • 首先安装一遍Linux子系统,在

C:\Users\xxxx\AppData\Local\Packages\

下查看带有类似 CanonicalGroupLimited.UbuntuonWindows 字眼的新文件夹,记下它的名字。

开始安装

  • 卸载Linux子系统。

卸载的原因在于Linux子系统下的文件系统的权限更改十分复杂,这里面的一些文件不属于Windows下的管理员用户所有,也不属于你的用户,它就是Linux下用户所有的,使用一般的修改权限文件方法很容易出问题。因此还是推荐先备份后再卸载。

  • 创造软链接

使用管理员打开cmd, 输入下面的命令:

1
mklink /j C:\Users\XXXX\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc  H:\Linux-share\WSL\

后面那个 H:\Linux-share\WSL\ 是非系统盘的位置。

  • 创建成功后再打开应用商店,安装Linux子系统。

问题

  • 安装成功后出现 0x800703fa

WslRegisterDistribution failed with error: 0x800703fa

网上查过方法:在运行窗口中执行“services.msc”指令,在本地服务中重启 LxssManager 服务即可。

经确认,行之有效。

  • 如果出现了什么文件夹权限的问题(我没有出现过),可以用下面的命令:

icacls Linux-share\WSL\ /grant “你的用户名:(OI)(CI)(F)”

我没有遇见过文件权限问题,但是我曾经执行过上面这条语句,如果遇见了,可以试一下。

总结

网上查找了许多方法,试过了不少。有个博主使用的是将AppData下的Local目录全部指向其他地方的方法,如果这个方法有效的话想必能省很多C盘空间,可惜的是,不行。文件在复制迁移的过程会遇见权限问题,即便是另外使用管理员用户也不行,除非使用 PE 盘,但是那样太过于麻烦。 这篇文章介绍的方法其实是一种折中的方式,迁移文件不涉及到那些存在权限问题的文件。

同样的道理,使用 mklink 工具可以将其他大文件迁移到非系统盘后再创造软链接,用于减小C盘负担是很不错的。