修复分区表损坏的记录

原来在装黑苹果的时候,为了能直接进行系统升级,于是整了个Legacy BIOS+GPT磁盘+Clover引导的结构。去年暑假的时候,我就领略到了这种的结构不稳定性。一旦EFI分区遭到破坏,Clover就不能用,那么就无法进入任何一个系统了,解决的方法就是用做个带有Clover的启动U盘。而这次,遇到了一个比较大问题——分区表损坏。

美赛期间,由于需要用到MATLAB,所以下载安装占用了不少硬盘空间,导致我的系统盘接近爆满。遂决定将Mac的Time Machine备份盘格式化成FAT32,用作数据盘。于是进Mac系统,完成格式化;但是进Windows 10一看,依然是HFS+。随手找到了一个旧版的DiskGenius,看到分区的id为0x06而不是正确的0x07。于是毫无考虑的修改了分区id,结果Windows瞬间蓝屏。

虽然感觉哪里不对,但还是等着室友打完那局LOL,借同学电脑做了个Clover启动盘。然后发现还是进不去。为了确认磁盘现在的状态,又做了个DOS版的DiskGenius进去看看。结果发现除了格式化为空的备份盘,其它的盘都不见了。心中一万头草泥马呼啸而过……

还记得之前的磁盘分区大概是这样的:

EFI分区 Mac系统盘 备份盘 Windows系统盘 文件盘
FAT32 HFS+ HFS+ NTFS NTFS
200MB 180GB 70GB 90GB 110G

现在却变成了这样:

未知 备份盘 未知
180GB 70GB 200GB

心想这可怎么办……文件盘里的东西虽然不是什么重要的商业资料,但是也是大学以来所有资料的汇总。冷静下来,觉得这个时候应该只是分区表损坏了,文件应该都在盘里没有丢失!然后我试着用DiskGenius搜索已丢失的分区,无果,好像只能找到FAT32格式的分区。然而第二天还要继续数学建模,系统也是不能没有的。没有办法,只好在原来Windows系统盘的区域重建一个新的分区,装个新的系统救急。

美赛完后,睡了一早上,吃罢午饭,开始修电脑。在维基百科查了查GPT磁盘的结构。于是下载了一个最新版的DiskGenius(咦为什么又是这玩意),对照着查看扇区内容。

维基上说,LBA1,即第二个扇区,内容应该是GPT磁盘的分区表头,但是我发现我的第二个扇区为全0。而且我看到,这个扇区的内容有CRC校验,这说明我没法手动修改扇区内容来回复分区表头。还有我发现,DiskGenius已经将磁盘识别为MBR,我感觉将磁盘重新弄回GPT的可能性不大了。

接着往下看,下一个扇区开始应该记录的是分区的项目。万幸的是,磁盘的这部分内容还是完好的。

105947e0tctrtrdzgcflg4

根据维基上的信息,我们可以知道,128个字节用来说明一个分区项目。前16个字节说明分区的类型,接下来的16字节是分区的UUID,接下来的两个8字节是分区起始扇区和结束扇区,采用小端序,这正是我所需要的。再接下来的8字节是属性标志。接下来的72字节是UTF-16LE编码的分区名。

知道了分区的位置,那么我们的工作就完成大半了。接下来,MBR磁盘分区的记录方式和GPT磁盘分区的相同分区格式的文件记录方式是否是一样的呢?我觉得是一样的。因为分区格式本来都是独立于磁盘分区表的。分区表也没有根据分区的格式而做出区别对待。最后事实证明,我的猜想是对的。

接下来,就只需要在MBR分区表中加入分区项目就可以了。为了偷懒,直接在DiskGenius里填写相应信息就可以添加分区项目了。保存更改的时候就不能用格式化。

114030bms6j1sjkdjdj6js

然后分区就回来了:)但是由于采取了MBR,OS X不能直接升级了:(

附:遇到分区表丢失问题的时候,一定要冷静,不要对分区进行多余的操作,减少对原分区的影响,这样才能提高恢复数据的成功率。