服务器数据恢复环境:
某品牌服务器由4块SAS硬盘组成RAID5,Linux操作系统;
存储分区结构:boot分区+LVM卷(划分了一个reiserfs文件系统,作为根分区)+swap分区。
服务器故障:
服务器在正常运行中由于未知原因导致系统瘫痪,管理员重新安装系统以后发现整个RAID逻辑卷变成:boot分区+swap分区+LVM卷,LVM卷中文件系统位置有个空的reiserfs超级块。
需要恢复的就是原reiserfs文件系统中的所有数据,包含数据库、网站程序、网页、OA系统的所有办公文档。
服务器数据恢复过程:
1、服务器数据恢复工程师首先对故障服务器中所有硬盘以只读方式做扇区级别的镜像备份,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始数据造成二次破坏。
2、基于镜像文件分析底层数据,通过对全盘reiserfs树节点之间的关联来确定原reiserfs分区位置,发现原reiserfs文件系统前面部分数据被覆盖,应该是管理员在重装系统时错误地初始化分区结构,装好系统后无法导入LVM卷,试图通过reiserfsck进行修复。
3、reiserfs文件系统对文件系统中所有的文件(含目录)线性化后会以文件key生成B+树,树不断增加节点,树的结构整体拉展后会向磁盘的数据区平滑迁移,所以*节点一般不会被放在文件系统的最前面。
4、根目录的文件KEY号通常是最小的,从空间上看,reiserfs文件系统前面的部分数据中存储的应该是从根起始路径最近的key节点。该案例的数据目录层次较深,节点很大可能还存在。原reiserfs文件系统前面部分被覆盖的数据已经无法恢复,位于reiserfs文件系统前面部分的整个树的索引全部丢失,加上reiserfs的树概念设计抽象,重搭建树行不通。
5、通过北亚企安自主开发程序扫描整个原reiserfs文件系统区域的key节点,将所有节点导出。然后通过北亚企安自研程序对所有叶节点进行重新排序、过滤(去掉之前删除文件丢弃的节点),重新生成二级、三级、四级等叶节点。选择分区前面被覆盖的空间作为新树的结构区,生成对应地址信息。
6、对目录命名:如果原树路径某节点丢失,则使用自定义的key节点编号命名;如果无法确定其父目录,暂加入到/otherfiles目录下。
7、根据上面对生成树索引信息并写入特定位置,再根据这些信息生成超级块,设置clear标志。
8、在suse虚拟机下创建快照,挂载修复好的卷,这时候已经可以看到文件了。
9、在用于修复的suse虚拟机下挂载用来copy数据的目标硬盘,mkfs后将所有数据cp到目标盘。
10、用户使用find命令整理所需数据,修正部分目录文件位置与名称。对于部分丢失的散文件则按照文件大小与文件头标志查找,找到后移动并重命名。
11、通过上述步骤,将所有需要恢复的数据都找到了,经过用户的反复验证,确认恢复出来的数据完整可用。