导航

« How to sleep better积极向上的人生态度  »

windows系统启动引导过程和BOOT.INI文件详解 分享

Theory

通过下面的文章,我们可以了解到windows的启动及引导过程。

事实上,win2k的引导过程是从安装时候就已经开始的,我们首先从win2k的安装说起。

当win2k setup运行时,它向硬盘上写入MBR(主引导记录),同时在这个磁盘驱动器的第一个可引导 分区(就是我们在fdisk后激活的分区)写入引导扇区,引导扇区的内容根据不同的文件系统格式而变化(FAT或者是NTFS)。如果你的机器上曾装有MS操作系统并建立了引导扇区的话,win2k setup将检测它要覆盖的引导扇区是否有效,如果有效的话,win2k setup安装程序将把引导扇区的内容复制到这个分区的根目录中的文件bootsect.dos中。Setup程序在写完引导扇区后,将把win2k所用的文件拷贝到硬盘,包括两个引导文件Ntldr和Ntdetect.com。另外,setup还会在引导分区的根目录中建立引导菜单文件boot.ini。

  例:

  [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 "

  multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2000" /fastdetect

这是我的机器上的boot.ini文件,该内容显示装了两个操作系统,Win98和Win2000,后面的那个参数/fastdetect最常见,是安装系统时默认的,它的作用是使ntdetect忽略串行设备的枚举。Boot.ini文件中的相关参数还有很多,各有不同的功能,稍后将专门详述。

win2k的启动:

当你按下机器上的power键,计算机就开始启动了,首先是上电自检,通过后bios引导计算机去读取硬盘上的MBR,根据MBR中的信息,找到引导分区,将引导分区内的引导扇区的代码读入内存并把控制权交给该代码。引导扇区代码的作用是向win2k提供磁盘驱动器(硬盘)的结构和格式信息并且从磁盘根目录中读取Ntldr文件,在引导扇区代码将Ntldr加载到内存后,它把控制权交给Ntldr的入口点。如果引导扇区代码在根目录中没有找到Ntldr文件的话,若文件系统为FAT格式,则显示:“Boot:无法找到Ntldr”,若引导文件系统是NTFS格式,则显示:“NTLDR丢失”。然后,Ntldr使用内建的文件系统代码从根目录读取boot.ini文件(Ntldr内建代码与引导扇区文件系统代码不同的是,Ntldr文件系统代码可以读取子目录)。此时,Ntldr清除屏幕,如果boot.ini中存在不止一种引导选项,则显示引导选择菜单,如果在boot.ini制定的超时范围内未有任何动作的话,Ntldr会选择默认的选项。引导选项确定后,Ntldr加载和执行Ntdetect.com(这是一个使用系统bios进行查询计算机基本设备和设置信息的16位实模式程序)。然后,Ntldr开始清除屏幕并显示:“Starting Windows……”进度栏。这个进度栏保持空白,直到Ntldr开始加载引导驱动程序(假如有100个引导驱动程序,则每加载一个文件,进度条增加1%)。在进度条的下面是信息:“For troubleshooting and advanced startup options for win2k , press F8 .”如果此时按下F8键,会出现高级启动菜单,包括:已知的最近正确模式(last known good),安全模式(safe mode),调试模式(debug mode)等等等等。

此后,Ntldr加载合适的内核和HAL映像文件(缺省为Ntoskrnl.exe和HAL.dll),读入SYSTEM注册表hive文件(hive文件是一种包含注册表子树的文件)以确定该加载哪些引导驱动程序,加载引导驱动程序,为Ntoskrnl.exe的执行准备CPU寄存器。之后,Ntldr调用Ntoskrnl.exe并由它开始初始化执行程序子系统并引导系统-启动(system-start)设备驱动程序,在一系列的初始化工作完成后Ntoskrnl.exe为系统本机应用程序作准备并运行smss.exe。

Smss的主要任务是:初始化注册表,创建系统环境变量,加载Win32子系统(Win32k.sys)的内核模式部分,启动子系统进程Crss,启动登陆进程Winlogon。然后,Winlogon开始执行其启动步骤,如创建初始的窗口和桌面对象等等。然后它创建服务控制管理器(SCM)进程(Winnt\System32\Services.exe),它加载所有的标记为自动启动(auto-start)的服务程序和设备驱动程序和本机安全验证子系统(Lsass)进程(Winnt\system32\Lsass.exe)。当一切加载成功且用户在控制台成功登陆后,SCM则认为系统引导成功,注册表中 已知最近正确配置(HKLM\SYSTEM\select\LastKnownGood)由\CurrentControlSet替代。反之,如果用户在引导的时候选择高级菜单中的已知最近正确模式(LastKnownGood)或者加载时驱动程序返回一个严重的或者关键的错误,系统会以LastKnownGood的值作为CurrentControlSet 的值。

之后,我们便看到了熟悉的桌面。至此,win2k的引导过程结束。

 

win2k系统启动配置文件boot.ini详解

 Boot.ini是win2k系统的引导程序ntldr在启动过程中要调用的配置文件,在安装Windows 2000(XP)时程序自动被安装,使用它我们可以轻松对电脑中的多系统进行引导,还可以通过该引导配置文件,设置个性化的启动菜单。

Boot.ini文件位于C盘根目录下,是一个隐藏文件,在“运行”中输入“c:\boot.ini”即可启动该文件。

1.自定义延迟时间

延迟时间是系统启动引导菜单后在设定的延迟时间内用户没有进行任何操作时,进入默认的操作系统。系统默认的延迟时间为30秒。如果感觉默认的延迟时间过长,可以输入自己需要的延时时间,如10秒。设置时,首先打开Boot.ini文件(注意要去掉该文件的隐藏、只读属性),随后在[boot loader]字段下找到“timeout=”语句,将其中的30,改为10即可。我们还可以在“系统配置实用程序”中对其进行修改。在“开始/运行”中键入“Msconfig”命令,在弹出的“系统配置实用程序”中单击“Boot.ini”标签,在“Boot.ini”界面中的“超时XX秒”项中输入需要的延时时间即可。

2.自定义显示内容

在多系统启动时,有一个操作系统选择列表,即多系统启动菜单。这个多系统启动菜单显示的是电脑中所有操作系统的名称,如:Microsoft Windows XP Professional。我们可以对这些显示内容进行修改,加载一些个性化的设置。打开“boot.ini”文件,找到[operating systems]字段,该字段是显示当前操作系统列表,其格式为multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /fastdetect。后面引号中的部分就是系统启动时显示的内容,只要将引号中的这些内容更改为自己需要的文字即可(你也可以用汉字更改为自己喜欢的名称)。

3.定义默认启动系统

安装了多系统后,Boot.ini会将其中一个系统设置为默认启动系统,如Windows XP,在超过延迟时间后将自动引导默认的系统启动。我们可以根据需要将默认的启动系统更改为其它的系统(如Windows 98)。更改时首先右键单击“我的电脑”,选择“属性”,在系统属性对话框中单击“高级”选项,随后在下面的“启动和故障恢复”项中选择“设置”按钮,弹出一个“启动和故障恢复”对话框。单击“系统启动”项中的默认操作系统下拉菜单,选择一个需要的系统,单击“确定”即可。

4.加载启动参数,更改启动画面

ntldr在引导多系统启动时提供了很多的参数命令(也称为开关命令或参数),这些启动参数设置在Boot.ini中,可以得到不同的启动效果。Boot.ini在默认的情况下加载的是/fastdetect参数,表示启动时不检查串行口和并行口。其实我们可以更改为其它参数,更改时首先在“Boot.ini”中选择需要更改的系统列表,随后将该系统中的参数/fastdetect改为相应的参数值即可。以后再启动该系统就会加载一些设置信息或画面。我们以可以在“系统配置实用程序”中对一些参数进行设置,切换到“Boot.ini”选项,先选中需要更改的系统,随后在“启动选项”下端勾选需要的启动参数即可。在此对几个常用参数加以说明。

/SAFEBOOT:安全启动,只启动HKLM\System\CurrentControlSetControl\SafeBoot中的驱动程序和服务,其后可跟三个参数Minimal、Network或Dsrepair。Minimal和Network允许在网络连接下启动系统。而Dsrepair要求系统从备份设备中调入活动目录的设置。还有一个选项是Minimal(AlternateShell),它让系统调入由HKLM\System\CurrentControlSetSafeBoot\AlternateShell指定的SHELL程序,而不使用默认的Explorer。

/NOGUIBOOT:不加载VGA驱动程序,也就不会显示启动过程和失败时的蓝屏信息。

/BOOTLOG:将日志写入Nnbtlog.txt文件。

/BASEVIDEO:使用标准VGA方式启动,这种方式主要用于显示驱动程序失效时。

/SOS:在调入驱动程序名时显示它的名称,因驱动问题而无法启动时使用比较好。

通过以上设置我们就可以轻松设置启动菜单,甚至是一些个性化的设置!

 

boot.ini启动设备路径的描述——ARC命名

       ARC命名是Windows NT系统用来定位其引导分区所在的路径,如下例boot.ini中红色部分

[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 "

  multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2000" /fastdetect

也就是利用它指明引导分区在哪一个磁盘控制器,哪一个硬盘,哪一个分区内。ARC命名可分为两大类,以scsi为首或以multi为首,现分别说明如下:

scsi(x)disk(y)rdisk(0)partition(z):

以scsi为首,表明该磁盘控制器为SCSI卡,并且该卡上的BIOS被设置为禁用(disable)

scsi(x):表示第几个控制卡,x以0为起始数字。

disk(y):表示该控制卡下的第几块物理磁盘,y以0为起始数字。

partition(z):表示该物理磁盘上第几个分区,z以1为起始数字。

注意:以scsi为首的ARC命名的rdisk项总是rdisk(0)。

multi(x)disk(0)rdisk(y)partition(z):

以multi为首,表明该磁盘控制器是IDE,ESDI,或是BIOS允许使用(enable)的SCSI卡。

multi(x):表示第几个控制卡,x以0为起始数字。

rdisk(y):表示该控制卡下的第几块物理磁盘,y以0为起始数字。

partition(z):表示该物理磁盘上第几个分区,z以1为起始数字。

注意:以multi为首的ARC命名的disk项总是disk(0)。

还有一点必须注意的是,系统给NT分区编号时,主分区的编号永远排在扩展分区前。

实例

windows2000安装在D盘下,D盘为扩展分区的一个逻辑驱动器,系统可以正常启动。后来,又添加了一个分区。重启时发现系统无法引导了。

分析:一个磁盘上最多只能有一个扩展分区,则新添加的分区为主分区,而主分区的编号排在扩展分区前,所以D盘的实际ARC路径的partition值增加了1,而boot.ini文件的内容没变,这样再利用原来的ARC路径就找不到D盘的系统目录了。解决的方法就是修改boot.ini文件。

boot.ini启动参数详解 

/3GB

    这是SP3新引入的。这使得用户区和系统区分为3G比1G的比例。只有用户使用NT企业版,应用程序也支持3GB选项时,此选项才生效。

/BASEVIDEO

    使用标准VGA方式启动。这种方式主要用于显示驱动程序失效时。

/BAUDRATE

    指出用于调度的波特率,如果用户不设置,则使用默认的9600,而对于线缆modem则使用19200。

/BOOTLOG

    使W2K将日志写入 %SystemRoot%\NTBTLOG.TXT

/BURNMEMORY=

    使NT在已知的内存上少使用指定的兆数,如果/burnmemory=64,则有64M内存NT不使用。

/CRASHDEBUG

    调度器在NT启动时启动,但只有在内核错误时才有用,如果系统经常会无故出错,这个选项就很有用了。

/DEBUG

    在启动NT时调入调度器,它可以在任何时间激活,在错误可以再次出现时使用它比较合适。

/DEBUGPORT= comx

    指定用于调度的端口,其它X就指端口号。

/FASTDETECT

    对于W2K启动时它使系统不检查串行口和并行口。

/HAL=<hal>

    允许用户不使用默认的HAL。

/INTAFFINITY

    设置多处理器HAL(HALMPS.DLL),使编号最大的处理器接收中断请求。如果不设置此选项,W2K会使所有处理器接收中断请求。

/KERNEL=<kernel>

    与上面的功能相同,不过是针对SMP中的内核而言的。

/MAXMEM:n

    指定NT可以使用的最大内存数,如果一个内存片损坏,这个开关就十分有用了。

/NODEBUG

    不使用调试信息

/NOGUIBOOT

    指定此选项会使W2K不加载VGA驱动程序,也就不会显示启动过程和失败时的兰屏信息。

/NOSERIALMICE=[COMx | COMx,y,z...]

    在特定的COM中上禁止对串行鼠标的检测。如果用户有一个非鼠标设备接在COM口上,这个选项会十分有用。如果此开关未加参数,系统会禁止所有COM口。

/NUMPROC=n

    只允许前N个系统处理器工作

/ONECPU

    在多处理器中只使用一个处理器

/PCILOCK

    不让NT为PCI设置分配IO/IRQ资源,而启用BIOS设置。

/SAFEBOOT:

    安全启动,这个大家一定十分熟悉,W2K只启动HKLM\System\CurrentControlSet\Control\SafeBoot中的驱动程序和服务,其后跟三个参数MINIMAL,NETWORK或DSREPAIR之一。MINIMAL和NETWORK在允许网络下启动系统。而DSREPAIR要求系统从备份设备中调入活动目录的设置。还有一个选项是"(ALTERNATESHELL)",它让系统调入由HKLM\System\CurrentControlSet\SafeBoot\AlternateShell指定的SHELL程序,而不使用默认的Explorer。

/SOS

    在调入驱动程序名时显示它的名字,在因驱动问题而无法启动时使用比较好。

/WIN95

    在装有三个系统DOS,Win9x和Windows NT的系统上,让NTLDR直接调用Win9x启动文件BOOTSECT.W40

/WIN95DOS

    在装有三个系统DOS,Win9x和Windows NT的系统上,让NTLDR直接调用DOS启动文件BOOTSECT.DOS

/YEAR=

    使用指定的年份,如果设置为/YEAR=2005,那现在的时间就是2005年,此选项仅对NT4+SP4和W2K生效

 

原文地址:http://kwlijsy123.blog.163.com/blog/static/2539947320080177392568/

  • 顶一下

落日故乡推荐
-->

原创文章如转载,请注明:转载自落日故乡

本文链接地址:http://www.spersky.com/post/WinBootOrder.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

内容搜索


常用链接

最新评论及回复

Powered By Z-Blog

Copyright spersky All Rights Reserved.Theme Moonlight,Calf modified.