乐趣区

关于wsl2:缩小-WSL2-VHDX-文件的大小

常常应用 WSL2 的小伙伴们有的时候会遇到发行版内之前应用的文件曾经删除单 Windows 下的发行版 VHDX 还占用微小空间的状况,这个时候很容易的能想到应用 diskpart

diskpart> select vdisk file="C:\Users\<Username>\AppData\Local\Packages\<Linux-Distribution-AppPackageName>\LocalState\ext4.vhdx"
diskpart> compact vdisk

或者应用 Hyper-V 提供的 Optimize-VHD

PS> Optimize-VHD -Mode Full -Verbose "C:\Users\<Username>\AppData\Local\Packages\<Linux-Distribution-AppPackageName>\LocalState\ext4.vhdx"

进行放大,执行之后 VHDX 文件确实是变小了,然而也还没有那么小

此时应进入到 WSL2 中,运行 zerofree 将 ext4 文件系统内曾经不必的块填零,但 zerofree 不能运行在曾经挂载为 rw 的文件系统上,那就把文件系统挂载为 readonly 就行了

wsl2> mount mount /dev/sda -o remount,ro
wsl2> zerofree /dev/sda

运行完结后,在 Windows 下敞开 WSL2

PS> wsl --shutdown

而后再运行最开始 diskpartcompact 或者 Optimize-VHD 就能够把 WSL2 的 VHDX 放大到很靠近于应用了的空间的大小了

FYI,不能应用 Resize-VHD 用来放大 WSL2 的 VHDX,会报“无奈调整虚构磁盘的大小”“无奈实现申请的操作,起因是无奈确定虚构磁盘的平安大小上限。这可能是因为分区表失落或损坏。(0xC03A0026)。”的谬误,仿佛是因为 WSL2 的 VHDX 里没有分区表而间接整个是 EXT4 格局的分区

退出移动版