服务器数据恢复-RAID5上层Hyper-V虚拟机数据恢复案例

服务器数据恢复环境:
一台Windows Server服务器,部署Hyper-V虚拟化环境,虚拟机的硬盘文件和配置文件存放在一台DELL存储中。该存储中有一组由4块硬盘组建的RAID5阵列,用来存放虚拟机的数据文件,另外还有一块大容量硬盘用来存放虚拟机数据文件的备份。

服务器故障&检测分析:
存储中虚拟机的数据文件丢失,Hyper-V服务瘫痪,虚拟机无法使用。
1、对存储进行物理故障检测,未发现存储存在物理故障,存储中所有硬盘均可以正常识别。
2、服务器操作系统工作正常,未发现有出错进程。
3、丢失数据硬盘的文件系统打开正常,杀毒软件检测无病毒。经过分析发现丢失数据硬盘的文件系统元文件创建时间与数据丢失的时间吻合,这种情况表明文件系统被人为重写了,即分区被格式化了。
4、检查系统日志发现数据丢失之前和数据丢失当天的系统日志被清空,审核日志和服务日志却还在。此操作一般是人为的。因为格式化分区操作只记录在系统日志中,这与人为破坏的特征相符。
5、仔细分析硬盘底层数据,发现底层中需要恢复的系统日志已被新的日志记录覆盖,无法恢复。
6、分析操作系统中的所有分区,发现只有存储中的两个分区被重新写入文件系统。因为格式化两个分区需要两个独立的过程,进一步表明数据丢失是人为造成的。

服务器数据恢复方案:
根据前面的的故障分析结果,北亚企安数据恢复工程师敲定了数据恢复方案:
备份用户数据→重组RAID5阵列→查找原文件索引项及对应的数据区→将扫描到的文件索引项碎片拼接成完整的目录结构→根据拼接好的目录项去底层恢复对应的数据→核对数据没问题后恢复所有数据。

服务器数据恢复过程:
1、将故障存储中所有的硬盘编号取出后检测物理故障。经过检测没有发现有物理硬盘存在硬件故障。将每块硬盘以只读方式做全盘镜像备份,备份完成后将磁盘按照编号还原到原存储中。后续的数据分析和数据恢复都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
备份所有硬盘数据:

 

2、基于镜像文件分析条带大小、条带走向等RAID相关信息。根据这些RAID相关信息重组RAID5阵列。
重组RAID:

 
硬盘阵列:

 
3、基于镜像文件分析硬盘底层数据,发现了许多原文件系统的目录项及文件索引残留。经过核对发现这些文件索引指向的数据都是用户丢失的文件内容。北亚企安数据恢复工程师编写提取文件索引项的小程序扫描查找所有存在的文件索引项,提取所有找到的文件索引项。

4、分析扫描到的所有文件索引项,发现索引项都是不连续的,大多是以16K或8K对齐的。正常情况下,文件索引项是连续的且大小为固定的1K,每个文件索引项对应一个文件或目录。而扫描出来的这些不连续且不完整的文件索引项是无法正常索引到文件的内容。经过北亚企安数据恢复工程师的处理后已经能查到大多数的文件索引项片段。缺失的文件索引项片段可能被破坏,可以从数据备份盘中查找缺失的文件索引项片段。
文件索引项截图:

 

5、根据文件索引项的编号将找到的所有的文件索引项拼接成一个完整的目录项结构。
扫描到的文件索引项碎片:

 

6、将拼接好的目录结构替换现有文件系统中的目录结构并修改部分校验值,解释这个目录结构后就可以看到丢失的数据。
解释出来的目录结构:

 

 

7、为了验证数据是否正确,将其中一个较新的VHD文件恢复出来,将其拷贝到一台支持附加VHD的服务器上,尝试附加此VHD,结果附加成功。经过检查确认该VHD数据完整,然后将所有数据恢复到一块硬盘中。
恢复出来的所有虚拟机数据文件:

 

8、在一台测试服务器上搭建Hyper-V的环境。通过导入虚拟机的方式将恢复的数据迁移到Hyper-V环境。然后交由用户验证所有虚拟机是否完整。
导入虚拟机:

 

 

9、用户验证完所有虚拟机没有发现问题。将所有数据拷贝至用户准备好的服务器中,将虚拟机导入到用户准备好的Hyper-V环境中,导入后无报错。尝试启动所有虚拟机都没有问题。

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio实现Spinner下拉列表

效果图 点击下拉列表 点击某一个下拉列表 MainActivity package com.example.spinneradapterpro;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.Spinn…

原型模式与享元模式:提升系统性能的利器

原型模式和享元模式,前者是在创建多个实例时,对创建过程的性能进行调优;后者是用减 少创建实例的方式,来调优系统性能。这么看,你会不会觉得两个模式有点相互矛盾呢? 在有些场景下,我们需要重复…

Java # Spring(2)

一、Spring事物 一、分类 编程式事物:代码中硬编码(不推荐使用) 声明式事物:配置文件中配置(推荐使用) 分类: 基于xml的声明式事物基于注解的声明式事物 二、隔离级别 ISOLATION_DEFAULT&…

