【服务器数据恢复】Hyper-V虚拟机数据恢复案例

news2024/11/24 22:47:07

服务器数据恢复环境:
WinServer操作系统服务器,部署Hyper-V虚拟机环境;
虚拟机的硬盘文件和配置文件存储在一台存储设备中;
该存储设备配置:一组4盘raid5阵列存放虚拟机数据+单块盘存放虚拟机数据备份。

服务器故障:
由于MD3200存储中虚拟机的数据文件丢失,导致整个Hyper-V服务瘫痪,虚拟机无法使用。

服务器故障检测:
1、检测物理故障,结果没有发现物理故障问题,所有硬盘均正常。
2、检测操作系统:操作系统正常运行,未发现错误进程。
3、检测丢失数据硬盘的文件系统:打开正常,检测无病毒,排除病毒破坏。继续分析丢失数据硬盘的文件系统,发现文件系统的元文件创建时间(即文件系统的创建时间)与数据丢失的时间相同。这种情况意味着文件系统被人为重写,即分区被格式化了。
4、检查系统日志:系统日志数据丢失之前及当天的系统日志已被清空,但是审核日志和服务日志还在,恰巧格式化分区的操作只记录在系统日志中。这种情况再次印证这次数据灾难是人为导致的。
5、尝试恢复系统日志,从底层数据查看发现需要恢复的系统日志已被新的日志记录覆盖,无法恢复。
6、分析所有分区,发现只有两个分区的文件系统被重新写入新的文件系统。因为两个分区的格式化需要有两个独立的过程,这种针对性的操作再次证明本次数据灾难由人为操作导致。

服务器数据恢复过程:
1、将故障存储设备中所有的硬盘编号取出,以只读方式对所有硬盘做全盘镜像,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始数据造成二次破坏。
备份所有硬盘数据:

 

2、镜像完成后,基于镜像文件分析RAID5磁盘阵列相关信息如条带大小、条带走向等。根据这些信息重组raid5磁盘阵列。

重组RAID5磁盘阵列:

 

打开RAID5磁盘阵列:

 


3、分析硬盘底层数据发现还残留着许多以前文件系统的目录项及文件索引。经过核对发现这些文件索引指向的数据都是用户丢失的文件内容。北亚企安数据恢复工程师编写提取文件索引项的小程序扫描并提取所有文件的文件索引项。

4、分析提取出来的文件索引项,发现这些索引项都是不连续的,大多数都是以16K或8K对齐的。正常情况下文件索引项是连续的,大小为固定的1K,每个文件索引项对应一个文件或目录。而扫描出来的这些不连续并且不完整的文件索引项是无法正常索引到文件内容的,因此需要处理这些扫描出来的文件索引项。
在扫描出来的文件索引项中搜索” .VHD”,能找到一个” .VHD”的文件记录,然后将这个片连续的文件索引项提取出来。
接着再查看这段提取出来的文件索引项中是否有指向下一段文件索引项的记录或者H20属性。如果有则根据文件索引项中的特征去匹配下一段文件索引项,如果没有则跳过这段文件索引项。
根据以上方法能找到了大多数的文件索引项片段,而缺失的文件索引项片段有可能被破坏了,可以从数据备份盘中去查找缺失的文件索引项片段,最终可以找到大部分的文件索引项。

文件索引项截图:

 

5、找到所有能找到的文件索引项之后,根据文件索引项的编号将其拼接成整个目录项结构。以下是搜索到的部分文件索引项,虽然小部分文件索引项被破坏,但这些找到的文件索引项已经足够拼接整个目录结构。

扫描到的文件索引项碎片:

 

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

解释出来的目录结构:

 

 

为了验证数据是否正确,将其中一个最新的VHD文件拷贝到一台支持附加VHD的服务器上,尝试附加此VHD,结果附加成功。检查VHD中最新的数据的完整度,没有发现问题后将所有数据恢复到一块硬盘中。

恢复出来的所有虚拟机数据文件:

 

7、在一台测试服务器上搭建Hyper-V环境,将恢复出来的虚拟机文件连接到这台服务器上,通过导入虚拟机的方式将恢复出来的数据都迁移到新的Hyper-V环境,然后让用户亲自验证所有虚拟机。

虚拟机导入的过程:

 

8、用户验证所有虚拟机没有问题后,将所有数据拷贝至用户准备好的服务器中。用导入的方式将虚拟机导入到用户准备好的Hyper-V环境中。导入过程中和导入后都没有报错,尝试启动所有虚拟机都没有发现问题。本次数据恢复工作完成。

 

 

 

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

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

相关文章

附录1-pytorch目标检测

源码来自作者Bubbliiiing,我对参考链接的代码略有修改,网盘地址 链接:百度网盘 请输入提取码 提取码:bfvs 目录 1 参考 2 环境 3 数据集准备 3.1 VOCdevkit/VOC2007 3.2 model_data/voc_classes.txt 3.3 voc_annota…

【Java|多线程与高并发】进程与线程的区别与联系

文章目录什么是进程什么是线程上下文切换多线程一定比串行执行快吗进程与线程的区别与联系什么是进程 进程的定义:进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存&a…

自学前端最容易犯的10个的错误,入门学前端快来看看

在前端学习过程中,有很多常见的误区,包括过度关注框架和库、缺乏实践、忽视算法和数据结构、忽视浏览器兼容性、缺乏团队合作经验、忽视可访问性、重构次数过多、没有关注性能、缺乏设计知识以及没有持续学习等。要避免这些误区,应该注重基础…

