【北亚服务器数据恢复】ZFS文件系统服务器ZPOOL下线的数据恢复案例

服务器数据恢复环境:
服务器中有32块硬盘,组建了3组RAIDZ,部分磁盘作为热备盘。zfs文件系统。

服务器故障:
服务器运行中突然崩溃,排除断电、进水、异常操作等外部因素。工作人员将服务器重启后发现无法进入操作系统。
将故障服务器中所有硬盘编号后取出,经过硬件工程师检测没有发现有硬盘存在硬件故障。将所有磁盘以只读方式进行扇区级镜像,镜像完成后将所有磁盘按照编号还原到故障服务器。基于镜像文件分析底层数据,发现热备盘全部启用。
ZFS文件系统中,池被称为ZPOOL。ZPOOL的子设备包括:块设备、文件、磁盘等等,本案例中将3组RAIDZ作为子设备。
经过分析发现,三组RAIDZ中的两组RAIDZ分别启用热备盘个数为1和3。在启用热备盘后,一组RAIDZ仍出现一块离线盘,另外一组RAIDZ内则出现两块。
故障现场模拟:三组RAIDZ中的两组RAIDZ出现离线盘,热备盘及时上线进行替换;热备盘无冗余状态下一组RAIDZ又出现一块离线盘,另外一组RAIDZ则又出现两块离线盘,ZPOOL进入高负荷状态(每次读取数据都需要进行校验获取正确数据);当另外一组RAIDZ出现第三块离线盘时,RAIDZ崩溃、ZPOOL下线、服务器崩溃。
ZFS管理的存储池与常规存储不同,所有磁盘都由ZFS进行管理。常规RAID存储数据时按照特定的规则组建池,不关心文件在子设备上的位置。ZFS在存储数据时会为每次写入的数据分配适当大小的空间,并计算出指向子设备的数据指针。ZFS的这个特性使得RAIDZ缺盘时无法直接通过校验获取数据,必须将整个ZPOOL作为一个整体进行解析。

服务器数据恢复过程:
1、手工截取事务块数据,北亚企安数据恢复工程师编写程序获取最大事务号入口。
获取文件系统入口:

2、获取到文件系统入口后,北亚企安数据恢复工程师编写数据指针解析程序进行地址解析。
解析数据指针:

3、获取到文件系统入口点在各磁盘上的分布情况后,北亚企安数据恢复工程师手工截取&分析文件系统内部结构。文件系统入口点所在的磁盘组无缺失盘,可直接提取信息。
4、根据ZFS文件系统的数据存储结构找到映射的LUN名称,从而找到其节点。
5、根据ZFS版本编写数据提取程序提取数据。

由于磁盘组内缺盘个数较多,每个IO流都需要通过校验得到,提取速度缓慢。与用户方沟通后得知ZVOL卷映射到XenServer作为存储设备,需要恢复的文件在一个vhd内。
6、提取ZVOL卷头部信息,按照XenStore卷存储结构进行分析,发现该vhd在整个卷的尾部,计算出其起始位置并从此位置开始提取数据。
7、Vhd提取完成后,验证其内部的压缩包、图片、视频等文件,均可正常打开。
8、联系用户方验证数据,验证后确认文件数量与系统自动记录的文件个数完全一致,文件可正常打开。本次服务器数据恢复工作完成。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-29 08:52:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-29 08:52:07       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-29 08:52:07       82 阅读
  4. Python语言-面向对象

    2023-12-29 08:52:07       91 阅读

热门阅读

  1. 租用服务器到底能干什么呢

    2023-12-29 08:52:07       62 阅读
  2. Go语言中的包管理工具之Go Path详解

    2023-12-29 08:52:07       57 阅读
  3. 使用History和location(js的问题)

    2023-12-29 08:52:07       51 阅读
  4. uniapp实现小程序和内嵌webView的互通

    2023-12-29 08:52:07       57 阅读
  5. webpack搭建vue2项目

    2023-12-29 08:52:07       54 阅读
  6. c# 读取文件方式及对比

    2023-12-29 08:52:07       50 阅读
  7. uniapp中globaldata的使用

    2023-12-29 08:52:07       59 阅读
  8. 单例模式(C++)

    2023-12-29 08:52:07       49 阅读
  9. 单例模式的双重检查锁定是什么?

    2023-12-29 08:52:07       51 阅读
  10. 创建型--单例模式

    2023-12-29 08:52:07       63 阅读
  11. C#判断骨龄与生活年龄的比较

    2023-12-29 08:52:07       52 阅读
  12. [云原生] Go web工作流程

    2023-12-29 08:52:07       60 阅读