raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)

一、故障描述
机房突然断电导致整个存储瘫痪,加电后存储依然无法使用。经过用户方工程师诊断后认为是断电导致存储阵列损坏。
raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)
整个存储是由12块日立硬盘(3T SAS硬盘)组成的RAID-6磁盘阵列,被分成一个卷,分配给几台Vmware的ESXI主机做共享存储。整个卷中存放了大量的Windows虚拟机,虚拟机基本都是模板创建的,因此系统盘都统一为160G。数据盘大小不确定,并且数据盘都是精简模式。

二、备份数据
将故障存储的所有磁盘和备份sss数据的目标磁盘连入到一台Windows Server 2008的服务器上。故障磁盘都设为脱机(只读)状态,在专业工具WinHex下看到连接状态如下图所示:(图中HD1-HD12为目标备份磁盘,HD13-HD24为源故障磁盘,型号为HUS723030ALS640):
图一:
raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)

使用WinHex 对HD13-HD24以底层方式读取扇区,发现了大量损坏扇区。初步判断可能是这种硬盘的读取机制与常见的硬盘不一样。尝试更换操作主机,更换HBA卡,更换扩展柜,更换为Linux操作系统,均呈现相同故障。与用户方工程师联系,对方回应此控制器对磁盘没有特殊要求。
使用专业工具对硬盘损坏扇区的分布规律进行检测,发现如下规则:
1、损坏扇区分布以256个扇区为单位。
2、除损坏扇区片断的起始位置不固定外,后面的损坏扇区都是以2816个扇区为间隔。
所有磁盘的损坏扇区分布如下表(只列出前3个损坏扇区):
ID号 硬盘序列号 第1个损坏扇区 第2个损坏扇区 第3个损坏扇区
13 YHJ7L3DD 5376 8192 11008
14 YHJ6YW9D 2304 5120 7936
15 YHJ7M77D 2048 4864 7680
16 YHJ4M5AD 1792 4608 7424
17 YHJ4MERD 1536 4352 7168
18 YHJ4MH9D 1280 6912 9728
19 YHJ7JYYD 1024 6656 9472
20 YHJ4MHMD 768 6400 9216
21 YHJ7M4YD 512 6144 8960
22 YHJ632UD 256 5888 8704
23 YHJ6LEUD 5632 8448 11264
24 YHHLDLRA 256 5888 8704
临时写了个小程序,对每个磁盘的损坏扇区做绕过处理。用此程序镜像完所有盘的数据。

三、故障分析
1、分析损坏扇区
仔细分析损坏扇区发现,损坏扇区呈规律性出现。
-每段损坏扇区区域大小总为256。
-损坏扇区分布为固定区域,每跳过11个256扇区遇到一个坏的256扇区。
-损坏扇区的位置一直存在于RAID的P校验或Q校验区域。
-所有硬盘中只有10号盘中有一个自然坏道。

2、分析分区大小
对HD13、HD23、HD24的0-2扇区做分析,可知分区大小为52735352798扇区,此大小按RAID-6的模式计算,除以9,等于5859483644扇区,与物理硬盘大小1049524,和DS800控制器中保留的RAID信息区域大小吻合;同时根据物理硬盘底层表现,分区表大小为512字节,后面无8字节校验,大量的0扇区也无8字节校验。故可知,原存储并未启用存储中常用的DA技术(520字节扇区)。
分区大小如下图(GPT分区表项底层表现,涂色部分表示分区大小,单位512字节扇区,64bit):
图二:
raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)
四、重组RAID
1、分析RAID结构
存储使用的是标准的RAID-6阵列,接下来只需要分析出RAID 成员数量以及RAID的走向就可以重组RAID。
-分析RAID条带大小
整个存储被分成一个大的卷,分配给几台ESXI做共享存储,因此卷的文件系统肯定是VMFS文件系统。而VMFS卷中又有存放了大量的Windows 虚拟机。Windows虚拟机中大多使用的是NTFS文件系统,因此可以根据NTFS中的MFT的顺序分析出RAID条带的大小以及RAID的走向。
-分析RAID是否存在掉线盘
镜像完所有磁盘。后发现最后一块硬盘中并没有像其他硬盘一样有大量的坏道。其中有大量未损坏扇区,这些未损坏扇区大多是全0扇区。因此可以判断这块硬盘是热备盘。

