ext4.vhdx从几G眼睁睁看它涨到九十多G,原因一般就是在镜像写入数据后,即使删除这部分数据,依然被视为可用空间,一般是docker更新的镜像后堆积的旧版本docker镜像导致,即使我用了镜像压缩工具“diskpart”也依然无法解决,这时候就需要导出镜像,取消注册,重新导入镜像即可。
相关链接:试试 WSL2?它是一款免费、极速的服务器解决方案,再也不用租高价低配的服务器啦!
具体方法:
1、先尝试压缩Linux镜像
在 Linux 系统中使用 fstrim 命令来释放未使用的空间。启动你的 WSL2 发行版,然后在终端中运行:
sudo fstrim -v /
确保你的 Linux 发行版已经关闭。你可以在 PowerShell 中运行以下命令来关闭所有运行的 WSL 实例:
wsl --shutdown
然后,使用 diskpart 工具来压缩 VHDX 文件。打开 PowerShell 或命令提示符,输入以下命令:
diskpart
在 diskpart 提示符下,使用以下命令,替换 "C:\path\to\your\ext4.vhdx" 为你的 VHDX 文件的实际路径:
select vdisk file="C:\path\to\your\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
现在 VHDX 文件应该有小一点,但是微乎其微,继续下一步,导出镜像
2、重新注册镜像
确定你想要备份的 WSL2 发行版的名称。可以通过在 PowerShell 中运行以下命令来列出所有安装的发行版:
wsl -l -v
关闭所有运行的 WSL2 实例,以避免在导出过程中发生数据不一致。使用这个命令:
wsl --shutdown
导出并备份发行版。选择一个你想要保存备份的位置,并使用以下命令导出,将 <DistributionName> 替换为你的发行版名称,例如 CentOS7,并将 <BackupFilePath.tar> 替换为你想要保存的文件路径,例如 E:\centos_backup.tar ,注意如果目录不存在则会报错:
wsl --export <DistributionName> <BackupFilePath.tar>
#举例
wsl --export CentOS7 E:\centos_backup.tar
注意,下面操作会删除目前的镜像,所以做好备份,卸载指定的WSL2发行版:
wsl --unregister <DistributionName>
#举例
wsl --unregister CentOS7
导入先前导出的镜像。选择你想要安装镜像的位置和名称,使用以下命令,将 <NewDistributionName> 替换为你想要的新发行版名称,<InstallLocation> 替换为你想要安装的位置,例如 C:\centos,并将 <BackupFilePath.tar> 替换为你备份的文件路径,例如 E:\centos\centos_backup20240502.tar ,注意如果目录不存在则会报错:
wsl --import <NewDistributionName> <InstallLocation> <BackupFilePath.tar>
#举例
wsl --import CentOS7 C:\centos E:\centos\centos_backup20240502.tar
启动新的 WSL2 实例。通过指定你在导入时设置的发行版名称来启动它:
wsl -d <NewDistributionName>
#举例
wsl -d CentOS7
3、避免再次无限扩展镜像容量
因为目前的原因是docker旧版应用镜像的堆积导致,所以设置一个自动定期清理脚本即可,一般这种情况是使用宝塔面板自动更新docker镜像导致,所以直接在宝塔定时任务中添加命令,docker 将自动扫描所有无用的镜像并在删除前列出,然后直接删除它们,不会提示确认。如果只想删除临时镜像(none 标记的),可以省略 -a 参数:
docker image prune -a --force
#或者
docker image prune --force
Comments NOTHING