将wsl迁移至D盘


前因

因为下学期的计组课程需要用到ISE,然而ISE这样13年的软件和win11自然是不兼容了(经过网上大佬们的各种尝试,最终也只能安装到92%),所以在水群大佬的推荐下,我可以尝试使用WSLG(Windows Subsystem for Linux GUI)来运行ISE,于是我就先安装官网教程更新了wsl2,这个流程不太难,就不赘述了。

由于ISE体量巨大,所以不得不将WSL迁移到D盘以防止C盘爆炸。

过程

迁移WSL需要使用工具LxRunOffline

GitHub网址:https://github.com/DDoSolitary/LxRunOffline/releases
如果迁移中遇到以下错误,则应该改用:https://ddosolitary-builds.sourceforge.io/LxRunOffline/LxRunOffline-v3.5.0-11-gfdab71a-msvc.zip

[ERROR] Couldn't set the case sensitive attribute of the directory "\\?\C:\Users\toby2\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\".
Reason: Indicates that the directory trying to be deleted is not empty.

2024/6/25更新:上述链接已失效,可参考DDoSolitary/LxRunOffline#205;省流,先移动磁盘文件,再运行程序。

操作步骤

注意:建议使用管理员身份运行powershell

  1. 查看已安装的子系统

    ./LxRunOffline list
  2. 查看子系统所在目录

    ./LxRunOffline get-dir -n [xxx]

    xxx是你在步骤1中查询到的子系统版本

  3. 迁移系统

    ./LxRunOffline move -n [xxx] -d [ddd]

    xxx是你在步骤1中查询到的子系统版本

    ddd是你期望移动到的路径

  4. 如果迁移系统中出现以下错误

    [ERROR] The distro "Ubuntu-20.04" has running processes and can't be operated. "wsl -t <name>" or "wsl --shutdown" might help.

    则使用快捷键Win+x再按g打开计算机管理重启服务LxssManager(也可以直接停止服务,迁移结束后再打开)

  5. 如果迁移后Ubuntu报错“拒绝访问”

    使用下列指定为目录授权

    icacls [ddd] /grant "[user]:(OI)(CI)(F)"

    ddd为移动后的路径

    user为你的用户名

    授权后建议重启LxssManager服务

Q&A

  1. 如果Ubuntu报错“另一个程序正在使用此文件,进程无法访问”

    以管理员身份运行以下指令

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

    然后按照要求重启电脑

    造成此错误的原因估计为在未开启WSL的情况下使用资源管理器尝试打开WSL的磁盘镜像文件(.vhdx文件)

  2. 关于wslg的分辨率

    目前wslg似乎只支持整数倍缩放,这非常不友好,但是可以手动启用非整数倍缩放

    在wsl终端输入sudo vi /mnt/c/ProgramData/Microsoft/WSL/.wslgconfig新建一个文件(或者在Windows中找到C:\ProgramData\Microsoft\WSL,并在其中新建文件.wslgconfig),文件内容如下:

    [system-distro-env]
    WESTON_RDP_DISABLE_FRACTIONAL_HI_DPI_SCALING=false

    然后关闭wsl终端,打开powershell,输入wsl --shutdown即可

    只不过150%缩放确实有点糊……

    2024/6/25更新:参见microsoft/wslg#23


评论
  目录