2、重组RAID
根据分析出来的RAID结构重组RAID,能看到目录结构。但是不确定是否为最新状态,检测几个虚拟机发现有部分虚拟机正常,但也有很多虚拟机数据异常。初步判断RAID中存在掉线的磁盘,依次将RAID中的每一块磁盘踢掉,然后查看刚才数据异常的地方,未果。又仔细分析底层数据发现问题不是出在RAID层面,而是出在VMFS文件系统上。VMFS文件系统如果大于16TB的话会存在一些其他的记录信息,因此在组建RAID的时候需要跳过这些记录信息。再次重组RAID,查看以前数据异常的地方可以对上了。针对其中的一台虚拟机做验证,将所有磁盘加入RIAD中后,这台虚拟机是可以启动的,但缺盘的情况下启动有问题。因此判断整个RAID处在不缺盘的状态为最佳。
五、验证数据
1、验证虚拟机
针对用户较为重要的虚拟机做验证,发现虚拟机大多都可以开机,可以进入登陆界面。有部分虚拟机开机蓝屏或开机检测磁盘,但是光盘修复之后都可以启动。
部分虚拟机现象开机如下:
图三:
raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)
2、验证数据库
针对重要的虚拟机中的数据库做验证,发现数据库都正常。其中有一个数据库,据用户描述是缺少部分数据,但是经过仔细核对后发现这些数据在数据库中本来就不存在。通过查询 master 数据库中的系统视图,查出原来的所有数据库信息如下:
图四:
raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)
3、检测整个VMFS卷是否完整
由于虚拟机的数量很多,每台都验证的话,所需的时间会很长,因此我们对整个VMFS卷做检测。在检测VMFS卷的过程中发现有部分虚拟机或虚拟机的文件被破坏。列表如下:
图五:
raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)

六、恢复数据
1、生成数据
北亚工程师跟客户沟通并且描述了目前恢复的情况。用户经过对几台重要的虚拟机验证后,用户反应恢复的数据可以接受,接着北亚工程师立即着手准备恢复所有数据。
先准备目标磁盘,使用一台dell 的MD 1200加上11块3T的硬盘组成一个RAID阵列。接着将重组的RAID数据镜像到目标阵列上。然后利用专业的工具UFS解析整个VMFS文件系统。
2、尝试挂载恢复的VMFS卷
将恢复好的VMFS卷连接到我们的虚拟化环境中的一台ESXI5.5主机上,尝试将其挂载到的ESXI5.5的环境中。但是由于版本(客户的ESXI主机是5.0版本)原因或VMFS本身有损坏,导致其挂载不成功。继续尝试使用ESXI的命令挂载也不成功,于是放弃挂载VMFS卷。

七、移交数据
由于时间紧迫,先安排北亚工程师将MD 1200 阵列上的数据带到用户现场。然后使用专业工具”UFS”依次导出VMFS卷中的虚拟机。
1、将MD 1200阵列上的数据通过HBA卡连接到用户的VCenter服务器上。
2、在VCenter服务器安装“UFS”工具,然后使用“UFS”工具解释VMFS卷。
3、使用“UFS”工具将VMFS卷中的虚拟机导入到VCenter服务器上。
4、使用VCenter的上传功能将虚拟机上传到ESXI的存储中。
5、接着将上传完的虚拟机添加到清单,开机验证即可。
6、如果有虚拟机开机有问题,则尝试使用命令行模式修复。或者重建虚拟机并将恢复的虚拟机磁盘(既VMDK文件)拷贝过去。
7、由于部分虚拟机的数据盘很大,而数据很少。像这种情况就可以直接导出数据,然后新建一个虚拟磁盘,最后将导出的数据拷贝至新建的虚拟磁盘中即可。
统计了一下整个存储中虚拟机的数量,大约有200台虚拟机。目前的情况只能通过上述方式将恢复的虚拟机一台一台的恢复到用户的ESXI中。由于是通过网络传输,因此整个迁移的过程中网络是一个瓶颈。经过不断的调试以及更换主机最终还是无法达到一个理想的状态,由于时间紧张,最终还是决定在当前的环境迁移数据。

