Sandisk U盘误写引导恢复 (bootsect.exe破坏分区表后的恢复)

@vrqq  April 4, 2018

起因是今天想做个win7的启动盘,借来个sandisk 64G u盘就开搞了。。
虚拟机进windows系统,不想格式化u盘,直接用 bootsect x: /mbr 莽了一下,然后提示mbr写入成功。。
然后点开u盘出现提示 磁盘未初始化。。 格式是FAT32 Unformatted
目前猜测bootsect.exe搞坏了u盘分区表 凉凉啊。。

先说结论

目前的现状
U盘: 64G (120127488 sectors)
MBR分区表 Partition1 : [Unformatted] 38 - 120127493 sectors
用数据恢复软件全盘扫描可以扫到文件,想到数据并没破坏,另谋出路吧。

解决方法
去掉分区表,使之变成No Partition Table,重建FAT32分区(分区内boot sector),分区起点 0 sector, 终点 120127488 sector(最后一个扇区)。
(简单的办法:运行testdisk,Partition Table选None,然后Rebuild BS。)
然后保存,flush,拔u盘,插上,完事大吉。

可能出现的问题: 前面38个sector的数据可能被盖了。

建议扩展阅读:
磁盘分区表恢复原理-purpleroc http://drops.xmd5.com/static/drops/tips-12043.html

仔细回顾一下

用bootsect.exe之前没有看分区表有没有,什么样子,只记得有个分区FAT32格式。。
想到插u盘提示名字叫“可移动磁盘”,凉凉,才想到可能它并不存在分区表。。。
插播一句:windows下不支持u盘多分区,就是说即使有分区表,也会只默认的mount第一个分区。

所以

我猜测,u盘根本就没有分区表,直接莽了一个分区,从sector0到最后一个sector!

用testdisk大杀器:https://www.cgsecurity.org/wiki/TestDisk_Download

扫一下被破坏完的现场,刚开始不懂啊,选了个MBR分区表,扫到:

FAT: cluster=2(0x2), pos=29382
     FAT32                         38  120127493  120127456 [NO NAME]
     FAT32, blocksize=32768, 61 GB / 57 GiB
This partition ends after the disk limits. (start=38, size=120127456, end=120127493, disk end=120127488)
Search for partition aborted
Disk /dev/disk2 - 61 GB / 57 GiB - 120127488 sectors
Check the harddisk size: HD jumper settings, BIOS detection...
The harddisk (61 GB / 57 GiB) seems too small! (< 61 GB / 57 GiB)
The following partition can't be recovered:
     FAT32                         38  120127493  120127456 [NO NAME]
     FAT32, blocksize=32768, 61 GB / 57 GiB
Results
No partition found or selected for recovery

然后想到了可能没有分区表,直接选了Partiton Table Type: None
理所当然的没扫到,强行重建BS,然后可以直接在testdisk里看到文件。
好的,那我们选这个分区,FAT32,rebuild BS,看文件没问题,最后write。

TestDisk 7.1-WIP, Data Recovery Utility, March 2018
Christophe GRENIER <grenier@cgsecurity.org>
https://www.cgsecurity.org
Disk /dev/disk2 - 61 GB / 57 GiB - 120127488 sectors
     Partition                  Start        End    Size in sectors
   P FAT32                          0  120127487  120127488

FAT : 32
cluster_size 64 80
reserved     54 190
sectors      0 47366
total_sect   120127488 12440115
fat32_length 14661 129940998
root_cluster 2 2332259456
free_count   uninitialised 0
next_free    uninitialised 0
Extrapolated boot sector and current boot sector are different.

全文完 恢复成功!

就是说,u盘(可移动磁盘)状态不存在分区表(No Partiton Table),只有一个分区,位置是从0到最后一个扇区。
使用bootsect.exe或者UltraISO写USB-HDD时候,会改变磁盘内容,在磁盘前面写一个分区表,然后第一个分区的起始位置应向后移。
因此使用UltraISO时候提示格式化分区,因为这些工具不知道原来什么样子,就默认原来分区被破坏了。
但是bootsect.exe不会提示啊,它就默认了磁盘有分区表(mbr/gpt),所以才把u盘整坏了。
猜测是因为写了分区表,插入u盘以后才会被识别成“可移动硬盘”。(但是windows下u盘驱动依然不支持多分区)

总而言之,在大部分U盘默认情况下,要想保留数据,谨慎使用bootsect.exe!!

BTW: 磁盘可以同时存在MBR和GPT,他们占用的位置不同,不会互相覆盖,使用哪个取决于主板引导设置。mac os的bootcamp就是额外做了mbr分区表,并做了MBR和GPT(默认启动)两个分区表的同步做兼容。。
有关于MBR和GUID分区表(GUID Partition Table:GPT)所占的空间,自行查询啦。。。
当然如此这般恢复以后,被分区表破坏掉的地方如果有数据,就没啦!


添加新评论