存储linux RAID6中raid信息丢失的恢复数据方法

简介:

数据恢复故障描述:

原存储为12块2T硬盘组成的Linux RAID6,文件系统均为EXT3,此存储上划有3个LUN,每个均为6TB大小,某天在RAID失效后,维护人员为了抢救数据,对此失效的存储重进行分配RAID,并进行了初始化。

初始化进行很长时间后,维护人员察觉到情况有异,便强制停止初始化,但初始化已达到 50%以上。数据部分已被不可逆的破坏。

数据恢复故障分析:

故障的起因仅仅是RAID失效,维护人员随后的抢救数据过程中用11块硬盘进行重分配RAID5,并进行长时间的初始化,这对原始数据是不可逆的损坏,后经证明,仅第三个LUN可用普通RAID6方法恢复出数据,但第三个LUN并没有客户想要的要的重要数据,重要的数据主要集中在第一个LUN。

由于此案例的故障极其复杂,我公司接到客户送修时已经在国内数据恢复公司之间转手多次,包括多家知名数据恢复公司,仍未解决。

数据恢复过程:

恢复过程分成4步:

1.分析原始12块磁盘RAID6的RAID和磁盘的组织结构。

2.分析重分配RAID5时RAID和磁盘的组织结构。

3.判断可恢复性,以及怎么实现恢复程序的算法。

4. 恢复及修复。

快速分析出原始RAID6的结构,但因为底层RAID6和RAID5大量的信息重合导致分析重分配RAID5的结构时比较困难,整整花费了 1天时间。

第一步和第二步已完成,经分析,被初始化破坏的数据可用其它方法进行还原,制定出恢复算法,花费一天写程序及进行程序算法的校正,程序把12块磁盘中原始数据的第一和第二个LUN分别镜像到搭好的两个7TB 的存储上。

经验证第二个LUN数据完全正常,但最重要的第一个LUN前有大约有10MB数据的破坏,这前 10MB数据很要命,EXT3的根目录和第一个块组的I节点全在这前10MB里面,然后使用数据恢复常用的软件UFS Explorer 和 R-Studio 的恢复效果都相当不理想 ,可能是存储较大的原因。

在这种情况下只得自行修复损坏的EXT3文件系统,自行写一个程序进行EXT3孤目录查找,找到了根目录下有3个了目录,重建根目录和I节点,用 文件系统解析程序打开已完全正常,但为了保证原始数据的一些权限和属性,在LINUX简单修复,LINUX已能正常挂载,然后在LINUX把文件用 cp 命令进行拷贝格式化好的EXT3 的单块磁盘的分区上。这样客户使用数据时,不再需要别的任何设置,直接 cp 后,文件目录结构和属性都和原来一模一样。

图一:

wKioL1jTbz2hs7O4AAIS4bF-Cr8984.jpg-wh_50

图二:

wKiom1jTb1bhjc8IAAIfDv1WzJg611.jpg-wh_50

图三:

wKioL1jTb2aSl317AAJaWdOvLlY958.jpg-wh_50


数据恢复结论:

用时3天,数据100%恢复成功。











本文转自 宋国建 51CTO博客,原文链接:http://blog.51cto.com/sun510/1909633,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
4月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
1586 10
|
4月前
|
Ubuntu Linux 图形学
推广与体验Ubuntu Linux的便捷方法
如果你的朋友或家人对尝试Linux感兴趣,但希望在安装之前先体验一下,你可以分享以下链接给他们:Ubuntu在线导览。通过这个链接,他们可以在任何地方轻松体验Ubuntu,无需安装即可深入了解这个流行的操作系统。
|
4月前
|
XML 缓存 Linux
在Linux环境下解决Visual Studio Code字体显示异常和字体替换方法。
解决Linux下VS Code字体显示异常,需要对Linux字体渲染机制有所理解,并对VS Code的配置选项进行合理设置。替换字体时则要通过系统字体配置或VS Code设置来完成。通过上述方法,可以有效地解决字体显示问题,从而提升代码编辑的视觉体验。
510 0
|
7月前
|
NoSQL Linux 编译器
GDB符号表概念和在Linux下获取符号表的方法
通过掌握这些关于GDB符号表的知识,你可以更好地管理和理解你的程序,希望这些知识可以帮助你更有效地进行调试工作。
313 16
|
5月前
|
网络协议 Ubuntu Linux
Wireguard in Linux的安装方法
本文介绍了如何在Ubuntu和Rocky Linux中安装配置WireGuard,并探讨了配置过程中可能出现的DNS泄露问题及解决方法,包括通过nmtui设置DNS及调整DNS优先级参数。
|
8月前
|
Linux Shell
Linux系统下快速批量创建和删除文件的方法
总的来说,使用shell脚本来批量处理文件是一种非常强大的工具,只要你愿意花时间学习和实践,你会发现它能大大提高你的工作效率。
448 19
|
8月前
|
Ubuntu Linux 网络安全
如何在Linux中更改主机名?修改主机名最新方法
本期教程将指导您如何在Linux系统中更改主机名。主机名是Linux系统的常用功能,用于识别服务器,帮助区分不同服务器,并与网络进程和其他应用程序协同工作。教程涵盖显示当前主机名的方法(通过`hostname`命令),以及在CentOS 7、Debian 9和Ubuntu 16.04及以上版本中更改主机名的步骤(使用`hostnamectl set-hostname`命令)。对于其他Linux版本,可编辑`/etc/hostname`文件实现更改。记得重启相关服务或服务器以使更改生效!
1999 12
|
8月前
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
335 10