一、问题引入
默认情况下,WSL会安装在C盘(系统盘),而C盘空间有限,随着WSL子系统的使用,C盘空间越来越少,最后有可能出现C盘不足导致WSL系统崩溃。
有效的解决方法是,将WSL子系统迁移到其他盘(非系统盘)。
二、WSL磁盘迁移(方式一)
wsl的安装及迁移至其他盘
1. 整体流程
亲测有效。
2. 查看wsl状态
查看wsl下的Linux是否为关闭状态,当wsl为Stopped才能进行下一步。
wsl -l-v
C:\Users\xxx\Desktop>wsl -l-v
NAME STATE VERSION
* Ubuntu Stopped 2
3. 导出系统镜像
以压缩包的形式导出到其他盘。
wsl --export Ubuntu D:\UbuntuWSL\ubuntu.tar
4. 注销原有的linux系统
wsl --unregister Ubuntu
5. 查看系统状态
查看是否真的注销成功。
wsl -l-v
6. 导入系统
wsl --import <导入的Linux名称> <导入盘的路径> <ubuntu.tar的路径> --version 2 (代表wsl2)
wsl --import Ubuntu D:\UbuntuWSL\ D:\UbuntuWSL\ubuntu.tar --version2
7. 修改默认用户
打开wsl ubuntu之后,默认以root身份登录。
ubuntu.exe config --default-user vincent
在导入任意盘linux系统时,我起名Ubuntu,所以这里是ubuntu.exe;如果你起的名字是Ubuntu-20.04,那这里就是ubuntu2004.exe;如果你起的名字是ubuntu-18.04,那这里就是ubuntu1804.exe。
vincent是原有wsl ubuntu的用户名称。
三、WSL磁盘迁移(方式二)
拯救被WSL占满的C盘
1. 整体流程
亲测有效。
2. 下载Move WSL工具
3. 停止WSL子系统
在PowerShell中运行如下命令,停止正在运行的Linux子系统。
wsl --shutdown
4. 查看wsl状态
查看wsl下的Linux是否为关闭状态,当wsl为Stopped才能进行下一步。
wsl -l-v
C:\Users\xxx\Desktop>wsl -l-v
NAME STATE VERSION
* Ubuntu Stopped 2
5. 开始移动
cd d:\move-wsl-master
.\move-wsl.ps1
选择要移动的目标,比如移动Ubuntu-18.04,则输入 1 并回车,然后会提示让我们输入移动的目标路径。
输入目标路径如
D:\WSL
然后回车,便会执行移动。根据移动目标的大小,时间可长可短,请耐心等待。
移动过程中,可以看到脚本会先将移动目标导出到一个tar文件,然后再将tar文件导入到 ext4.vhdx 文件中。
移动完成后,脚本会删掉原来C盘中的相应内容,释放C盘空间。
6. 修改默认用户
操作步骤,参考方式一。
四、回收Docker环境中的空间
Docker用久了会残留很多无用的Image。这些Image文件少则几十上百兆,多则几个G,给本就捉襟见肘的磁盘空间造成巨大浪费, 这时可以删掉不需要的Image文件。但你可能愕然发现,即使删掉了好几个Image,磁盘依然没有苗条下来。
这是因为ext4.vhdx磁盘空间会根据加载的数据自动增长,但是无法自动回收。下面是手动回收的步骤。
1. 停止WSL子系统
在PowerShell中运行如下命令,停止正在运行的Linux子系统。
wsl --shutdown
2. 运行diskpart释放空间
# open window Diskpart
diskpart
# 选择虚拟机文件执行瘦身select vdisk file="D:\WSL\docker-desktop-data\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
五、FAQ
Q:WSL出现“灾难性故障”
错误原因:
磁盘空间不足导致WSL系统奔溃
解决办法:
清理磁盘垃圾,腾出磁盘空间
# 停止WSL
net stop LxssManager
# 重新打开wsl终端
版权归原作者 花花少年 所有, 如有侵权,请联系我们删除。