起因是今天想做个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)所占的空间,自行查询啦。。。
当然如此这般恢复以后,被分区表破坏掉的地方如果有数据,就没啦!