恢复数据的首要原则是到现象发生第一时间保护现场,停止所有可能的写入操作,然后从业务人员及命令历史、现象本身 等各个角度了解当时发生了什么,做了什么操作,根据不同情况处理。
第二原则是,待恢复的数据如果不恢复将产生多大数据损失,人工成本损失,并结合恢复难度,与业务沟通评估是否值得尝试与如何尝试。
一、现象
一台CentOS release 6.2的虚拟机,在1T大小的数据磁盘/dev/vdb1 写满后,按业务要求添加了一块1T磁盘/dev/vdc。之后业务自行重启服务器后,发现/dev/vdb1分区丢失,只显示/dev/vdb分区。由于里面是人力相关数据,比较重要,而且目前没有备份,业务也能接受我们花费较长时间来尝试修复,于是开始了各种尝试的路程。
blkid
二、尝试过程
1、尝试过fsck.ext4等均无法修复,推测还是需要往修复文件分区方向。另外对有重要数据的磁盘,还是不建议直接fsck,可能导致一些文件数据丢失,建议备份镜像磁盘后对备份磁盘操作。
从历史命令里分析,发现最开始业务部署这台服务器时候,多次格式化过磁盘,如下图,而且格式化后没有重启。按标红方式对另一台虚拟机做同样测试,然后重启服务器能否复现分区丢失现象,说明分区丢失原因主要还是因为不规范的格式化方式导致。
history |grep mkfs.ext4
2、虚拟机里直接dd命令方式做镜像磁盘,速度很慢,咨询了虚拟化存储同事,还是请他们直接从存储方面做了镜像磁盘并请虚拟化值班同事挂载到系统里vdc vdd vde 等多块镜像盘,供恢复实验使用。从虚拟化存储同事了解到,比较建议使用testdisk工具。
三、使用testdisk 尝试恢复数据
1、一般分区丢失testdisk可以直接恢复分区,但对本次的暂时失败,退一步选择把文件拷贝出来的方式。
工具安装步骤:
wget https://forensics.cert.org/cert-forensics-tools-release-el6.rpm
rpm -ivh cert-forensics-tools-release-el6.rpm
yum install testdisk
对具体磁盘执行恢复尝试:
testdisk /dev/vde
如果要恢复LVM中的数据,直接加对应lv路径,比如/dev/mapper/VolGroup00-LogVol03等。
2、选 自动识别到的 None
3、在这一步,按q,退出,然后选择 Analyse 。当只是要恢复被删除的文件时候,在这一步直接选List,然后跳到步骤7.即可。
4、选择快速搜索后,按回车:
5、可以看到报错,然后选择深度搜索,由于磁盘数据太多,扫描一段时间后可以 按回车Stop,只使用当前扫描到的一些,一般情况下建议等扫描自己完成:
6、然后分别选不同的分区,按P,可以看到这里是第3行的分区里有业务对应的数据库文件,然后选择要恢复的文件,并按C准备拷贝:
7、进入待拷贝界面,选择要拷贝到的目录,进入“..”目录可以返回到上级目录,这里选择的是我单独挂载的 /mnt/vdc1目录,然后等待所有拷贝完成即可:
8、拷贝完成后,会提示成功和失败了多少,这次失败了几个,但是没提示具体文件,查看目标目录,推测大部分数据恢复了,通知业务检查测试,并建议业务备份数据到其他机器:
df -h