删除PostgreSQL数据库后SSD空间未释放,求解决方法
解决WSL2下PostgreSQL删除数据库后SSD空间未释放的问题
问题背景
公司使用fixtures填充开发环境数据库,因测试需求改用37GB的.dump文件恢复数据,执行命令:
rails db:drop rails db:create pg_restore -v -O -j 12 -U my_username -d my_database dump1234.dump
中途停止恢复后SSD占用100GB,一周后再次执行恢复并设置Windows定时关机,次日发现应用页面无数据,此时数据库my_database显示占用250GB。通过pgAdmin4删除该数据库后,终端已无此库,但SSD仍被占用250GB;重新创建数据库并执行rails dev:env:reset导入fixtures后,数据库仅占用27MB,但SSD空间未回收。
环境
- Ubuntu 20.04(基于Windows 10的WSL2)
- PostgreSQL 14.4
具体解决步骤
1. 清理PostgreSQL残留数据
首先停止PostgreSQL服务,确保没有进程占用数据库文件:
sudo systemctl stop postgresql
删除PostgreSQL数据目录下的残留文件(以PostgreSQL 14为例,默认路径如下):
sudo rm -rf /var/lib/postgresql/14/main/*
重启PostgreSQL服务:
sudo systemctl start postgresql
2. 压缩WSL2虚拟磁盘文件
WSL2通过虚拟磁盘文件存储Ubuntu系统数据,删除文件后需手动压缩虚拟磁盘才能释放Windows主机的SSD空间:
- 关闭所有WSL2终端,在Windows命令提示符(CMD)或PowerShell中彻底关闭WSL2:
wsl --shutdown - 定位WSL2虚拟磁盘文件,默认路径为:
C:\Users\<你的Windows用户名>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
(替换<你的Windows用户名>为实际用户名) - 使用Windows的
diskpart工具压缩虚拟磁盘:- 打开CMD,进入diskpart工具:
diskpart - 选择目标虚拟磁盘文件(路径需用双引号包裹):
select vdisk file="C:\Users\<你的Windows用户名>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx" - 以只读模式附加虚拟磁盘:
attach vdisk readonly - 执行压缩操作:
compact vdisk - 压缩完成后分离虚拟磁盘:
detach vdisk
- 打开CMD,进入diskpart工具:
- 重新启动WSL2:
wsl
3. 验证空间释放
- 在Windows资源管理器中查看SSD可用空间,确认已回收被占用的250GB空间。
- 在WSL2终端中执行以下命令,检查Ubuntu系统内的磁盘使用情况:
df -h
内容的提问来源于stack exchange,提问作者karajaganaj
相关产品推荐
相关产品推荐

