[数据恢复故障描述]
一台重要的MYSQL数据库服务器GB*RAID约GB DATA卷存储了大约~个数据库平时管理员对每个数据库dump出以后直接压缩成gz包再将所有重要的gz 包合起来压缩成一个总的targz包这些文件每日产生一次覆盖原来的备份数据文件及备份文件全部存储于data卷上
一次系统维护中管理员不小心将data卷下的所有文件全部rm删除后马上停止系统再未做其它操作但删除时仍有大量终端在访问此服务器
要求恢复mysql数据库文件即mydfrmmyi(可重建)文件或每个数据库的gz包或所有重要数据库总的targz备份包
[数据恢复分析]
ext下的数据删除理论上会清除inode中除节点类型日期外的其他属性诸如文件大小数据存储地址等属性会全部清同时目录表中会以目录条目长度的方式屏蔽掉已删除文件但会保留节点编号最后会改变BITMAP中的空间占用标志
即使是目录表中存在删除文件的节点编号但因节点内容已经没有需要的东西与数据区也是脱钩的
从数据角度大多数文件类型都会有特定的文件头标志按头标志是有可能找到删除文件的起始位置的但EXT以块组为单位进行存储同时数据与索引是混合存储于数据区的所以数据连续存储的可能性非常之小这样按文件格式进行处理也是很困难的
唯一的算法是结合上述几个特征加上对日志的分析加上对存储过程的模拟分析尽可能地逼近真实存储结构
[数据恢复过程]
对故障卷做完整备份
对总targz进行恢复分析但恢复出来的文件解压到%左右会报错后续文件列表也无法列出经分析最大的原因是删除时仍有数据写入破坏文件导致
对分包的gz文件进行恢复分析大多数恢复成功
对于未恢复成功的gz数据库直接恢复其myd\frm数据文件所有数据恢复成功
[其他]
LINUX EXT数据删除后应尽快断掉文件系统IO通常umount文件系统即可
对故障卷做dd备份确保数据恢复过程不会导致更严重的故障