WSL 磁盘管理
1. 迁移虚拟磁盘位置
WSL 使用虚拟磁盘文件存储文件系统。随着时间的推移,WSL 的虚拟磁盘文件可能会变得很大,而且它的默认位置很可能在 C 盘,可能产生磁盘空间不足的问题。我们可以通过导出、导入虚拟磁盘文件来迁移 WSL 系统。
要迁移 WSL 的虚拟磁盘文件,首先应该关闭 WSL:
bat
wsl --shutdown
检查你要迁移的 WSL 系统的名称:
bat
wsl --list -v
text
NAME STATE VERSION
* Ubuntu-24.04 Running 2
docker-desktop Running 2
例如,下面我们要迁移名称为 Ubuntu-24.04
的 WSL 系统。首先应该导出虚拟磁盘文件:
bat
mkdir D:\wsl\
mkdir D:\wsl\temp\
wsl --export Ubuntu-24.04 "D:\wsl\temp\Ubuntu-24.04.tar"
Ubuntu-24.04.tar
即为虚拟磁盘的全部文件,接着将 WSL 系统注销:
bat
wsl --unregister Ubuntu-24.04
然后导入虚拟磁盘文件:
bat
mkdir D:\wsl\Ubuntu-24.04\
wsl --import Ubuntu-24.04 D:\wsl\Ubuntu-24.04 "D:\wsl\temp\Ubuntu-24.04.tar" --version 2
最后设置默认 WSL 系统:
bat
wsl --set-default Ubuntu-24.04
注意,以前的默认用户不会保存,可能此时默认用户已经发生变化,可以通过 ubuntu2404
命令重新设置默认用户:
bat
ubuntu2404 config --default-user your_name
完整的示例如下:
bat
wsl --shutdown
mkdir D:\wsl\
mkdir D:\wsl\temp\
mkdir D:\wsl\Ubuntu-24.04\
wsl --export Ubuntu-24.04 "D:\wsl\temp\Ubuntu-24.04.tar"
wsl --unregister Ubuntu-24.04
wsl --import Ubuntu-24.04 D:\wsl\Ubuntu-24.04 "D:\wsl\temp\Ubuntu-24.04.tar" --version 2
wsl --set-default Ubuntu-24.04
ubuntu2404 config --default-user alex
最后你可以删除备份文件 D:\wsl\temp\Ubuntu-24.04.tar
。
2. 压缩虚拟磁盘
虚拟磁盘文件不会自动释放空间,如果你删除了很多文件,则需要手动压缩磁盘文件。
下面即为 .vhdx
文件的压缩过程:
首先关闭 WSL:
bat
wsl --shutdown
打开磁盘管理:
bat
diskpart
在磁盘管理中进行如下操作:
bat
REM 选择磁盘文件
select vdisk file="...\ext4.vhdx"
REM 压缩虚拟磁盘文件
compact vdisk
REM 卸载虚拟磁盘,如出错可忽略
detach vdisk
REM 退出
exit
也可以将上述操作写入脚本文件,例如压缩 Docker Desktop 的虚拟磁盘的脚本如下:
bat
select vdisk file="%LOCALAPPDATA%\Docker\wsl\disk\docker_data.vhdx"
compact vdisk
detach vdisk
exit
将上述代码保存为 docker-compact.diskpart
文件,然后以管理员权限执行命令:
bat
diskpart /s docker-compact.diskpart
即可自行完成压缩虚拟磁盘的操作。
3. 卸载虚拟磁盘
.vhdx
虚拟磁盘文件卸载:
- 设备管理器:卸载虚拟磁盘驱动器
- 磁盘管理器:刷新/分离 VHD