分析Linux raid6同步成raid5导致数据丢失的情况

数据恢复故障描述:
原存储为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. 判断可恢复性,以及怎么实现恢复程序的算法。

  1. 恢复及修复。
    快速分析出原始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 后,文件目录结构和属性都和原来一模一样。



    数据恢复结论:
    用时6天,数据恢复成功。

原文地址:https://blog.51cto.com/sun510/2445884

时间: 2024-10-04 02:59:44

分析Linux raid6同步成raid5导致数据丢失的情况的相关文章

存储linux RAID6被重建成RAID5的数据恢复解决方案

数据恢复故障描述:原存储为12块2T硬盘组成的Linux RAID6,文件系统均为EXT3,此存储上划有3个LUN,每个均为6TB大小,某天在RAID失效后,维护人员为了抢救数据,对此失效的存储重进行分配RAID,并进行了初始化.初始化进行很长时间后,维护人员察觉到情况有异,便强制停止初始化,但初始化已达到 50%以上.数据部分已被不可逆的破坏.数据恢复故障分析:故障的起因仅仅是RAID失效,维护人员随后的抢救数据过程中用11块硬盘进行重分配RAID5,并进行长时间的初始化,这对原始数据是不可逆

Linux内核同步机制

http://blog.csdn.net/bullbat/article/details/7376424 Linux内核同步控制方法有很多,信号量.锁.原子量.RCU等等,不同的实现方法应用于不同的环境来提高操作系统效率.首先,看看我们最熟悉的两种机制——信号量.锁. 一.信号量 首先还是看看内核中是怎么实现的,内核中用struct semaphore数据结构表示信号量(<linux/semphone.h>中): [cpp] view plaincopyprint? struct semaph

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

数据恢复故障描述: 原存储为12块2T硬盘组成的Linux RAID6,文件系统均为EXT3,此存储上划有3个LUN,每个均为6TB大小,某天在RAID失效后,维护人员为了抢救数据,对此失效的存储重进行分配RAID,并进行了初始化.初始化进行很长时间后,维护人员察觉到情况有异,便强制停止初始化,但初始化已达到 50%以上.数据部分已被不可逆的破坏.数据恢复故障分析:故障的起因仅仅是RAID失效,维护人员随后的抢救数据过程中用11块硬盘进行重分配RAID5,并进行长时间的初始化,这对原始数据是不可

Linux内核同步机制--转发自蜗窝科技

Linux内核同步机制之(一):原子操作 http://www.wowotech.net/linux_kenrel/atomic.html 一.源由 我们的程序逻辑经常遇到这样的操作序列: 1.读一个位于memory中的变量的值到寄存器中 2.修改该变量的值(也就是修改寄存器中的值) 3.将寄存器中的数值写回memory中的变量值 如果这个操作序列是串行化的操作(在一个thread中串行执行),那么一切OK,然而,世界总是不能如你所愿.在多CPU体系结构中,运行在两个CPU上的两个内核控制路径同

一次导致数据丢失的小变更

前言 不知不觉,技术人生系列·我和数据中心的故事来到了第十期,小y又和大家见面了! 前期我们分享了不少Oracle数据库故障和优化的实战案例,有朋友问,小y是否可以分享一些无备份时数据恢复方面的实战案例呢? 答案自然是--当然可以了.小y从来就不是一个藏着掖着的人嘛 ^_^ 这些年,小y所在的Oracle服务团队,该遇到的和不该遇到的问题,基本都碰到了. 所以在无备份的数据恢复这方面做的案例还是很多的,有时一周甚至要做三四个这样的CASE,问题类型不尽相同,例如: >> 某电信运营商文件系统满

使用信号量控制Linux线程同步

线程同步 在现实生活中,有些东西就必须是按顺序执行的,只有我完成了以后,你才能在我的劳动成果上接着干:不能我还没有完成,你就开始干活了.这就是线程同步最直白的解释了. 在进行程序设计时,亦是如此.线程同步,同步的是什么?它同步的是对共享资源(内存区域,公共变量等)或者临界区域的访问.有的时候,这些共享 资源和临界区域,就只能容忍一个线程对它进行操作(读或者写,读操作一般不控制,主要是写操作),这个时候,我们必须要对这些共享资源或者临界区域进行同 步,那么如何对它们进行线程同步呢? 在Linux中

Linux内核同步 - spin_lock

一.前言 在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机制,但是现在中断上下文也参和进来,那些可以导致睡眠的lock就不能使用了,这时候,可以考虑使用spin lock.本文主要介绍了linux kernel中的spin lock的原理以及代码实现.由于spin lock是architecture dependent代码,因此,我们在第四章讨论了ARM3

Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL

Linux 线程实现机制分析 Linux 线程实现机制分析  Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是

Linux多线程同步机制

http://blog.163.com/he_junwei/blog/static/19793764620141711130253/ http://blog.csdn.net/h_armony/article/details/6766505  一.互斥锁 尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同步的mutex函数. 1. 创建和销毁 有两种方法创建互斥