wsl_disk_expand
WSL 虚拟磁盘扩容命令
补充说明
wsl_disk_expand 提供 WSL2 虚拟磁盘(vhdx 文件)的扩容和压缩操作命令,用于解决 WSL 磁盘空间不足的问题。WSL2 使用 ext4 虚拟硬盘文件,默认路径在 %USERPROFILE%\AppData\Local\Packages\ 下。
查看磁盘使用
# 在 WSL 中查看磁盘使用
wsl -d <发行版> -- df -h
# 查看虚拟磁盘文件路径和大小
wsl --manage <发行版> --get-disk-size
# 查找 vhdx 文件路径
Get-ChildItem -Path "$env:LOCALAPPDATA\Packages\*" -Filter "ext4.vhdx" -Recurse -ErrorAction SilentlyContinue | Select-Object FullName, Length
扩容磁盘
# 1. 停止所有 WSL 实例
wsl --shutdown
# 2. 找到 vhdx 文件路径
$vhdxPath = (Get-ChildItem -Path "$env:LOCALAPPDATA\Packages\*" -Filter "ext4.vhdx" -Recurse | Select-Object -First 1).FullName
Write-Host "磁盘文件: $vhdxPath"
# 3. 使用 diskpart 扩容
@"
select vdisk file="$vhdxPath"
expand vdisk maximum=100000
"@ | diskpart
# 4. 重新启动 WSL
wsl
# 5. 在 WSL 中扩展文件系统
sudo mount -t devtmpfs none /dev
# 查看分区信息
lsblk
# 扩展分区(假设 /dev/sdX 是虚拟磁盘)
sudo growpart /dev/sda 1
# 扩展文件系统
sudo resize2fs /dev/sda1
# 验证扩容结果
df -h
压缩磁盘
WSL2 虚拟磁盘自动增长但不自动收缩,手动压缩可回收空间:
# 1. 在 WSL 中填充零以标记未使用空间
wsl -d <发行版> -- sudo dd if=/dev/zero of=/tmp/zero bs=1M status=progress
wsl -d <发行版> -- sudo rm /tmp/zero
# 2. 停止 WSL
wsl --shutdown
# 3. 使用 diskpart 压缩
$vhdxPath = (Get-ChildItem -Path "$env:LOCALAPPDATA\Packages\*" -Filter "ext4.vhdx" -Recurse | Select-Object -First 1).FullName
@"
select vdisk file="$vhdxPath"
compact vdisk
"@ | diskpart
迁移磁盘到其他位置
# 1. 导出 WSL 发行版
wsl --export <发行版> D:\wsl-backup\<发行版>.tar
# 2. 注销原发行版
wsl --unregister <发行版>
# 3. 导入到新位置
wsl --import <发行版> D:\wsl\<发行版> D:\wsl-backup\<发行版>.tar --version 2
# 4. 设置默认用户(可选)
<发行版> config --default-user <用户名>
# 5. 验证
wsl -l -v
注意事项
- 扩容前务必备份虚拟磁盘文件
expand vdisk maximum=100000表示扩容到 100GB,按需修改- diskpart 需要管理员权限
- 压缩操作在磁盘使用率超过 50% 时效果明显
- ext4.vhdx 路径因 WSL 发行版而异,常见位置:
- Ubuntu:
CanonicalGroupLimited.Ubuntu* - Debian:
TheDebianProject.Debian* - Kali:
KaliLinux.* - Alpine: 手动导入的位于
--import指定的路径
- Ubuntu: