分享

一个Windows启动问题的解决

 菜园子图书馆 2014-01-24

现象:Windows 启动过程中出现长时间暂停。

 

分析:经过详细询问,长时间暂停发生在出现系统启动菜单之后。在选择从启动菜单启动 Windows 后,可能会出现长时间的延迟(或暂停),然后计算机才会完成启动。注意,此延迟持续的时间为 10 秒至 1 分钟。另外,此延迟在正在启动 Windows 进度栏出现之前发生,并且计算机在这段时间里可能看起来好象停止响应(挂起)。

 

  我们知道,从启动菜单出现,到“正在启动 windows 进度栏”,正常的暂停时间应该在10秒以内,一般为1秒左右。这里出现暂停,显然是系统启动过程出现了问题。

 

  从系统启动的过程来看:Ntldr将系统由原来的16位实模式切换到32位保护模式或64位长模式。它的工作是读取根目录下的Boot.ini文件,显然引导菜单,在多操作系统的计算机中,可以看到这个菜单。接着它会清屏,并在Win2000下显示一个黑白的进度条,在XP下显示XP的标志图同时显示下面不断滚动的蓝色进度条,提示你它正在加载一些重要的文件。

 

  很明显,问题出现在了Boot.ini文件上。解析出现问题机器上的Boot.ini文件,如下:

 

[boot loader]
timeout=3
default=signature(b0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
signature(b0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

 

  对于Boot.ini文件,下面的列表描述了 Boot.ini 文件中数据的含义:

 

“timeout”指定在选择默认的操作系统之前 Windows 等待的时间
“default”指定默认的操作系统。
“scsi(0)”表示主控制器(通常也是唯一的控制器)负责此设备。如果有两个 SCSI 控制器并且磁盘与第二个控制器相关联,则第二个控制器称为“scsi(1)”。

如果系统使用 IDE、增强的 IDE (EIDE) 或增强的小型设备接口 (ESDI) 驱动器,或者如果系统使用没有内置 BIOS 的 SCSI 适配器,请将“scsi”替换为“multi”。
“disk(0)”指要使用的 SCSI 逻辑单元 (LUN)。它可以是独立的磁盘,但是大多数 SCSI 设置对每个 SCSI ID 只有一个 LUN。
“rdisk(0)”指物理磁盘 1
本例中的“partition(1)”是计算机中第一个驱动器上的唯一分区。如果有两个分区(C 和 D),则分区 C 为 partition(1),分区 D 为 partition(2)。
包含多重引导方式的参数(如果有的话)要求检查 Winnt 文件夹以从指定的 SCSI 控制器的磁盘和分区进行引导。
“/NODEBUG”指定没有监视任何调试信息。调试信息仅对程序开发人员有用。
您可以添加 /SOS 选项以在加载驱动程序时显示驱动程序名。默认情况下,OS Loader 屏幕仅显示进度点。
“Previous Operating System on C:\”表示“上一个操作系统”是 MS-DOS,因为“C:\”是 MS-DOS 路径。

 

解决:将Boot.ini文件中的 signature(b0) 修改为 multi(0),重启机器,一切恢复正常。

 

[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

 

原因:那么问题是为什么在Boot.ini文件中出现了不常见的 signature 语法,并且造成了Windows启动过程出现长时间暂停呢?

 

  仅当存在下列情况之一时,才使用 Signature() 语法:

  • 承载安装 Windows 的启动分区的系统 BIOS 或控制器不支持 INT-13 EXTENSIONS 或者已禁用“INT-13 扩展”选项,而且安装 Windows 的分区大于 ~7.8 GB 或者该分区的结束柱面编号大于 1024。
  • 安装 Windows 的驱动器连接到其 BIOS 已禁用的 SCSI 控制器,因此在启动过程中无法使用 INT13 BIOS 调用。

  signature() 语法等效于 scsi() 语法,但改用前者来支持 Windows 中的即插即用结构。由于 Windows 是一种即插即用操作系统,因此每次启动 Windows 时 SCSI 控制器编号实例都可能有所不同,尤其是在完成安装后添加新 SCSI 控制器硬件时。

  使用 signature() 语法可指示 Ntldr 定位其磁盘签名与圆括号中的值匹配的驱动器,而不管驱动器连接到的 SCSI 控制器的编号是什么。

  signature() 值是从物理磁盘的主启动记录 (MBR) 中提取的。这个唯一的十六进制数是在安装程序的文本模式部分时写入 MBR 的,或者是在安装 Microsoft Windows NT 4.0 版或更早版本时写入的。

 

如果 MBR 中的磁盘签名被改写(例如,由病毒改写)或被更改(损坏),以致它不再与 Boot.ini 文件中的 signature() 值匹配,则在您启动计算机时可能会收到以下错误消息:

 

Windows 2000 could not start because of a computer disk hardware configuration problem.Could not read from selected boot disk.Check boot path and disk hardware.Please check the Windows documentation about hardware disk configuration and your hardware disk configuration and your hardware reference manuals for additional information.
- 或 -
Windows could not start because of the following ARC firmware boot configuration problem:did not properly generate ARC name for HAL and system paths.Please check the Windows documentation about ARC configuration options and your hardware reference manuals for additional information.

 

由于用 signature() 语法代替了 scsi() 语法,因此以下要求同样适用:要求在系统分区的根文件夹中有一个名为 Ntbootdd.sys 的文件,以便在启动时找到 SCSI 控制器的地址。此文件是您从其启动的 SCSI 适配器的特定 SCSI 小端口设备驱动程序,它被重命名为 Ntbootdd.sys 并放置在系统驱动器的根文件夹中。

 

   所以,如果将 Windows 安装在某个驱动器或分区上,而 Windows 无法通过正常的基本输入/输出系统 (BIOS) INT-13 或 INT-13 扩展调用来访问它,就会出现这种情况。当 Windows 安装程序确定它无法使用 BIOS 调用进行启动时,它就会使用 Boot.ini 文件中的 scsi() 或 signature() 语法,而不是使用 multi() 语法。

 

  在启动需要 scsi() 或 signature() 语法的系统时,Ntldr 加载额外的设备驱动程序 (Ntbootdd.sys) 以初始化并询问计算机中的启动控制器。然后,Ntldr 查找连接到该控制器的关联启动驱动器,以完成内核加载。在 Windows 中执行这些额外操作需要花费更多的时间,这是由操作系统的“即插即用”特性决定的。

  这是正常现象,然而,即使计算机可以使用正常 BIOS 调用进行启动,Windows 安装程序也可能会使用 scsi() 或 signature() 语法。在使用较大容量的启动驱动器时,基于集成驱动器电子的计算机可能会出现这种情况。在这种情况下,可以尝试在 Boot.ini 文件中添加额外的条目,并对从中启动的新条目使用 multi() 语法。注意:如果这种方法奏效,计算机启动时就不会出现暂停。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多