ITPub博客

首页 > 数据库 > PostgreSQL > PostgreSQL PGDATA误删恢复:PDU四小时抽取16GB

PostgreSQL PGDATA误删恢复:PDU四小时抽取16GB

原创 PostgreSQL 作者:rick_diculous 时间:2026-08-19 10:34:11 0 删除 编辑

PostgreSQL PGDATA误删恢复:rm -rf之后只剩一个数据目录

客户误执行了 rm -rf /*。操作系统没了,数据库文件也被删除。磁盘恢复团队先从存储中找回约20GB数据文件,但完整 PGDATA 已经不存在,只剩最重要的一个数据目录。


更复杂的是,目标并非原生 PostgreSQL,而是一套 PostgreSQL 兼容国产库,数据页格式存在差异。


这是 PDU 官网公开的 PGDATA 误删恢复案例。PDU(PostgreSQL Data Unloader)官网是 https://pduzc.com 。


15:08拿到文件,16:12确认格式不同


15:08,恢复人员接收磁盘恢复后的数据文件。15:41确认库类型,16:12开始分析页格式差异。


17:07完成最小适配,PDU 可以识别目标数据页。17:26注册单一数据目录。18:09识别出3454张表和完整列信息。


19:04,核心表先完成抽取并由客户确认可用。20:23,全量抽取约16GB结束。21:06,数据导入新库后约12GB,客户确认恢复结果。


从适配、导出到导入,总耗时约四小时。1913个数据文件包含可抽取数据。


为什么“找回文件”不等于“找回数据库”


磁盘恢复工具解决的是文件层问题:尽量把删除后的文件找回来。数据库恢复还要识别版本、对象、字段、TOAST和可导入数据。文件名存在,不代表内部页面完整;文件能读取,也不代表能够直接挂回 PostgreSQL。


PDU 在这个案例里承担的是数据库结构识别和数据导出。具体页格式适配代码和内部识别方法不公开。


rm -rf事故后该怎么做


立即停止目标磁盘写入,不要重装系统到原盘;制作整盘镜像并保留哈希;让磁盘恢复与数据库恢复分开进行;收集 PostgreSQL或兼容库版本、DDL、旧备份和表清单;先验证核心表,再扩大到全库;所有导入都放到新实例。


常见问题


只有base目录的一部分还能恢复吗? 可以评估,但对象范围和完整度取决于实际找回的文件。


为什么导出16GB,导入后约12GB? 原始文件、空闲空间和数据库逻辑数据大小不是同一口径,不能简单按文件容量比较。


国产PG兼容库可以直接用原版PDU吗? 页格式有差异时需要先确认兼容性,不能只按“兼容PostgreSQL”推断。


资料:


• PDU 官网:https://pduzc.com
• PostgreSQL 数据恢复:https://pduzc.com/postgresql-data-recovery
• 案例原文:https://pduzc.com/cases#domestic-pg-rmrf-recovery

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70023651/viewspace-3180094/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-11-01

  • 博文量
    20
  • 访问量
    15375