八、数据恢复总结
1、故障总结
所有磁盘坏道的规律如下表:
raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)

经过仔细分析后得出坏道的结论如下:
-除去SN:YHJ6LEUD上的一个自然坏道外,其余坏道均分布于RAID-6的Q校验块中。
-坏道区域多数表现为完整的256个扇区,正好当时创建RAID-6时的一个完整RAID块大小。
-活动区域表现为坏道,非活动区域坏道有可能不出现,如热备盘,上线不足10%,坏道数量就比其他在线盘少(热备盘的镜像4小时完成,其他有坏道盘大概花费40小时)
-其他非Q校验区域完好,无任何故障。
结论:
通常情况,经如上坏道规则表现可推断,坏道为控制器生成Q校验,向硬盘下达IO指令时,可能表现为非标指令,硬盘内部处理异常,导致出现规律性坏道。
2、数据恢复总结
数据恢复过程中由于坏道数量太多,以致备份数据时花费了很长世间。整个存储是由坏道引起的,导致最终恢复的数据有部分破坏,但不影响整体数据,最终的结果也在可接受范围内。
整个恢复过程,用户方要求紧急,我方也安排工程师加班加点,最终在最短的时间内将数据恢复出来。后续的数据迁移过程中由我方工程师和用户方工程师配合完成。

九、项目成员 
raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)

转载于:https://blog.51cto.com/sun510/2079772

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈新技术学习方法-如何学习一门新技术新编程语言

学习一门编程语言或者编程技术的方式基本上是这样一个流程: 1,对学习这门语言或者技术的必要性进行评估。比如你是工作需要,或者兴趣所至,甚至是为了把妹。这个必要性关系到你要学多深入,需要学习多长时间。 比如我想…

图像识别自动化android,Android自动化测试

写在开头:Android UI 自动化测试推荐网易的Airtest,也是谷歌推荐的,操作简单,而且基于图像识别根据用户操作界面自动生成Python测试代码JUnit单元测试testImplementation junit:junit:4.12image.pngimage.png使用gradle命令进行单…

如何重构“箭头型”代码

本文主要起因是,一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论(微博原文),在微博上大家有各式各样的问题和想法。按道理来说这些都是编程的基本功,似乎不太值得写一篇文章,不过我觉得很多…

Django博客--4.开发博客文章详情页

文章目录0.思路引导1.设计文章详情页的 URL2.获取文章的URL3.编写 detail 视图函数4.编写详情页模板5.更改主页中跳转详情页的地址链接6.模板继承--抽取base.html7.模板继承--修改 index.html使其继承base.html8.模板继承--修改detail.html使其继承base.html9.结果展示0.思路引…

10、并发容器,ConcurrentHashMap

Java 提供了不同层面的线程安全支持。在传统集合框架内部,除了 Hashtable 等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用 Collections 工具类提供的包装方法,来获取一个同步的包…

程序员的本质

Computers are useless. They can only give you answers. – Picasso计算机没有什么作用。他们只能告诉你答案。——毕加索很多人(包括我岳母)认为计算机变得如此智能,所以在不久的未来将不再需要程序员。另外一些人认为程序员是天才&#x…

剖析管理所有大数据组件的可视化利器:Hue

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 日常的大数据使用都是在服务器命令行中…

Django博客--5.让博客支持 Markdown 语法和代码高亮

文章目录0.前言1.安装 Python Markdown2.在 detail 视图中解析 Markdown3.safe 标签4.代码高亮5.效果展示0.前言 Markdown 是一种 HTML 文本标记语言,只要遵循它约定的语法格式,Markdown 的解析工具就能够把 Markdown 文档转换为标准的 HTML 文档&#…

