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

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出现。只得现场写程序收集有用的指针块:
图一:(图片来源于北亚数据恢复)

由于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 文件,通过多次组合,最终这三台重要的虚拟机的虚拟磁盘都已完全恢复。将恢复出的网页数据和数据库数据上传到一新构建的系统中,拉起应用,数据完全无问题。
图二:(图片来源于北亚数据恢复)

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

时间: 2024-10-09 09:33:51

FreeNAS+ESXi5数据丢失的恢复方法的相关文章

MySQL数据库的root口令恢复方法总结

MySQL数据库的root口令恢复方法总结 方法一 1. 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的: 2. 重命名自己的mysql的data目录下的mysql文件夹为oldmysql: 3. 将源码包中data目录下的mysql目录复制到你的mysql的data目录下: 4. 重新启动mysql,现在mysql的授权关系同全新安装的一样,空密码登陆,然后自行调整授权: 5. 打开oldmysql这个库检查到底出现了什么问题 : 6. 如果有备份对系统中原有的数据库进行完

联机日志文件损坏后的恢复方法

恢复 昨天遇到一个Oracle数据库的问题,环境是:Windows2000+Oracle9i.使用windows关机重启后,oracle无法连接,当用startup启动时总是报ORA-00333错误,检查Oracle文档对此问题的描述,如下:ORA-00333 redo log read error block string count stringCause: An I/O error occurred while reading the log described in theaccompa

SQL Server非正常删除日志文件(ldf)恢复方法

server|恢复 事务日志文件(ldf)在SQL Server服务未启动的情况下被删除(SQL Server在工作状态下是无法删除日志文件),这种情况下启动SQL服务后,相应数据库即被标志成置疑(suspend)状态 按目前本人实验结果,恢复方法如下:1,分离被置疑的数据库,可以使用sp_detach_db2,附加数据库,可以使用sp_attach_single_file_db SQL2K下可以直接在EM环境下完成这些操作,如果是SQL7则需要在QA里完成操作. 本人在SQL Server20

网站首页被K的原因及其恢复方法

最近在推一把上面回答朋友问题发现最近提问询问"首页被K"的人比较多,学朋自己的站也有几个首页被干掉了.具体是什么原因及其怎么恢复首页收录呢请往下看. 首页被K症状: 1.首页从百度消失. 2.首页排名消失 3.内页收录不变(或有小量下降) 4.内页排名不变(或有所下降 或 全站排名下降) 以上问题均是站长遇到的问题,遇到以上问题学朋想说的是 (1.)平常心对待. 急也没用,急了反而会急功近利帮倒忙.学朋之前一朋友网站首页被K了后急了,一天就给自己网站添加了7个友情链接,想让其快速恢复,

SYBASE ASA数据库恢复方法

SYBASE ASA数据库当遇到不正常关机时,很容易出现异常,如:表或索引出错,麻烦的是用drop table t_name删除表时数据库就会DOWN下.下面是我常用的两种恢复方法: 一.用备份数据库恢复: 1.用备份数据库启动 2.翻译出错数据库的日志(可能有多个文件) 3.按顺序执行翻译出的日志文件,read 文件 二.没有备份数据库 现象:set rowcount 10 select * from table_name时数据down下 用dbvalid检查此表时报错 检查处理方法:1.删除

思科路由器的经典密码恢复方法

使用思科路由器的用户很多,同时也会出现很多问题,密码遗忘或丢失是用户很常见的问题,于是我研究了一下思科路由器密码恢复的两种方法,在这里拿出来和大家分享一下,希望对大家有用.在Cisco路由器忘记或丢失enable密码的情况时,一共有两种方法恢复,取决于你使用的路由器是哪一系列产品. 第一种思科路由器密码恢复方法: 使用这种方法可使下列思科路由器密码恢复:Cisco 2000系列.2500系列.3000系列.使用680x0 Motorol a CPU的Cisco 4000系列.运行10.0版本以上

Linux下MySQL数据库二进制日志恢复方法

如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据."mysqlbinlog:用于处理二进制日志文件的实用工具". 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径.如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的形式给出.启用二进制日志的选项为-- log-b

linux rm误删除数据库文件的恢复方法

1.首先测试rm 误删除数据库文件 [oracle@primary dbwdn]$ ll total 2153164 -rw-r----- 1 oracle dba 8536064 Nov 27 21:50 control01.ctl -rw-r----- 1 oracle dba 8536064 Nov 27 21:50 control02.ctl -rw-r----- 1 oracle dba 8536064 Nov 27 21:50 control03.ctl -rw-r----- 1 o

win7系统玩游戏发现屏幕变窄的恢复方法

  win7系统玩游戏发现屏幕变窄的恢复方法 1.Win键+R键,打开运行窗口,输入regedit 回车,这样就打开了注册表编辑器; 2.然后,定位到以下位置:HKEY_LOCAL_MACHINESYSTEMControlSet001ControlGraphicsDriversConfiguration在Configuration; 3.这上面右键,选择查找,输入Scaling,在右框找到scaling,右键scaling修改将数值改为3即可(原值是4),这种方法基本通杀所有Windows7下游