解决碎片化

  1. 找到 VHDX 文件位置

如果是默认位置的话,定位:

(Get-ChildItem -Path "$env:LOCALAPPDATA\Packages" -Recurse -Filter "ext4.vhdx" -ErrorAction SilentlyContinue).FullName
Get-VHD "C:\Users\diraw\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu24.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx" | 
Select-Object Path, VhdType, FileSize, Size, FragmentationPercentage
  1. 备份数据
# 导出 WSL 为 tar
mkdir C:\WSL-Backup
wsl --export Ubuntu-24.04 C:\WSL-Backup\ubuntu-backup.tar
  1. 清理旧实例
# 完全关闭 WSL
wsl --shutdown
Stop-Process -Name wslservice, wslinstaller -Force

# 注销并删除旧 VHDX
wsl --unregister Ubuntu-24.04
  1. 重建为固定大小 VHDX
# 创建新目录
mkdir C:\WSL2\Ubuntu-24.04

# 导入(创建动态 VHDX)
wsl --import Ubuntu-24.04 C:\WSL2\Ubuntu-24.04 C:\WSL-Backup\ubuntu-backup.tar --version 2

# 启动一次稳定系统
wsl -d Ubuntu-24.04
exit
wsl --shutdown

# 缩小逻辑大小(根据实际数据量,这里 75GB)
wsl --manage Ubuntu-24.04 --resize 80530636800

# 转换为固定大小(关键步骤)
Convert-VHD -Path "C:\WSL2\Ubuntu-24.04\ext4.vhdx" `
-DestinationPath "C:\WSL2\Ubuntu-24.04\ext4-fixed.vhdx" `
-VHDType Fixed
  1. 替换并注册
# 替换动态为固定
wsl --unregister Ubuntu-24.04
Move-Item "C:\WSL2\Ubuntu-24.04\ext4-fixed.vhdx" "C:\WSL2\Ubuntu-24.04\ext4.vhdx" -Force
wsl --import-in-place Ubuntu-24.04 "C:\WSL2\Ubuntu-24.04\ext4.vhdx"
  1. 测试
fio --name=seqread --rw=read --bs=1M --size=2G --numjobs=4 --direct=1 --runtime=10

扩容

  1. 检查当前使用情况
df -h /
  1. Windows PowerShell(管理员) 中执行:
wsl --shutdown
  1. 找到 VHDX 文件位置

如果是默认位置的话,定位:

(Get-ChildItem -Path "$env:LOCALAPPDATA\Packages" -Recurse -Filter "ext4.vhdx" -ErrorAction SilentlyContinue).FullName
  1. 扩展虚拟磁盘

PowerShell(管理员) 中执行以下命令(假设要扩展到 256GB):

# 进入磁盘管理工具
diskpart

# 选择虚拟磁盘(替换为你的实际路径)
select vdisk file="C:\Users\你的用户名\AppData\Local\Packages\...\LocalState\ext4.vhdx"

# 扩展到指定大小(例如 256GB)
expand vdisk maximum=256000

# 退出
exit
  1. 启动 WSL 并扩展文件系统
wsl

在 WSL 内部扩展文件系统(对于 ext4):

sudo resize2fs /dev/sdb