主要观点:去年 9 月服务器重启后,postgres 数据库文件系统出现问题,经排查是因多次调整分区大小且未卸载导致日志损坏,尝试多种方法后发现可通过修改超级块相关字段来恢复数据,此经历让作者意识到应配置每日自动 PostgreSQL 备份,并认为文件系统工具应允许用户在知晓情况下修改,同时感谢他人校对。
关键信息:
- 服务器架构:Alpine Linux 主机,/在 SATA SSD 上为 ext4,有旋转磁盘阵列和 ZFS 及本地加密,还有“创可贴”SSD LUKS 解决方案。
- 事件经过:3 月将未加密的 postgres 数据库移至 LUKS 存储,后迁移 Matrix 数据库使分区变大,9 月系统重启后 postgres 挂载失败,经检查为文件系统超级块校验和错误,尝试多种修复方法后成功恢复数据。
重要细节: - 最初创建 64GB 文件,后数据库增长需调整分区,使用 dd、cryptsetup resize 和 resize2fs 成功处理。
- 修复过程中尝试 e2fsck 及不同超级块均无效,参考 lore.kernel.org 消息推测是多次调整分区未卸载导致日志损坏。
- 作者通过理解 ext4 结构,手动修改超级块相关字段(如 s_checksum_type 和 s_feature_ro_compat)使文件系统可挂载,数据完整。
- 作者因拖延未配置备份,此次经历后立即编写备份脚本,且推荐使用 pgbackrest 作为连续备份工具。同时指出 extundelete 等工具在数据完整时也可能无法正常工作,希望能改进。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。