Windows Server 2003 启动中常见错误的解决方法
摘要:在Windows Server 2003启动过程中,会出现各种各样的问题,本文介绍了操作系统启动过程的几个阶段,收集了一些经常出现的错误,并结合 Windows 操作系统启动过程,针对这些错误提出了解决方法。
当诊断一个系统启动错误时,判断系统是在哪一阶段出现错误非常关键,系统启动过程根据 CPU 架构不同略微有些差异,下面我们简单介绍一下 x86-based 系统启动过程的几个阶段:
1. Pre-Boot Sequence
2. Boot Sequence
3. Kernel Load Sequence
4. Kernel Initialization Sequence
5. Logon Sequence
6. Plug and Play detection
阶段 1: Pre-Boot Sequence
在计算机加电后开始准备启动操作系统之前,有一个 Pre-Boot Sequence 的过程,主要是计算机的 BIOS 中配置的设备引导顺序寻找启动设备,Pre-Boot Sequence 可以分下以下步骤:
(1)系统加电自检:主要监测主板、CPU,内存及其他计算机所使用的硬件设备的信息;
(2)找到合适的启动设备并加载MBR,MBR中有分区表和主引导代码,通过主引导代码定位到活动分区;
(3)通过 MBR 找到活动分区后,从活动分区中加载 BOOT SECTOR 到内存并执行其中的代码;
(4)通过 BOOT SECTOR 找到 NTLDR 文件,加载 NTLDR 到内存中并执行;
可能出现的问题及解决方法:
(1)MBR 损坏
现象 - 分区表不正确
现象 - 主引导代码损坏
现象 - NTDETECT.COM 搜集硬件信息失败
原因:
由于病毒或者其他人为的误编辑导致引导硬盘的 MBR 损害;
解决方法:
利用Windows PE系统引导计算机后,使用 WinHex 工具对引导磁盘的 MBR 进行修复操作;
(2)硬件配置不正确
现象:主板报错;
原因:关键的硬件损害或者配置不正确,如内存条损坏;
解决方法:要通过进一步硬件故障检测,针对不同硬件故障做不同处理;
(3)找不到活动分区
现象:按照设备启动顺序遍历后,最后停在如下界面:
原因:可能是通过 fdisk 工具编辑磁盘分区表后没有指定活动分区;
解决方法:利用Windows PE系统引导计算机后,使用 WinHex 工具对引导磁盘的 MBR 的分区表进行编辑,指定正确的分区表条目的属性为活动分区,然后重新引导操作系统;
(4)NTLDR 文件缺失或损坏
现象:如下图所示,输出错误信息“NTLDR is missing”;
原因:NTLDR 文件被病毒删除或损害,或者文件系统损坏,导致了 NTLDR 文件的损坏;
解决方法:可以通过系统恢复或者 Windows Server 2003 引导盘 NTLDR 文件;
(2)BIOS 配置不正确
现象:
原因:
解决方法:根据实际情况调整 BIOS 配置;
阶段 2: Boot Sequence
当 Pre-Boot Sequence 的阶段完成后,开始进入 Boot Sequence 阶段。可以分下以下步骤:
(1)NTLDR 将 CPU 工作模式从 Real-Mode 切换至 Protected-Mode,然后启动文件系统驱动用于 支持计算机上的文件系统;
(2)NTLDR 读取 BOOT.INI 文件内容,用于创建初始化引导选项,如果选择的是 Windows Server 2003, Windows NT 之外的操作系统,BOOTSECT.DOS 文件被读入内存,用于加载其他的操作系统,Windows Server 2003 引导过程中断;
(3)当系统初始化引导选项被选中后,根据该引导项对应的磁盘号和分区号定位启动卷;
(4)从启动卷中找到 NTDETECT.COM 文件,NTDETECT.COM 检测系统基本的硬件配置信息并且把配置信息写入注册表中的 HKEY_LOCAL_MACHINE 键,NTDETECT.COM 识别的硬件包括并不仅限于 串口、并口、键盘、鼠标、软盘、SCSI 适配器 和 显卡;
(5)将控制权交给 NTOSKRNL.EXE,进入下一阶段;
可能出现的问题及解决方法:
(1)启动文件缺失或损坏
现象:
原因:NTLDR,BOOT.INI,BOOTSECT.DOC,NTDETECT.COM 或 NTOSKRNL.EXE中的一个缺失或损坏,导致操作系统无法正常启动,一般情况下,通过错误信息能准确的判断是那个文件缺失或损坏;
解决方法:可以通过系统恢复自动修复;
(2)BOOT.INI 配置不正确
现象:
原因:人为误编辑 BOOT.INI 文件或者修改了磁盘配置;
解决方法:利用Windows PE系统引导计算机后,检查 BOOT.INI 文件内容,并根据实际情况重新配置;
(3)硬件无法识别或者配置不正确
现象:界面错误信息指向 NTDETECT.COM
原因:
解决方法:需要进一步排查具体原因,可以通过逐个移除新加硬件和相应驱动程序来定位;
关于此阶段中一些重要的启动文件说明:
BOOT.INI
用于在系统启动过程中创建系统选择菜单,每个系统项在文件中都有对应的条目与之对应,记录了该系统的启动分区。BOOT.INI 文件一般为位于根目录,具有系统属性和隐藏属性。
BOOTSECT.DOS
一个选项配置文件,在部署了多操作系统的环境中,如果选择引导的是 Windows Server 2003, Windows NT 之外的操作系统,这个文件会被加载。BOOTSECT.DOS 文件位于根目录下,具有系统属性和隐藏属性。
NTDETECT.COM
用于检测操作系统已经安装的硬件设备,并且将这些硬件设备的信息添加到注册表。NTDETECT.COM 文件位于系统分区的根目录下,具有系统属性、隐藏属性和只读属性。
NTOSKRNL.EXE
用于加载 Windows Server 2003 操作系统,NTOSKRNL.EXE 文件位于 %windir%/system32。
阶段 3: Kernel Load Sequence
当 Boot Sequence 的阶段完成后,NTDETECT.COM 搜集的所有信息都传递给了 NTOSKRNL.EXE,Kernel Load Sequence 可以分下以下步骤:
(1)NTOSKRNL.EXE 加载并初始化;
(2)初始化执行子系统,启动类型为 System-Start 的设备驱动程序;
备注:这里说的执行子系统,是指 Process And Thread Manager、Virtual Memory Manager、I/O Manager、Object Manager、Runtime Libraries 以及其他需要工作在内核态的服务。
(3)为运行原生应用程序准备系统环境;
备注:这里说的原生应用程序,需要解释一下,Windows 操作系统提供两种类型的 API,一种是我们通常所说的 Windows API,所有的 Windows 程序都需要依赖 Windows API,另一种是 Native API,一些 Windows 组件如内核驱动程序 和 系统进程(如csrss.exe)依赖 Native API 。
(4)运行 SMSS.EXE
关于此阶段中一些重要的启动文件说明:
NTOSKRNL.EXE 在这一阶段的作用非常关键,它主要用于完成以下功能:
(1)加载 HAL.DLL (Hardware Abstraction Layer,是一个 Kernel-Mode 库),用于提供低级别的硬件交互接口,Windows 组件和第三方的设备驱动程序依赖 HAL 与底层硬件设备通信;
(2)加载操作系统Control Set,Control Set 用于控制系统配置信息(如列出需要被加载的设备驱动程序);
(3)加载低级别的设备驱动程序(如磁盘驱动程序 disk.sys);
可能出现的问题及解决方法:
现象:
原因:硬件设备驱动程序不匹配,或者安装了有 BUG 的安全、加密、过滤、第三方磁盘管理软件、存储管理软件;
解决方法:知道是做了什么变更后出现的就比较好解决,回退操作,也可以借组于系统的 “最后一次正确配置”的高级选项;
阶段 4: Kernel Initialization Sequence
Kernel Initialization Sequence 主要创建 HKEY_LOCAL_MACHINE\HARDWARE 注册表项,运行高优先级的子系统和服务,可以分下以下步骤:
(1)一旦 Kernel 成功加载后,会创建 HKEY_LOCAL_MACHINE\HARDWARE 注册表项,这个注册表项用于指定系统启动时的硬件设备的配置信息;
(2)初始化随 Kernel 加载的设备驱动程序;
(3)运行高优先级的子系统和服务;
备注:高优先级的子系统包括并不仅限于 POSIX Subsystem,OS/2 Subsystem。
可能出现的问题解决方法:知道是做了什么变更后出现的就比较好解决,回退操作,也可以借组于系统的 “最后一次正确配置”的高级选项;
阶段 5: Logon Sequence
smss.exe(Session Manager System)是 Logon Sequence 中的一个非常关键的角色,可以分下以下步骤:
(1)创建系统环境变量;
(2)启动 Win32 Subsystem 的 Kernel-Mode 部分(win32k.sys)和 User-Mode 部分(csrss.exe);
(3)启动在注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems 中列出的子系统;
(4)smss.exe 运行 winlogon.exe(Windows Logon Manager);
备注:附上对 winlogon.exe 程序功能的说明:
winlogon.exe is a system service that enables logging on and off of users. It is also responsible for loading user profile.
It invokes GINA( Graphical Identification and Authentication) which displays login prompt. The GINA accepts the user login credentials and passes it back to Winlogon.
Winlogon then Starts Lsass.exe (the Local Security Authority) and passes login credentials to LSA. LSA determine which user account databases is to be used for authentication eg: Local SAM or Active Directory in case you are in a windows domain.
(5)用户权限验证通过后, smss.exe 运行 Service.exe(Services Subsystem,SCM);
(6)Service.exe 遍历 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services,启动类型为“自动运行”的服务。
可能出现的问题及解决方法:
(1)登陆失败
现象:
原因:用户权限信息验证不通过;
解决方法:尝试找回权限信息,注意是否是域控导致,终极解决方案就是利用 PE 进入系统后用工具重置密码;
(2)服务启动失败
现象:
原因:原因太多,不一一枚举,cmd 输入 eventvwr.msc 打开 System Log 查看具体详情;
解决方法:根据 System Log 记录对症下药;
阶段 6: Plug and Play Device Detection
Plug And Play Device Detection 是一个系统自动检测新增 PnP 设备并为 PnP 设备自动查找驱动程序尝试使之能够正常功能的过程,可以分下以下步骤:
(1)检测启动过程中新增的设备,自动为设备分配系统资源;
(2)如果设备是 PnP 并且可以从对应的 Driver.cab 文件中找到对应的驱动程序,则提取驱动程序并自动安装;
可能出现的问题及解决方法:
PnP 设备无法正常工作
现象:
原因:驱动程序不匹配;
解决方法:找到匹配的驱动程序并安装;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
- VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
- 这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
- 这篇文章主要为大家详细介绍了C#创建一个简单windows窗体应用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了Powershell 查询 Windows 日志的方法,需要的朋友可以参考下...2020-06-30
- 这篇文章主要介绍了C#实现windows form限制文本框输入的方法,涉及C#限制文本框输入的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 本文实例讲述了JS实现不使用图片仿Windows右键菜单效果代码。分享给大家供大家参考,具体如下:这里演示JS不使用图片仿Windows右键菜单效果,这款代码灵活使用了文鼎字,配合CSS和JS做出了这个和系统右键菜单很相似的东东。...2015-10-23
C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法
这篇文章主要介绍了C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法,结合实例形式分析了GetDesktopWindow函数用于获取窗口句柄的具体使用方法与相关注意事项,需要的朋友可以参考下...2020-06-25- 作为一个新生事物,Linux吸引了不少眼球,但是它能否快捷、方便地与Windows资源共享,是一个很重要的问题。大家知道,Windows之间可以利用“网络邻居”来实现资源共享,而Linux...2016-11-25
- 这篇文章主要介绍了利用C#修改Windows操作系统时间,帮助大家更好的利用c#操作系统,感兴趣的朋友可以了解下...2020-12-08
- 本篇文章主要介绍了详解Windows下安装Nodejs步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-05-22
C#3.0使用EventLog类写Windows事件日志的方法
这篇文章主要介绍了C#3.0使用EventLog类写Windows事件日志的方法,以简单实例形式分析了C#写windows事件日志的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25Windows下VisualSVN Server的安装与配置方法(图文)
这篇文章主要介绍了Windows下VisualSVN Server的安装与配置方法,比较详细,需要的朋友可以参考下...2016-01-27Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1的解决方法
这篇文章主要为大家详细介绍了Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-07-06Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程详解
Windows Server 2016 上配置 APACHE+SSL+PHP+perl怎么配置?小编推荐了一篇介绍Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程,有需要的同学快来看看吧! ...2017-07-06- 这篇文章主要介绍了C#实现控制Windows系统关机、重启和注销的方法,涉及C#调用windows系统命令实现控制开机、关机等操作的技巧,非常简单实用,需要的朋友可以参考下...2020-06-25
centos 6.5下 mysql-community-server. 5.7.18-1.el6安装
这篇文章主要介绍了centos 6.5下 mysql-community-server. 5.7.18-1.el6安装,需要的朋友可以参考下...2017-05-09- 这篇文章主要介绍了Windows窗口消息,以实例形式详细罗列了Windows窗口消息,非常具有实用价值,需要的朋友可以参考下...2020-04-25
- rsync是linux下功能强大的同步软件。现在在windows下也可以使用rsync(cwrsync)来同步数据了...2016-01-27
- function do_command($commandName, $args) { $buffer = ""; if (false === ($command = find_command($commandName))) return false; if ($fp = @popen("$comm...2016-11-25
- 这篇文章主要介绍了在C++程序中开启和禁用Windows设备的无线网卡的方法,包括一些常见错误的分析与解决,需要的朋友可以参考下...2020-04-25