Netapp数据恢复—Netapp存储误删除lun的数据恢复过程

2023-10-13 16:04

本文主要是介绍Netapp数据恢复—Netapp存储误删除lun的数据恢复过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Netapp存储数据恢复环境:
北京某公司一台netAPP存储,72块SAS硬盘划分了若干个lun。

Netapp存储故障:
工作人员误操作删除了12个lun。

Netapp存储数据恢复过程:
1、将故障存储中所有磁盘编号后取出,以只读方式做全盘镜像后按照编号还原到原存储中,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
2、基于镜像文件分析底层数据,找到盘头位置的超级块。北亚企安数据恢复工程师通过分析超级块信息获取磁盘组的起始块信息、磁盘组名称、逻辑组起始块号、raid编号等信息。
分析超级块:

通过分析得知每个数据块占8个扇区,数据块后附加64字节数据块描述信息。根据这些信息判断出作为校验盘的磁盘,在后续的数据恢复过程中需要踢出这些磁盘。
校验块描述信息样例:

3、依据每块磁盘8号扇区的磁盘信息以及磁盘末尾的RAID盘序表确定盘序。首先确定各个磁盘所属aggr组,然后再判断组内盘序。数据指针跳转时不考虑校验盘,只需要确定数据盘的盘序即可。
分析盘序表:

Netapp的节点分布在数量众多的数据块内,在数据块内又被统一组织为节点组。每个节点组的前64字节记录一些系统数据,之后用192字节为一项,记录各个文件节点。节点根据用户级别可分为两类:系统文件节点(MBFP)和用户文件节点(MBFI),数据恢复一般只需要MBFI节点组。
服务器节点样例图:

头部信息64字节,此头部为数据文件的节点文件块头部,大小为64字节。
根据更新序列值获取到最新节点。解析节点中节点类型、逻辑块号、文件数量、文件大小、所占块数量和数据指针。
获取节点在节点文件中的逻辑块号,从0开始计数。

4、获取目录项,根据其节点编号找到对应节点。
获取服务器内对应节点截图:

5、通过北亚企安自主开发的程序提取服务器数据。
a、扫描节点信息。
扫描服务器节点信息:

节点扫描类:

节点扫描程序完整流程:

循环扫描完毕之后将所有扫描到的MBFP、MBFI和DOC数据块分别写入到三个文件内,用于后续处理。
b、将节点信息导入到数据库。
此模块主要负责将ScanNode扫描到的MBFI和MBFP、Dir存入数据库以备后续使用。
MBFI导入数据库整体流程:

函数执行完毕后查看数据库,得到如下信息:
节点导入信息:

Netapp在更改inode节点时不会直接覆盖而是重新分配inode进行写入。单个文件的节点node_uid是唯一的不会改变,mbfi_usn会随着节点的变化而增大(正常情况下提取某个文件时使用usn最大的节点)。一般情况下存储划分出的单个节点会作为LUN映射到服务器使用,根据file_size可以确定这个文件的大小,按照文件大小分组后再选取usn最大值的节点,跳转到MBFI文件的offset值偏移位置,取出节点。
节点样例图示:

c、提取文件。
在获取到要提取的文件的Node之后,开始提取块设备文件。
提取块设备文件:

初始化完毕后,开始提取文件的各级MAP,在本次提取过程中文件大小均大于1T,MAP层级为4,所以需要提取4次。第一级MAP默认只占用1个块,所以在程序内直接提取,后三级MAP在GetAllMap函数内进行提取。通过块号计算数据块位置时,由于NetApp使用JBOD组织LVM,直接用块号除以每块磁盘上的块数可得到当前块所在的磁盘序号(计算机整数除法,丢弃小数部分);再使用块号取余块数,得到数据块在此磁盘上的物理块号,物理块号乘以块大小,得到数据块偏移位置。

6、解析块设备文件系统。
故障存储块设备中5T大小的lun使用的是aix小机的jfs2文件系统。因此要解析jfs2文件系统,提取里面的数据库备份文件。
a、找到记录lvm描述信息的扇区,解析pv大小和pv序号;找到vg描述区,解析lv数和pv数;找到pv描述区,解析pp序号和pp数。
解析文件系统块信息:

LV类型及LV挂载信息区域:

b、解析8个1T大小lun组成的oralce ASM文件系统,提取其中的数据库文件。
添加8个lT的lun:

解析asm文件系统,提取出数据库文件:

7、对提出的数据进行检测,没有发现异常。交由用户方进行验证,经过用户方相关工作人员的共同验证,确认恢复出来的数据完整有效。本次数据恢复工作完成。

这篇关于Netapp数据恢复—Netapp存储误删除lun的数据恢复过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204355

相关文章

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知