Diango博客--6.Markdown 文章自动生成目录

文章目录0.思路引导1.在文中插入目录2.在页面的任何地方插入目录3.美化标题的锚点 URL0.思路引导 Markdown 在解析内容的同时还可以自动提取整个内容的目录结构,本文内容将从以下几个方面展开: 1)在文中插入目录; 2)在…

Java中对象和引用的理解

2019独角兽企业重金招聘Python工程师标准>>> 偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆。12一、对…

android怎样封装,如何封装属于自己的博客网站安卓APP 源码家园

说实话我今天在写这个文章的时候是我使用易语言(E4A\易安卓)的第一天,我也是易小白,但是的确可以用!我为什么写这个文章呢?因为之前我也想封装自己的网站,然后去网上找的在线封装生成APP,果然能封装好了&am…

Diango博客--7.自动生成文章摘要

文章目录0.思路引导1.方法一:覆写 save 方法2.方法二:使用 truncatechars 模板过滤器0.思路引导 博客文章的模型有一个 excerpt 字段,这个字段用于存储文章的摘要。 若在 django admin 后台手动为文章输入摘要,每次手动输入摘要…

特斯拉股价暴跌,疯狂烧钱是否真的能够带来高额回报?

“疯狂烧钱”并不能成为公司持续亏损的理由,反而可能成为公司升级转型的关键所在。 上周三,特斯拉发布第四季度财报,其后特斯拉CEO马斯克在电话会议上表示,特斯拉亏损收窄,营收同比增长88%,但与此同时其首…

Diango博客--8.解锁博客侧栏

文章目录0.思路引导1.[最新文章] 模板标签2.[归档] 模板标签3.[分类] 模板标签4.[标签云] 模板标签5.使用自定义的模板标签0.思路引导 博客侧边栏有四项内容:最新文章、归档、分类和标签云,效果展示如下: 这些内容相对比较固定和独立&…

十五、详述 IntelliJ IDEA 插件的安装及使用方法

正文 首先,进入插件安装界面: Mac:IntelliJ IDEA -> Preferences -> Plugins;Windows:File -> Settings -> Plugins.标注 1:显示 IntelliJ IDEA 的插件分类, All plugins:显示 Inte…

面向数据流的设计方法

面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。 在软件工程的需求分析阶段,信息流是一个关键考虑。通常用数据流图描绘信息在系统中加工和流动的 情况。面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图…

AI研究的盲点:无解的神经网络内在逻辑

论人工神经网络内在逻辑的研究历史及现状。 伴随着大数据,人工智能(AI)在沉寂了多年之后,又迎来了新的高潮。在这场涉及大部分科学的革命中,人工神经网络释放了人工智能(AI)。但科学家们发现&a…

Diango博客--9.归档、分类和标签页

文章目录0.思路引导1.回顾2.归档页面3.分类页面4.标签页面0.思路引导 侧边栏已经正确地显示了最新文章列表、归档、分类、标签等信息,现在来完善归档、分类和标签功能。 当用户点击归档下的某个日期、分类栏目下的某个分类或者标签栏目下的某个标签时,…

android studio1.2.6,1.2.2 使用Android Studio开发Android APP | 菜鸟教程

写在前面本节将介绍如何使用Android Studio开发Android APP,和前面Eclipse ADT SDK搭建Android开发环境一样,本节也只是介绍一些基本东西,深入的,比如快捷键,小技巧等会再另一篇文章中详细地介绍!1.下载A…

UPS开始尝试“货车+无人机”的投递方式,不必再担心快递员离职了

继亚马逊“空中仓库”,无人机送货再现新形式。 作为世界上最大的快递承运商与包裹递送公司,UPS当然也没有放过“送货无人机”这一新颖业务。与亚马逊推出“空中仓库”的理念类似,UPS并没有选择让无人机从仓库直接起飞,而是将之与…