Android 视频播放器dkplayer

列表播放如图所示: 一、依赖 //添加RecyclerView的依赖包implementation androidx.recyclerview:recyclerview:1.2.1// 异步加载图片依赖implementation com.squareup.picasso:picasso:2.5.2// 上拉刷新、下来加载依赖implementation com.scwang.smartrefresh:Smart…

mysql之存储过程

目录 一、mysql之存储过程的相关知识 1)存储过程的概念 2)存储过程的优点 二、存储过程的管理 1)创建存储过程 基本格式: 2)调用存储过程 格式: call 存储过程名称 3)查看存储过程 查…

Leetcode-每日一题【剑指 Offer 13. 机器人的运动范围】

题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例…

51单片机学习--红外遥控(外部中断)

需要利用下面这个红外接收头,OUT口会发出红外信号对应的高低电平,由于发送的速度很快,所以需要把OUT引脚接在外部中断引脚上,当OUT一旦产生下降沿,马上进中断,这样响应会更及时。 外部中断引脚位于P3_2和P…

【云原生】kubernetes控制器deployment的使用

目录 ​编辑 1 Controller 控制器 1.1 什么是 Controller 1.2 常见的 Controller 控制器 1.3 Controller 如何管理 Pod 2 Deployment 2.1 创建 deployment 2.2 查看 deployment 2.3 扩缩 deployment 2.4 回滚 deployment 2.5 删除 deployment 1 Controller 控制器 …

条条大路通罗马系列—— 使用 Hiredis-cluster 连接 Amazon ElastiCache for Redis 集群

前言 Amazon ElastiCache for Redis 是速度超快的内存数据存储,能够提供亚毫秒级延迟来支持 实时应用程序。适用于 Redis 的 ElastiCache 基于开源 Redis 构建,可与 Redis API 兼容,能够与 Redis 客户端配合工作,并使用开放的 Re…

【算法篇C++实现】五大常规算法

文章目录 🚀一、分治法⛳(一)算法思想⛳(二)相关代码 🚀二、动态规划算法⛳(一)算法思想⛳(二)相关代码 🚀三、回溯算法⛳(一&#xf…

数据挖掘具体步骤

数据挖掘具体步骤 1、理解业务与数据 2、准备数据 数据清洗: 缺失值处理: 异常值: 数据标准化: 特征选择: 数据采样处理: 3、数据建模 分类问题: 聚类问题: 回归问题 关联分析 集成学习 image B…

区块链学习6-长安链部署:如何创建特定共识节点数和同步节点数的链

正常prepare的时候只支持4 7 13 16个节点个数,想要创建10个节点,其中5个是共识节点,如何实现? 1. 注释掉prepare.sh的这几行: 2. 修改 crytogen的模板文件: 如果是cert模式:chainmaker-crypt…

idea+gradle阅读spring5.2.9源码之源码构建报错解决方案

注意 1、先确保gradle版本和spring、jdk版本对应 本文:gradle:5.6.4/spring 5.2.9/jdk1.8(gradle和jdk都要先安装好,gradle还要配置好本地资源文件路径) 2、原来项目乱了的话,先重新导入下载的源码项目 3、进入源码所在根目录&…

Redis数据库的下载和安装

目录 第一章、Redis数据库的下载和安装1.1)nosql数据库和 Redis 介绍1.2)Windows中下载安装Redis数据库1.3)Linux中安装Redis数据库1.4)Linux中启动redis1.5)Linux中关闭redis 第二章、三种Redis客户端连接Redis数据库…

java代码审计9之XXE

文章目录 1、简介2、 java XXE审计函数3、漏洞3.1、正常的业务3.2、有回显的情况3.3、无回显的情况3.4、修复 之前的文章, php代码审计9之XXE 1、简介 XXE(XML外部实体注⼊,XML External Entity) ,在应⽤程序解析XML输⼊时&…

【Java-16】动态代理的使用方法及原理实现

代理模式:静态代理 目标 了解静态代理模式实现 路径 静态代理概述静态代理案例 静态代理概述 静态代理: 是由程序员创建或工具生成代理类的源码,再编译成为字节码 (字节码文件在没有运行java之前就存在了) 在编译…

深度学习:使用卷积神经网络CNN实现MNIST手写数字识别

引言 本项目基于pytorch构建了一个深度学习神经网络,网络包含卷积层、池化层、全连接层,通过此网络实现对MINST数据集手写数字的识别,通过本项目代码,从原理上理解手写数字识别的全过程,包括反向传播,梯度…

【第一阶段】kotlin语言的Nothing类型

fun main() {show(60) } //两种写法一样 private fun show(num:Int){when(num){//下面这句话不是注释提示,会终止程序-1->TODO("不符合")in 0..59->println("不及格")in 60..89->println("及格")in 90..100->println(&qu…

桥接模式(C++)

定义 将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 使用场景 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型…

idea - 刷新 Git 分支数据 / 命令刷新 Git 分支数据

一、idea - 刷新 Git 分支数据 idea 找到 fetch 选项,重新获取分支数据 二、命令刷新 Git 分支数据 git fetch参考链接 1. 远程Gitlab新建的分支在IDEA里不显示