服务器数据恢复环境:
一台服务器上有一组由5块硬盘(4块数据盘+1块热备盘)组建的raid5阵列。服务器安装Linux Redhat操作系统,运行一套基于oracle数据库的OA系统。
服务器故障:
这组raid5阵列中一块磁盘离线,但是热备盘并没有自动激活rebuild,当另外一块数据盘发生故障离线后,raid崩溃。
用户方要求恢复raid数据,同时要求还原操作系统。经过初步观察,raid中的这些硬盘没有表现出存在明显的物理故障的特征,也没有明显的同步表现,数据恢复的可能性很大。
服务器数据恢复过程:
1、关闭服务器,将所有磁盘标记后取出并挂到一个只读环境上进行完整磁盘镜像。镜像完成后将所有磁盘按照原样还原到原服务器中,后后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
2、镜像过程中在后掉线的硬盘中发现了几十个坏扇区,其他硬盘都没有发现问题。基于镜像文件分析所有磁盘底层数据,或者重组raid所需要的信息(盘序、块大小、数据校验方式、条带方向等)。
3、尝试重组raid。重组完成后验证数据,发现数据量在200M以上压缩包解压正常,说明raid结构是正确的。按照这个结构在一块单盘上生成raid并尝试打开,没有报错。
4、将生成raid的这块单盘接入到原服务器。用linux SystemRescueCd启动,然后通过dd命令进行全盘回写。启动操作系统出现报错:/etc/rc.d/rc.sysinit:Line 1:/sbin/pidof:Permission denied,
初步判断这个文件权限出了问题。使用SystemRescueCd重启检查后发现该文件的权限、大小、时间都存在明显的错误,节点损坏。
5、重新分析重组数据中的根分区,定位出错的/sbin/pidof,发现导致问题出现的原因就是那块后掉线磁盘上的坏道。使用另外几块完好的数据盘对后掉线的那块盘的损坏区域进行xor补齐,可是补齐之后校验文件系统依然报错。再一次检查iNode表发现后掉线的那块盘的损坏区域有部分节点表现为55 55 55部分。
6、节点中描述的uid虽然看起来正常,但是大小、属性、最初分配块都是错误的。分析了所有的可能性方案,发现都无法将这个损坏节点找回来,只能尝试修复或者以相同文件代替。
7、通过日志将所有可能有错的文件原节点块的节点信息确定出来,然后进行修正。修正之后重新dd根分区,然后执行fsck -fn /dev/sda5,仍然报错。
8、根据报错提示重新分析,发现系统中有多个节点共用同样的数据块,原来是第一块离线硬盘的掉线时间比较早,导致出现节点信息新旧交集的情况。将错误节点清除后再次执行fsck -fn /dev/sda5,依然报错。
好在这些节点大多是在doc目录下,不影响系统启动。于是强行修复&重启系统,进入桌面启动数据库和应用软件,无报错。
9、用户方仔细检测后,确认重要数据都在,认可数据恢复结果。