将 WSL 由 Windows C 盘迁移至其他非系统盘

更新日期: 2023-07-21 阅读次数: 1212 字数: 717 分类: Windows

起因

WSL 默认只能安装在 Windows C 盘,而且 WSL 占用的空间只会增加不会减少,加之家里的 Dell 台式机 C 盘只有 105G,空间随时处于消耗殆尽的状态。

而最近正好在做 Rasa 语言模型训练,模型占用空间巨大,我一直没敢在这个台式机上搭建开发环境。

可是,我的笔记本虽然空间足够,AMD CPU 却是个短板,每次训练时间比台式机能慢个四五倍,且发热严重,在大夏天非常燥。加之 Python 的不环保特性,开几个服务 CPU 风扇就嗷嗷叫。开发效率极低,且影响心情。

不得已只能把开发环境挪到台式机上。

入手一块 SSD

今年 SSD 价格真是白菜价,于是在京东上下单了一个京东京造的 480G SATA3 SSD,才 120 元。唯一的不足是没有送螺丝,我也没固定,直接放在光驱那个架子上了。

本来第一计划是用这块新 SSD,替换掉现有的 C 盘,但是担心迁移出问题,而我又懒得折腾,不想重装系统。加之我同事都说 SATA3 SSD 只能算是玩具,速度不行,对我打击很大。。。

在确认了可以将 WSL 迁移到非系统盘之后,干脆继续使用原有的小空间 M.2 PCIe4 SSD 作为 C 盘,只需要将 WSL 迁移至新 SSD。这样就不再有 C 盘空间焦虑了。

WSL 迁移工具 LxRunOffline

参考这里的教程:

https://learnku.com/articles/46234

到 github 上下载工具:

https://github.com/DDoSolitary/LxRunOffline

我没有执行授权操作那步,直接进行迁移了.

首先需要关闭 WSL:

> .\LxRunOffline move -n Ubuntu-18.04 -d E:\apps\wsl\Ubuntu-18.04
[ERROR] The distro "Ubuntu-18.04" has running processes and can't be operated. "wsl -t <name>" or "wsl --shutdown" might help.

> wsl --shutdown

但是执行报错:

> .\LxRunOffline move -n Ubuntu-18.04 -d E:\apps\wsl\Ubuntu-18.04
[ERROR] Couldn't set the case sensitive attribute of the directory "\\?\C:\Users\壹一\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\".
Reason: Indicates that the directory trying to be deleted is not empty.

参考 github issue :

https://github.com/DDoSolitary/LxRunOffline/issues/159

去里面下载最新的 bug fix 包,真是折腾,然后再次执行就能成功了。

耗时

我这大概 20G 的 WSL 迁移了半个小时。

迁移后的 C 盘空间

磁盘空间

这下我 Dell 台式机又能再战 10 年了。。。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          448G   23G  425G   6% /
none            448G   23G  425G   6% /dev
none            448G   23G  425G   6% /run
none            448G   23G  425G   6% /run/lock
none            448G   23G  425G   6% /run/shm
none            448G   23G  425G   6% /run/user
tmpfs           448G   23G  425G   6% /sys/fs/cgroup
C:\             106G   54G   52G  52% /mnt/c
D:\             932G  278G  654G  30% /mnt/d
E:\             448G   23G  425G   6% /mnt/e

测试了一下基本命令,及文本写入,都没有问题。

错误信息

忽略即可:

> .\LxRunOffline.exe list
[ERROR] Couldn't get the value "DistributionName" of the registry key "Software\Microsoft\Windows\CurrentVersion\Lxss\TryStoreWSL".
Reason: 系统找不到指定的文件。

迁移中的警告信息:

[WARNING] Ignoring an unsupported file "\\?\C:\Users\壹一\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\tmp\nvimPSGDe4\0" of type 0140000.

tags: wsl

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式