FreeNAS+ESXi5数据丢失的恢复方法

简介: 在一次存储突然断电之后,ESXi系统连不上存储,管理员在FreeNAS中发现UFS2文件系统出现问题,随后管理员用fsck 修复好了文件系统。 此时ESXi 系统可以连上存储,但发现ESXi系统未能识别到原来的数据存储和VMFS文件系统,管理员格式化VMFS后发现里面空无一物。

FreeNAS+ESXi5数据恢复过程记录

【背景简介】

   故障发生在苏州的一家公司,此公司使用一种廉价的存储模式,用iSCSI方式来达到FC SAN的功能。物理存储构架在一台 DELL 服务器上,使用 FreeNAS 来做 iSCSI,然后使用两台 DELL 服务器做 ESXi5.0 的的虚拟化系统。

FreeNAS 层为UFS2文件系统,整个存储建一个稀疏模式的文件,挂给ESXi5.0 系统。ESXi系统内跑有5台虚拟机,其中有三台最为重要。一台windows2003系统虚拟机是此公司在当地的门户网站。使用 ASP.net和 PHP 混合构架,使用数据库为 SqlServer2005和 mysql 5.1 。一台为FreeBSD 系统,跑有 Mysql数据库,供其它多台虚拟机使用。一台为windows2003服务器,存储此公司新开发的程序代码。
【故障现象】
在一次存储突然断电之后,ESXi系统连不上存储,管理员在FreeNAS中发现UFS2文件系统出现问题,随后管理员用fsck 修复好了文件系统。 此时ESXi 系统可以连上存储,但发现ESXi系统未能识别到原来的数据存储和VMFS文件系统,管理员格式化VMFS后发现里面空无一物。
【数据恢复】
分析故障,最大化利用可用信息。开始抽丝剥茧:
应用构架层次:FreeNAS(UFS2文件系统–> 一个大的稀疏模式的文件) –> ESXi 5.0(VMFS文件系统层) -> 单台虚拟机的虚拟磁盘 (windows-NTFS文件系统/FreeBSD-UFS2文件系统)。
第一步是镜像 FreeNAS 层,然后分析整个存储,发现就一个900多GB的大文件,文件名: iscsidata。通过UFS2文件系统的二进制结构,定位到 iscsidata 文件的Inode数据,发现此文件被重建过,inode指针指向的数据量很少。FreeNAS层无法解决,就无法进入到下一步的 VMFS层分析。
收集UFS2文件系统的重要结构:
块大小:16KB
Segment 大小:2KB
柱面组大小:188176 KB
UFS2一个数据指针占 8字节,一个块可存储 2048个数据指针。那么一个二级指针块则可存储:2048204816KB= 64GB 数据。一个三级指针块则可存储 64GB*2048= 128TB 数据。如果能找到 iscsidata 文件的三级指针块就能解决 FreeNAS层问题。但iscsidata文件重建过,过程和大小都和原始的一样,估计有部分指针块已被覆盖。原始 iscsidata 文件的 inode和新建的 iscsidata 文件的 inode 就在一个位置,尝试进行搜索,无其它有用的inode出现。只得现场写程序收集有用的指针块:
图一:(图片来源于北亚数据恢复)
1

由于iscsidata文件是使用稀疏模式,收集条件只能放宽,收集到了大量三级指针块和二级指针块。对收集到的所有三级指针块进行分析,都是无效的,无iscsidata文件使用的三级指针块,估计在新建iscsidata文件时被新的覆盖(新的iscsidata文件在挂载到ESXi5.0后有个VMFS格式化过程,而 ESXi5.0 使用GPT分区,GPT分区会在磁盘最后写入冗余的GPT头和分区表信息数据,这样会使用iscsidata文件的三级指针块)。
现只能分析收集到的二级指针块,对有大量的二级指针块的指向数据进行DUMP,然后再从磁盘中的数据定位到二级指针。这样得到大量DUMP的数据。
开始分析 VMFS 层:
重格式化过VMFS,和原始UFS2的指针已丢失,造成VMFS元文件已基本上不可用,无重要的参考信息,所幸虚拟机都无快照,仍可恢复。通过单台虚拟机层(windows(NTFS)和 FreeBSD(UFS2)系统的文件系统结构),向上定位到VMFS层,在通过VMFS层定位到DUMP出的单个64GB 文件,通过多次组合,最终这三台重要的虚拟机的虚拟磁盘都已完全恢复。将恢复出的网页数据和数据库数据上传到一新构建的系统中,拉起应用,数据完全无问题。
图二:(图片来源于北亚数据恢复)
2

【恢复结果】
耗时4天,最终数据恢复成功。

相关文章
|
移动开发 JavaScript 前端开发
webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发
这篇文章主要介绍了如何通过配置Webpack的插件,如HtmlWebpackPlugin、uglifyjs-webpack-plugin和webpack-dev-server,来简化前端开发流程。
736 0
webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发
|
移动开发 运维 网络协议
运维必备 | Linux netstat命令详解
运维必备 | Linux netstat命令详解
706 8
|
Linux 开发工具 Python
【Deepin 20系统】Linux系统从零打造完美VScode for Python环境
如何在Deepin 20系统中从零开始配置一个完美的VScode for Python开发环境,包括安装Anaconda、VScode、必要的插件、汉化、主题和字体设置,以及如何运行和调试Python程序。
756 6
|
存储 数据可视化 网络安全
【最全面】SourceTree使用教程详解(连接远程仓库,克隆,拉取,提交,推送,新建/切换/合并分支,冲突解决,提交PR) (一)
【最全面】SourceTree使用教程详解(连接远程仓库,克隆,拉取,提交,推送,新建/切换/合并分支,冲突解决,提交PR)
4828 0
|
资源调度 算法 定位技术
|
监控 安全 调度
【虚拟化】系统虚拟化的主要功能和分类
【虚拟化】系统虚拟化的主要功能和分类
1214 0
|
Java 数据库连接
Java中的静态代码块深入解析
Java中的静态代码块深入解析
402 0
|
算法 C++ 开发者
【C/C++ 数据结构 】图顶点个数和边的关系
【C/C++ 数据结构 】图顶点个数和边的关系
1461 0
|
机器学习/深度学习 存储 人工智能
性价比提升15%,阿里云发布第八代企业级计算实例g8a和性能增强型实例g8ae
5 月 17 日,2023 阿里云峰会·常州站上,阿里云正式发布第八代企业级计算实例 g8a 以及性能增强性实例 g8ae。两款实例搭载第四代 AMD EPYC 处理器,标配阿里云 eRDMA 大规模加速能力,网络延时低至 8 微秒。其中,g8a 综合性价比平均提升 15% 以上,g8ae 算力最高提升 55%,在 AI 推理与训练、深度学习、高性能数据库等应用场景性能提升显著。
|
监控 Linux Shell
Linux 服务器 性能监控脚本
Linux 性能监控 shell 脚本
558 0

热门文章

最新文章