行货Thinkpad电脑报价

联想笔记本报价

微软平板电脑报价

ipadAir2/Mini3报价

苹果电脑报价

行货苹果电脑报价

IBM/HP二手电脑

苹果Watch报价

办公地址|联系方式

公司简介|汇款帐号

选择MD购机的理由

淘宝网店交易公告

网上下订单的链接

  
返回列表 发帖

笔记本硬盘的外接分区与“NTLDR is Missing”

看到很多贴子中提到,安装Windows2000出现NTLDR is missing错误。
出现这个错误有各种各样的情况,但共性就是这些硬盘普遍都是在作为台式机外接硬盘时分区及格式化的。
我装各种系统都是选用启动盘+本机分区的方法,在DOS下,Windows各版本下升级或者全新安装NT/2000/XP次数很多,从未出现过ntldr丢失的问题。

因此,ntldr丢失,以及其他安装2000过程中产生的问题,与外接硬盘的分区过程有关。而且,这个问题有时出现,有时不出现。听起来令人费解。

为此我查了硬盘分区的有关资料和Windows出错信息的资料。找到了这个问题。这个问题不在于主硬盘引导记录,也不在于分区表。在硬盘的每个逻辑分区的0磁道内,有一个BPB块(BIOS Parameter Block “BIOS参数块”)。这个BPB块描述逻辑盘结构组成,包含隐藏扇区数目(从0-1-1开始计算)、FAT扇区数、FAT拷贝数、硬盘磁头总数、根目录表项最大值等。但是,在不同的机器和运行环境中,尤其是在外挂硬盘的情况下,是不一样的。下面就是FAT32 BPB的结构:

A_BF_BPB    STRUC
    A_BF_BPB_BytesPerSector          DW    ?
    A_BF_BPB_SectorsPerCluster       DB    ?
    A_BF_BPB_ReservedSectors        DW    ?
    A_BF_BPB_NumberOfFATs          DB    ?
    A_BF_BPB_RootEntries               DW    ?
    A_BF_BPB_TotalSectors             DW    ?
    A_BF_BPB_MediaDescriptor         DB    ?
    A_BF_BPB_SectorsPerFAT          DW    ?
    A_BF_BPB_SectorsPerTrack        DW    ?
    A_BF_BPB_Heads                      DW    ?
    A_BF_BPB_HiddenSectors           DW    ?
    A_BF_BPB_HiddenSectorsHigh     DW    ?
    A_BF_BPB_BigTotalSectors         DW    ?
    A_BF_BPB_BigTotalSectorsHigh   DW    ?
    A_BF_BPB_BigSectorsPerFat       DW    ?
    A_BF_BPB_BigSectorsPerFatHi     DW    ?
    A_BF_BPB_ExtFlags                   DW    ?
    A_BF_BPB_FS_Version                DW    ?
    A_BF_BPB_RootDirStrtClus          DW    ?
    A_BF_BPB_RootDirStrtClusHi        DW    ?
    A_BF_BPB_FSInfoSec                 DW    ?
    A_BF_BPB_BkUpBootSec            DW    ?
    A_BF_BPB_Reserved                  DW    6 DUP (?)
A_BF_BPB    ENDS

其中加黑的行就是我分析可能产生问题的项。前四个值在某些异源性安装条件下,会不准确。最后这个Flags标志项含有多个唯一性的标志,如起始簇号(A_BF_BPB_RootDirStrtClus)等;在不同的环境中,系统会写入不相同值。当改变环境后,这些项与物理磁盘实际的值不匹配时,Windows 2000 和 XP 就会产生错误,无法加载该FAT32分区,因为BPB信息不准确,从而最终报告 NTLDR is missing。实际上是因为这个值的不匹配,影响了下一步NTLDR的加载。

有趣的是,来回挪动Windows95/98/me从来不会出现这个问题,因为Win95/98/me忽略了对这个结构中某些值的检查,即便是无效的也仍然会继续启动程序。所以这个BPB值的错误问题,根据微软描述,只存在于用FAT32分区,使用int13h扩展启动方式(目前绝大多数硬盘都是此类)安装Windows2000/xp的情况下。同理,根据微软的问题报告,当用异源的Windows98/me克隆(如不同磁盘ghost恢复来的win98)升级Win2k/xp的时候,也会遇到同样的 ntldr is missing 问题。产生这个问题的原因是BPB的HEADS字段,错误的磁头数导致WINDOWS NT不能继续启动过程,而Win95/98/me同样忽略这个检查。

说了这么多大家应该明白问题的根源了。在不同的运行环境下(尤其是不同型号的硬盘控制器,反映出来就是不同型号或者品牌的电脑),起始簇的物理位置,标号不同,或者物理磁盘统计信息的不同,就造成了硬盘BPB信息在不同电脑上的不准确,从而导致了Windows 2000/XP 启动过程失败,NTLDR is missing。

这里也提供几个解决办法:

1。首先考虑要在本机上进行分区。只有这样才能写入正确的和匹配的BPB值,不会使得Windows NT Loader 无法定位。在其他机器,尤其是其他型号硬盘控制器下接驳分区,大多数情况下,会导致写入不同的BPB值。

2。应急情况下(安装/运行过程中出现 NTLDR is missing),可以考虑用一张含有sys.com文件的磁盘或U盘启动机器,然后输入 sys c: 传递系统。注意,如我在前文所说,format c: /s 并不引起BPB信息的重写,因此是无效的。sys命令在传递系统的同时,会引起写入新BPB值的操作。当然此时,NTLDR也被覆盖了,系统变成了Windows 98/me。用sys执行过后(也就是bpb更新后),再运行 win2k/xp的安装程序,就不会再有任何错误了。这在一些网友的相关解决方法中也有提及,在本文分析过原因之后,这样的做法也就顺理成章了。

返回列表
水货IBM IBM水货 IBM水本 北京水货 北京水本