一、故障环境描述

客户使用MD1200磁盘柜+RAID卡的方式,创建一组RAID5阵列,分配一个LUN共55T左右,在Linux系统层面对LUN进行分区,划分sdc1和sdc2两个分区,其中sdc1分区大小为2T,通过LVM扩容的方式,将sdc1分区加入到了root_lv中,剩余的sdc2分区格式化为XFS文件系统使用。

客户在对服务器进行重装系统操作后,发现sdc磁盘分区改变,原先的sdc2分区丢失,无法访问。

二、备份数据

为防止数据恢复过程中由于误操作对原始磁盘造成二次破坏,使用winhex软件为每块磁盘做镜像,以后所有的数据恢复操作都在镜像盘上进行,不会对原始磁盘造成影响。

三、数据恢复

1、使用镜像盘分析raid的盘序、条带大小等信息;
2、虚拟重组出raid结构;
3、定位到xfs文件系统的分区起始位置;
4、校验xfs文件系统的完整性及正确性;
5、修复xfs文件系统的超级块结构;

系统重装后 postgresql 如何恢复_raid

修复完成的超级块
6、对xfs文件系统中丢失的节点及目录项进行修复;

系统重装后 postgresql 如何恢复_数据恢复_02

修复完成的根节点

系统重装后 postgresql 如何恢复_服务器 _03

重做的目录项

7、修复完成后编写程序解析xfs文件系统,提取其中的数据。

四、数据恢复结果

对丢失的xfs文件系统的进行检测后发现,文件系统头部的超级块及部分节点、目录项丢失,根据超级块备份及文件系统中的目录树结构,对超级块进行修复还原,对丢失的节点、目录项进行修补、重构之后,文件系统中99%以上的数据可以完整恢复

系统重装后 postgresql 如何恢复_服务器 _04

修复完成的目录结构

五、数据恢复结论

由于数据丢失之后客户未对存储做任何写入的破坏性操作,所以数据及文件系统信息绝大部分保留完整,数据100%恢复。