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

文章目录

    起因

    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.
    

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式