Skip to content

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 虚拟磁盘文件卸载:

  1. 设备管理器:卸载虚拟磁盘驱动器
  2. 磁盘管理器:刷新/分离 VHD