您的位置:首页 > 运维架构 > Linux

记一次有惊无险的Linux数据恢复过程

2017-10-12 23:12 363 查看

问题阶段

起因:

昨天晚上思路不是很清晰(上了一天班回来有点蒙),还是强忍着疲惫想搞事情,结果悲剧了… …

本来想拿SD卡做一张linux烧录卡,烧录脚本是很久以前写的,有git记录,一直不成功,就回退了几次提交,然后执行的时候没有给脚本传参(/dev/sd**),结果脚本中默认磁盘设备为/dev/sdb ,在现在电脑上是一块数据磁盘,执行到一半的时候由于某些原因意外退出,但还是有一些命令执行,比如最致命的一条:

dd if=/dev/zero of=${node} bs=1024 count=1 conv=fsync conv=notrunc


node指向的就是/dev/sdb

然后把LVM2 label、meta data、分区表都给删除了,由于此硬盘在/etc/fstab中有记录,所以今天开机有卡主了,开始以为磁盘接触不良,进入linux recovery模式屏蔽掉fstab中相关选项后进入系统. ls -l /dev/sd* 发现只有/dev/sdb 没有分区信息,接着执行fdisk /dev/sdb, p打印信息

Command (m for help): p

Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 4096 bytes

I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disklabel type: dos

Disk identifier: 0x*********


同样没有分区信息,回想昨晚的操作,终于……(一身冷汗)

处理过程

冷汗过后就需要冷静的思考,既然只是删除了磁盘的头信息,那么分区实际上还是存在的,而且数据也应该完好的存在.

尝试一:

首先找到一篇lvm数据恢复的文章,PC 上的 LVM 灾难修复,虽然文章中类似情景,但是恢复的时候需要
/etc/lvm/backup/
中有对应的lvm备份信息,而我的磁盘但是不是在现在的机器分的所以没有相应信息. 文章至少透露出一个重要信息,可以恢复,应该直接恢复出分区表即可.

还有一篇文章跟上面一篇很像:一次Linux LVM VG丢失完整找回过程记录

尝试二:

挂载到windwos上用diskgenius扫描分区表,能够看到一些零星的数据,但都是乱码.当时心又亮了一截, 此路不通.

尝试三:

直接查找linux的数据恢复软件,最终找到一款靠谱的:testdisk 官方文档

简单介绍:

它不能从故障的存储设备上拷贝数据,相反,它可以解决一些因为分区的原因而 造成数据无法访问的问题。该工具可以帮助你恢复丢失的分区,让磁盘重新变得可以启动,整理分区表,恢复主引导记录,恢复引导扇区以及文件系统表,可以从 NTFS、FAT、exFAT和ext2类型的文件系统中恢复被删除的文件,还能从已经删除了的NTFS、FAT、exFAT和ext2/3/4文件系统 中拷贝文件。

尝试:

testdisk /dev/sdb

选择硬盘后回车:

Select a media (use Arrow keys, then press Enter):

Disk /dev/sdb - 500 GB / 465 GiB - *******************


选择分区:

Please select the partition table type, press Enter when done.

[Intel  ] Intel/PC partition

[EFI GPT] EFI GPT partition map (Mac i386, some x86_64...)

[Humax  ] Humax partition table

[Mac    ] Apple partition map

[None   ] Non partitioned media

[Sun    ] Sun Solaris partition

[XBox   ] XBox partition

[Return ] Return to disk selection


选择
[Intel  ] Intel/PC partition


选择动作:

[ Analyse  ] Analyse current partition structure and search for lost partitions

[ Advanced ] Filesystem Utils

[ Geometry ] Change disk geometry

[ Options  ] Modify options

[ MBR Code ] Write TestDisk MBR code to first sector

[ Delete   ] Delete all data in the partition table

[ Quit     ] Return to disk selection


这里选择
[ Analyse  ] Analyse current partition structure and search for lost partitions


过一会会显示扫描到分区表信息,选择写入到磁盘,然后提示重启电脑(其实就是重新加载硬盘).

怀着一颗忐忑的新重启后惊喜的发现,分区已经恢复,检查数据一切正常:

`Command (m for help): p Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x*********Device Boot Start End Sectors Size Id Type

/dev/sdb1 * ####### ####### ####### xxG 83 Linux

/dev/sdb2 ####### ####### ####### xxG 83 Linux

/dev/sdb3 ####### ####### ####### xxG 7 exFAT

`

遇事冷静思考,寻找最优解决方案.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息