最近在做磁盘的备份、还原测试,使用WindowsAPI中的DeviceIoControl来备份、还原磁盘的Layout,然后依次、按对应顺序拷贝源磁盘的各个分区中的数据,但在将目标磁盘作为启动磁盘启动时,屏幕出现黑屏以及光标闪烁的想象,查看资料说是因为MBR被破坏的问题。使用WinHex查看目标磁盘的MBR,启动代码良好,查看启动分区的DBR,发现BPB参数中磁道扇区数、磁头数和源硬盘不同,于是修改这两个参数,使得和源硬盘相同,修改后磁盘能够启动,系统启动正常。
但是在WindowsXP下测试程序时发现,就算修改了启动分区的BPB参数也无法启动目标磁盘。仔细分析目标磁盘的MBR发现,分区表中启动分区的CHS参数有问题,根据开始扇区计算出来的CHS参数与分区中的不同,重新计算CHS参数并填入磁盘的MBR,磁盘能够启动。
经过多次试验,得出以下结论:
1:系统在引导时会去检查MBR中的CHS参数以及启动分区的BPB参数是否正确,但也不一定总是这样,经过测试XP、Vista、2003、2008、Windows7、Windows8,发现只有XP、2003系统在启动时要求这样严格;
2:使用WindowsAPI DeviceIoControl设置磁盘Layout后,磁盘MBR分区中的CHS参数不一定正确,但不影响分区的使用,但如果启动分区的CHS参数不正确,则可能系统无法启动,需要手动修改。
3:分区DBR中的BPB参数是分区格式化时自动生成的,磁盘还原后无需修改,之前之所以修改后系统能够启动,根本原因是磁盘MBR中的CHS参数有误,导致需要使用错误的BPB参数(磁道扇区数、磁头数)。