【关键字】
数据恢复,No bootable device,dd
【约束与限制】
1、请对故障磁盘创建私有镜像或者快照,为了避免破坏源磁盘的数据,恢复操作在备份的磁盘上进行。
2、该文档中的恢复建立在误操作对磁盘破坏比较轻微,不能确保可以完全恢复数据,恢复程度取决于破坏的程度。
【问题场景】
使用中的ECS重启后无法使用,登录vnc查看显示No bootable device
【根因分析】
出现No bootable device通常为MBR分区表故障,将故障的ECS关机并挂载到其他Linux服务器上可以进行排查。
挂盘后发现故障的系统盘(vdb)没有分区和文件系统,如下图所示
出现该问题的可能原因有:
1、对已运行中的磁盘使用fifo进行性能测试导致磁盘文件系统被擦除;
2、使用dd命令擦除了磁盘MBR分区表和文件系统。
该场景下是否可以恢复数据取决于错误操作的严重程度,如果擦除较少可以找回未被擦除的数据。
【操作步骤】
步骤一:恢复分区
1.1、将故障ECS关机,卸载系统盘并挂载至其他Linux服务器(这里我们使用CentOS7上。
1.2、安装testdisk工具
# yum install testdisk
1.3、使用testdisk进行恢复,执行
# testdisk /dev/vdb
1.4、光标移动至“proceed”回车。
1.5、选择要恢复的磁盘并点击“下一步”
1.6、选择“Analyse”(分析当前分区架构并搜索丢失的分区信息)。
1.7、选择“Quick search”。
1.8、选择“Continue”。
1.9、直接回车
1.10、选择“Deeper Search”会进入分析过程,等待分析结束。
1.11、分析完成,点击“Continue”。
1.2、点击“Write”并确认输入“y”,将分析的结果写入。
1.13、连续选择“Quit”退出。
步骤二:恢复文件系统
2.1、查看分区和文件系统,并尝试挂载
2.2、如上图所示分区和文件系统可以看到,但是挂载时提示文件系统存在错误,我们可以尝试恢复文件系统,执行
# fsck.ext4 /dev/vdb1 –y
2.3、再次尝试挂载文件系统后成功,恢复的数据存放在挂载下的lost+found目录下,由于文件系统被破坏,原始的目录无法看到,数据存放在以#开始的目录,可以通过打开各个目录确认是哪个原始目录。
2.4、查询root用户的操作记录,确定是否有擦除磁盘的操作。我们找到目录中原始的root目录,打开.bash_history文件,可以查到确实存在dd的操作,如下图所示,该操作擦除了磁盘的从开始计算的2G空间。