Lambda表达式详细操作

一、基础语法 形态一:匿名内部类 Runnable runnable new Runnable() {Overridepublic void run() {System.out.println(Thread.currentThread().getName());} };runnable.run();形态二:完整的Lambda表达式 口诀:复制小括号,写…

消息中间件----内存数据库 Redis7(第1章 Redis 概述)

第1章 Redis 概述1.1 Redis 简介Redis,Remote Dictionary Server,远程字典服务,由意大利人 Salvatore Sanfilippo(又名Antirez)开发,是一个使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、…

【路径规划】基于Dijkstra算法及Floyd算法的通信与网络路径规划(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Dubbo相关问题合集

Dubbo相关问题合集 java.io.StreamCorruptedException: invalid stream header: 77D30000 ; Decode rpc invocation failed 现象 2023-02-14 09:49:32.251 [NettyServerWorker-4-2] [] [WARN] o.a.d.r.exchange.codec.ExchangeCodec-130 [DUBBO] Skip input stream 634, du…

go gin学习记录2

环境 环境:mac m1,go version 1.17.2, goland, mysql 昨天学习了安装和基本的参数,路由使用,今天接着学习一下数据库的操作。 建立数据库 测试数据库操作,需要先准备一个测试用的数据库&…

【自适应软件开发过程思想】自适应软件开发 - 简介 Adaptive Software Development Introduction(中英文)

目录 ASWD 核心思想 什么是敏捷(Agile)? 敏捷宣言(Agile Manifesto) 敏捷的特征

微前端指北

微前端概述 Techniques, strategies and recipes for building a modern web app with multiple teams that can ship features independently. – Micro Frontends 什么是微前端 微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 …

GAN和CycleGAN

文章目录1. GAN 《Generative Adversarial Nets》1.1 相关概念1.2 公式理解1.3 图片理解1.4 熵、交叉熵、KL散度、JS散度1.5 其他相关(正在补充!)2. Cycle GAN 《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Ne…

Spring事务Spring整合MyBatis

Spring整合MyBatis 在整合之前需要保证mybatis、springframework、mybatis-spring、spring-jdbc的包都已经导入 并且要根据官网提示保证mybatis、springframework、mybatis-spring版本相对应&#xff0c;否则会产生冲突报错 maven依赖如下&#xff1a; <!-- Spring Web…

SAS应用入门学习笔记6

SQL (SAS): Features&#xff1a; 1&#xff09;不需要在每个query中重复调用每个SQL&#xff1b; 2&#xff09;每个statement都是独立去完成的&#xff1b; 3&#xff09;我们是没有proc print和proc sort语句的&#xff1b;&#xff08;order by&#xff09; key synta…

vue3的shallowReactive和shallowRef,readonly和shallowReadonly

shallowReactive&#xff1a;只处理对象最外层属性的响应式&#xff08;浅响应式&#xff09; <template><span>姓名&#xff1a;{{name}}</span><span>年龄&#xff1a;{{age}}</span><span>职业&#xff1a;{{salary.job.num}}</spa…

JAVA SE复习(第5章 面向对象(上))

本文笔记来自硅谷柴林燕老师的笔记 只为自己看笔记方便使用 不做他用5.1 面向对象编程5.1.2 类和对象1、什么是类类是一类具有相同特性的事物的抽象描述&#xff0c;是一组相关属性和行为的集合。属性&#xff1a;就是该事物的状态信息。行为&#xff1a;就是在你这个程序中&am…

springboot集成kafka

选择特定版本spring-kafka官方使用文档 进入官网&#xff1a;https://spring.io/ 选择自己使用版本 点进去后按照 /2.7.0/reference/html/ 路径点进去就能看到想要版本的文档了

C++实现线程池

C实现线程池一、前言二、线程池的接口设计2.1、类封装2.2、线程池的初始化2.3、线程池的启动2.4、线程池的停止2.5、线程的执行函数run()2.6、任务的运行函数2.7、等待所有线程结束三、测试线程池四、源码地址总结一、前言 C实现的线程池&#xff0c;可能涉及以下知识点&#…

JVM - 垃圾回收

目录 垃圾回收基础和根搜索算法 垃圾回收概述 根搜索算法 引用分类 垃圾回收基础(跨代引用、记忆集、写屏障、判断垃圾的步骤、STW) 跨代引用 记忆集(Remembered Set) 写屏障 判断是否垃圾的步骤 GC类型 Stop-The-World 垃圾收集类型 判断类无用的条件 垃圾回收算…

Mybatis源码(2) - SqlSessionTemplate的介绍及创建过程

0. 前言1. Spring对SqlSessionTemplate的管理1.1. SqlSessionTemplate的创建&#xff1a;1.2. MapperProxy中sqlSession的来源&#xff1a;2. SqlSessionInterceptor中的getSqlSession0. 前言 众所周知&#x1f60f;:MyBatis通过SqlSessionFactory 创建SqlSession去调用Executo…

在VMware17 Pro中设置创建虚拟机Ubuntu 20

在VMware17 Pro中设置创建虚拟机Ubuntu 200 前言1 安装Ubuntu 20步骤0 前言 书接上回&#xff0c;安装好了VMware17 Pro之后&#xff0c;就是安装虚拟机了&#xff0c;前提是下好了系统安装包&#xff0c;以Ubuntu 20为例 1 安装Ubuntu 20步骤 首先点击创建新的虚拟机 新建…