当前位置: 首页 > news >正文

服务器数据恢复—LeftHand存储中raid5阵列多块磁盘离线的数据恢复案例

LeftHand存储支持RAID5、RAID6、RAID10磁盘阵列,同时还支持卷快照,卷动态扩容等。下面简单聊一下LeftHand存储的结构和一个LeftHand p4500存储中磁盘阵列数据恢复案例。
服务端:

客户端:

LeftHand存储结构:
Lefthand存储有物理磁盘、逻辑磁盘、逻辑卷三个级别,多个物理磁盘组成一个逻辑磁盘,也就是RAID磁盘阵列。在RAID之上,将不同RAID组成一个大空间,将大空间中不同的区域组成一个卷。

Lefthand存储中的卷是由不同RAID中的多个不连续的片段组成,存放用户的数据,记录这些片段的MAP存放在RAID前面的一部分空间。RAID是Lefthand存储能识别的最小单元,大多数情况下LeftHand存储采用的是RAID5阵列或RAID6阵列。Lefthand存储中记录的数据是不连续的。如果是采用的是RAID5阵列或RAID6阵列,那么物理磁盘中还包括校验数据。

LeftHand P4500存储数据恢复案例
一台LeftHand P4500存储因raid故障导致存储不可用,为raid更换磁盘强制上线后,存储仍然不可用。
该存储中的磁盘阵列:

1、将故障存储中所有磁盘编号后取出,由硬件工程师对所有硬盘进行检测,没有发现有硬盘存在硬件故障。将所有磁盘以只读方式进行扇区级全盘镜像,镜像完成后将所有磁盘按照编号还原到故障存储中,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
2、基于镜像文件分析所有硬盘底层数据。经过分析发现RAID是一个双循环RAID5阵列,第一组RAID正常,第二组RAID中多块磁盘掉线。
3、北亚企安数据恢复工程师使用穷举+校验的方法分析出最早掉线的磁盘并踢出,然后根据分析底层数据获取到的raid结构信息重组raid。
*穷举法:假设其中某一块磁盘是最早掉线的,踢掉此盘,重组RAID然后生成全部数据。将数据挂载到P4500上,看数据是否正确。如果数据不正确,再假设另一块盘是掉线的,以此循环。虽然这种方案可行,由于每次重组RAID生成数据的数据时间太长,并且准确性较低。
*穷举+校验:和穷举法一样,假设某个磁盘是最早掉线的,踢掉磁盘后重组RAID,但不是生成全部的数据,而是只生成前面几个G的数据。因为P4500存放的数据的索引表位图位于RAID的前几个G的数据中,只需要查看这个索引表位图的信息是否正确就可以判断此RAID是否正确。如果正确则生成此RAID的数据即可。
4、将生成的数据和第一组完好的RAID一同挂载到P4500上,启动存储,上层卷可用,检查最新文件正常。
5、交由用户方检测,经过用户方仔细检测,确认恢复出来的数据完整可用,认可数据恢复结果。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Profinet 从站转 EtherNet/IP 从站网关
  • volatile关键字的作用
  • 爆改YOLOv8|利用yolov10的PSA注意力机制改进yolov8-高效涨点
  • C# 使用国密SM4加密解密
  • 【如何在MacOS升级ruby版本】
  • 根据子网前缀的长度计算ip范围
  • 搭建数据库启前后端环境
  • Cobalt Strike 4.8 用户指南-第六节-Payload Artifacts和反病毒规避
  • 3分钟带你了解什么是元数据管理
  • 基于Python的网络编程
  • docker安装配置、docker命令
  • git 更改分支名称
  • 公司网站设计方案
  • 【Linux】进程周边:进程概念
  • 给已有的.so库重新封装一个新的库,并能使用新旧库中的函数
  • 《Java编程思想》读书笔记-对象导论
  • angular2开源库收集
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • eclipse的离线汉化
  • Flex布局到底解决了什么问题
  • Java Agent 学习笔记
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JS基础之数据类型、对象、原型、原型链、继承
  • PaddlePaddle-GitHub的正确打开姿势
  • PHP那些事儿
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • rabbitmq延迟消息示例
  • vue数据传递--我有特殊的实现技巧
  • 大数据与云计算学习:数据分析(二)
  • 好的网址,关于.net 4.0 ,vs 2010
  • 力扣(LeetCode)21
  • 力扣(LeetCode)965
  • 使用Swoole加速Laravel(正式环境中)
  • 使用权重正则化较少模型过拟合
  • 通过git安装npm私有模块
  • 微服务框架lagom
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 阿里云服务器如何修改远程端口?
  • ​configparser --- 配置文件解析器​
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • ## 基础知识
  • ###C语言程序设计-----C语言学习(6)#
  • #pragma pack(1)
  • #Z0458. 树的中心2
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (~_~)
  • (1)(1.13) SiK无线电高级配置(六)
  • (20050108)又读《平凡的世界》
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .md即markdown文件的基本常用编写语法
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法