You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除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空间:

  1. 关闭所有WSL2终端,在Windows命令提示符(CMD)或PowerShell中彻底关闭WSL2:
    wsl --shutdown
    
  2. 定位WSL2虚拟磁盘文件,默认路径为:
    C:\Users\<你的Windows用户名>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
    (替换<你的Windows用户名>为实际用户名)
  3. 使用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
      
  4. 重新启动WSL2:
    wsl
    

3. 验证空间释放

  • 在Windows资源管理器中查看SSD可用空间,确认已回收被占用的250GB空间。
  • 在WSL2终端中执行以下命令,检查Ubuntu系统内的磁盘使用情况:
    df -h
    

内容的提问来源于stack exchange,提问作者karajaganaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:24:17