服务器数据恢复环境:
邮件服务器中有一组由8块盘组成的RAID5阵列, 上层是Linux操作系统+EXT3文件系统。
服务器故障:
由于误删除导致文件系统中的邮件数据丢失。
服务器数据恢复过程:
1、将故障服务器中所有硬盘做好标记后取出,硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有磁盘进行扇区级全盘镜像备份,镜像完成后将所有磁盘按照原样还原到原服务器中,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
2、基于镜像文件分析所有磁盘底层数据,分析数据在硬盘中分布的规律,获取重组raid所需要的相关信息(起始扇区、盘序、条带大小、校验方向、数据走向等)。根据上述获取到的信息重组RAID。
3、组建好的RAID中可以看到上层划分的几个EXT3分区。分析每个分区中的底层数据,,发现其中一个分区里面有大量的邮件头,并且有nsmail目录,因此可以确认此分区是需要恢复数据的目标分区。将此分区导出以待后用。
RAID中的所有分区:
nsmail文件夹:
邮件头示例:
4、恢复邮件数据。
由于EXT3文件系统中文件被删除后,节点中的文件大小和块指针都会被清零,因此很难通过常规方法恢复数据。需要针对EXT3文件系统特点和邮件文件本身的结构,确定算法。根据算法编写程序,使用程序扫描整个文件系统。将扫描找到的邮件文件全部取出,然后根据邮件本身记录的收件人、发件人、抄送、主题等信息进行整理,然后将数据迁移到邮件平台上。
邮件数据恢复过程:
a、编写邮件标识程序。
b、按照算法编写在ext3文件系统中提取≥48k邮件和提取<48k邮件的程序,对邮件进行提取。提取同时生成邮件索引信息库,并且提取非自由空间和非邮件区。
c、人工分析提取的非自由空间和非邮件区,确定无遗漏的邮件。如果有遗漏的邮件,确定遗漏的原因,调整算法,重新进行扫描。直到非自由空间和非邮件区中没有遗漏的邮件。
d、按照数据库中解析到的收件人和发件人归类所有提取的邮件。每个账号一个文件夹,内含收件和发件两个文件夹。
结果:
第一次扫描结果:导出邮件60多GB, 60多万个文件。
第二次扫描结果:改进算法后, 导出邮件70多GB, 多了三万多个文件。
第三次扫描结果:再次改进算法, 导出邮件80多GB, 比上次多了十多万个文件。
总的存储空间是600多GB, 邮件区占用80多GB,剩下的自由空间属于全零区域,肯定没有邮件了,非自由空间和非邮件区的垃圾数据有20多GB。
经过数次算法改进和多次细节调整,剩余的非自由空间和非邮件区经过人工验证也无法找到新的邮件文件,只剩下一些无法拼接的邮件中间碎片和杂乱数据。
邮件中间碎片:
垃圾数据:
5、验证数据。验证数据分为两块:一、邮件数据量的验证,根据几个已知账号的收件和发件数量进行统计,大概估算一下邮件的恢复比例。二、邮件正确性的验证,用FoxMail打开提取出的邮件,查看内容是否正常。
几个账号的数量如下:
一些邮件内容:
6、移交数据。将所有提取出的邮件迁移到邮件平台。