win2000启动菜单实现windows全家福
Q:为什么要用win2000的多启动菜单而不用其它第三方的多启动软件?A:win2000(包括NT4)的多启动菜单位于系统活动分区的启动区,容易管理,出错或染毒后可以简单用软盘启动机器,然后sys c:就恢复了系统启动区。另外,我们知道,硬盘最重要的是位于0道的分区表,如果因为反复的读写分区表而使分区表出现坏道的话,那么硬盘基本上等于报废。而分区的系统区却是随着分区位置和大小的不同而处于不同的位置。所以即使硬盘出现了坏道,也不影响它的使用。
Q:win2000的启动菜单可以支持安装多少个系统吗?
A:这个问题可不好回答,如果你的硬盘分区时划出三个主分区,另外加上N个扩展分区,那win2000所支持的系统可就不好估量了。但这不是我们讨论的重点,我们讨论的是在同一硬盘上安装Dos6.22,win32,win95,win98,winme,winnt4,win2000.或者还可以加上winxp.
Q:以前的多系统软件都需要重新分区(主要是分出几个主分区),而我的硬盘只有一个主分区和一个扩展分区,能用win2000的多系统吗?
A:可以。我们知道,NT4和NT5(win2000)可以安装在扩展分区,但它们的启动菜单只支持从逻辑分区上启动win2000,并不支持启动逻辑分区上的其它系统。而且,微软的产品都有一个特点,总是认为它启动的分区是活动分区(就是我们常说的c盘),所以,大部分资料介绍的微软全家福都是备分各个操作系统的c盘启动软件,通过文件的覆盖替换实现。这总让人觉得不满意,能不能如win95进入dos6.22那样,仅仅靠文件的改名来实现呢?是什么原因造成了这个笨办法呢?
其实这个问题很简单。因为微软的产品的启动文件中有一个叫做IO.sys的,它的位置必须是活动分区的第一个文件,所以为个这个第一,前面的方法必须通过覆盖才能保证它的第一。
所以,我们的目的就是要让win2000支持从逻辑分区启动其它的windos,并且通过简单的文件改名来实现微软全家福。
A:你说得那么好听,如何做呢?
Q:进入实战前我们先假设你现在的硬盘结构是由微软的标准fdisk分的区,即一个C盘和数个逻辑盘。c:盘装win98(或者是winme),d:盘安装win2000这样一个标准的结构。(什么,你还没装win2000?不要紧,不装win2000同样也可以实现我前面提到的多windos共存。这个技巧对于安装了win2000后又用以前的win9x克隆恢复C盘,丢了win2000启动菜单的朋友同样适用。不过话要一句句讲,请耐心看下去。)
1.我们的第一个分区C:做成dos6.22,win32,win95共存。
这个就不用我多说了吧,win9X本身就支持这三个系统共存。简单说一下就是拷入dos6.22的系统文件到c盘根目录,并命名IO.dos,MS.dos,config.dos,autoexec.dos,将win95的IO.sys在c盘根目录复制一分,命名为IO.w40,并设置MSdos.sys的BootMulti=1。
注意,c盘的格式必须为fat16(如果你打算放弃dos6.22,也可以用fat32。上面所说的就不用改啦。)
2.将win98的克隆备分还原到d盘,将winme克隆备分还原到e盘,没克隆你就慢慢装吧。
为了保证做好的c盘,请用安装方式在D盘和E盘安装win9x的同志先保留下c盘的IO.sys,msdos.sys安装完成后用它们覆盖同名的文件。并做win98和winme的启动盘(克隆的同志就不做了)做好后用相应的启动盘启动系统,sys d: ; sys e:分别传送系统到对应的逻辑分区。
3.安装win2000到F盘,有克隆的同志还是可以用克隆。没克隆的同志也可以不做那高达四张的win2000启动盘,win2000采用NTFS格式还是fat32就随你啦。
如果安装过程中你的分区不够用了请用pqmagic划它几个出来。
好啦,现在原料已齐,就等下锅。先启动一次看看。前面采用克隆安装win2000在E盘的同志只能启动c盘的win95,而用安装方式的朋友可以启动c盘的win95和E盘的win2000.现在就进入重点:
一:恢复win2000多启动选单前的准备工作
win2000启动菜单没丢失的同志可以跳过这一步。只做增添的相关选项。
恢复win2000多启动选单要用到一个工具,bootpart。它是一个专门用来修改Windows NT多重开机选单的免费软件。BootPart除了能事后把Dos、Windows 9x加到NT多重开机选单中外,就连OS/2Multiboot、Linux Partitions(with Lilo)或者是软盘开机功能的加入也没有问题喔!(软件是那么介绍的。)
这里就有朋友要问了,即然bootpart已经有了修改NT的多重开机功能,还用写这篇文章干啥?哈哈,问题出在bootpart只支持加入fat16的分区和非fat格式的分区。而我们现在的大硬盘只有用fat32才管理得过来。另外,bootpart也不支持从NT启动菜单中加入第二硬盘,并且,它也不支持从逻辑硬盘启动系统。我们用bootpart只是用它的重建NT启动菜单功能。
bootpart可以从华军软件园的磁盘工具中下载。文件大小24K。
重建NT启动菜单之前,有件事是要先做的。从win2000安装盘或安装有win2000的机器上拷贝下NTLDR , NTDETECT.COM ,BOOTFONT.BIN(可以不用,只是菜单是英文而以。)到你的c盘根目录。然后用windows的记事本编一个boot.ini到你的c盘根目录。内容如下:[boot loader]timeout=10default=C:[operating systems]multi(0)disk(0)rdisk(0)partition(4)WINNT='Microsoft Windows 2000 Professional' /fastdetectC:='Microsoft Windows95'c:win98.bin='Microsoft win98'c:winme.bin='Microsoft winme'C:floop.bin='floop'
这里顺便说一下boot.ini的相关设置问题。timeout=预设启动菜单停留在默认系统上的时间,单位为秒。
default=为默认启动的系统。有朋友装win2000后此项为default=multi(0)disk(0)rdisk(0)partition(4)WINNT请用;号注释掉这一行并添加default=c:以方便启动windos。
multi(0)指硬盘接口为非scsi接口,大多数朋友的硬盘接口都是IDE接口,所以不用变它。disk(0)指win2000启动菜单装在你的第一个IDE接口上,如果你有双硬盘,你是从第一IDE接口硬盘安装,而win2000又装在第二IDE接口上,则此项设为disk(1)。
partition(4)指win2000所安装的分区号,1指C盘,2指D盘,3指E盘,我们的win2000装在F盘,则用partition(4)。注意,由于又硬盘有磁盘交错或者你的系统设有隐藏分区,以上partiton号以dos下启动后各系统所在的盘符为准。
想用win2000的启动菜单而又不想装win2000的朋友只需在上述boot.ini中删除有关winnt的那两行就可以了。
二:增添系统各分区的相应启动文件。
我们知道,win2000之所以能双启动,是因为它重写了dos的引导记录,并把原来c盘的dos引导记录备份为boosect.dos,从而实现引导c盘的windos的。所以,除了这个bootsect.dos,我们还需要引导d盘win98的引导备份win98.bin(这个名字是我随便取的,你也可以取成你喜欢的名字,只要能和boot.ini中对应就可以。)e盘的引导备分winme.bin,软盘的引导备分floop.bin。
做这几个文件需要用到norton2000的diskedit(611K),因为它支持fat32格式的磁盘。diskedit可以在norton2000的安装目录下直接找到。
从windos退到纯dos下,启动diskedit。diskedit跳出个选单说现在运行在只读模式,回车后进入。选择object下的drive,选择c:,再按ALT+B,选择BOOT; Record,读出硬盘C:区的dos引导记录。然后按ALT+T选择TOOL下的Write Object to ,然后它弹出的一个where do you wish to write boot record on drive c: to a file 的警告,在其下的file:中输入bootsect.dos,Drive:中输入C:,就完成了对C盘BOOT区的备份工作。
重复以上操作,备分下你机器D:盘E:盘A:盘的dos引导记录,并命名为win98.bin、winme.bin、floop.bin,文件请都放在c盘根目录下。
由于这一步我们是在只读模式下做的,不会对硬盘做任何修改,所以操作是安全的。
三:增添win2000启动菜单
这一步对于已经有了win2000启动菜单的朋友可以不做。
增添win2000启动菜单也可以用diskedit,方法是找一台装有win2000的机器(不过要求是对方的计算机的C盘同你的C盘格式相同,即fat16对fat16;fat32对fat32)用diskedit备分下它的dos引导记录,然后复制下3EH到1FH间的数据(采用fat16时),如果是fat32则复制5AH到1FH间的数据,覆盖掉你c盘主引导记录的相应部分。
此法有一定的危险性。做错时可能造成你的机器启动不了,所以我不推荐。如果想试试的朋友在做了错误的操作后使硬盘启动不了的话,可以用你的启动盘启动,然后sys c:就可以复原。
方法二就是用bootpart来操作这一步骤。很简单,在dos下执行
bootpart winnt boot:c:
四:对逻辑分区的启动文件做最后修改
执行完步骤三后,重启机器我们已经能够顺利启动win2000,win95和软盘启动了。但一执行win98,winme就会报错并退回菜单。这是因为win2000不支持从逻辑盘启动系统所造成的。所以,我们现在就进入本文最关键的部分,修改win98.bin和wimme.bin使win2000支持从逻辑盘启动。
dos下进入diskedit,按alt+t选择其下的configuration(配置),按空格键将第一个选项read only取消,然后按TAB选save。(放心,我们只是对文件作16进制改写操作,即使改错了也没有危险。)
选择drive c:,按alt+B键读取C盘引导记录,记下big total number of sectors的值,同样,再选drive d:,按alt+B读取D盘引导记录,也记下big total number of sectors的值。注意,记录此值时你得先确保special hiddle secters的值是63才能做,如果不是请先退出并用sys传送系统到d盘和e盘。
为说明清楚,我现在假设你的这两个值如下:
c: big total number of sectors= 1959867; d: big toral number of sectors= 4482072
我们来做个计算:1959867+63*2=1959993,转成16进制=1DE839,改过游戏的朋友可能都会知道,微机上记录这此数据总是低位在前,高位在后,所以此值我们下面填入win98.bin时该为:39 E8 1D,具体位置是win98.bin的1CH处,原值是3F 00 00,请用diskedit调入win98.bin并做此修改。
当然,你也可以算出此值后用其它的16进制编辑器修改。比如用你们常用的修改游戏的工具uledit32来做这步工作。
winme.bin的修改与上面的修改有所不同,应该加上前面的所有sys分区后的big toral mumber of sectors的值。所以,winme.bin的这个值=1959867+4482072+63*2=6442065=624C51H,修改时在winme.bin的1CH处填入51 4C 62
五:修改完成后,我们来做最后的设置工作以启动逻辑盘D和E的win98、winme进入windos,将D盘、E盘的系统文件msdos.sys,command.com更名为msdos.98,command.98(D盘)、msdos.me、command.me(E盘),并拷贝到系统的根目录。为便于切换,请不要设置这些文件的只读,隐藏属性。对于msdos.sys这个文件,还要修改其中的相应盘符,换成你现在你的win98和winme的安装盘符。由于相对简单,就不举例了。
(1)在c:盘根目录下建autoexec.98,autoexec.me两个文件,内容如下:c:autoexec.98@echo offset windir=d:windowsset winbootdir=d:windowsset comspect=d:windowscommand.comset path=d:windows;d:windowscommandset temp=d:windowstempset tmp=d:windowstempdel c:err;这是作为以后防止重复执行变换文件加的,请在你的所有autoexec.bat文件中加入此行,c盘没有autoexec.bat也请建一个,并加入这一行。
autoexec.me的修改仿此进行。如果你有config.sys也请做类似乎修改。
(2)在安装的各个系统的桌面上建立以下切换文件的快捷方式1.Chang95.bat@echo offif exist err goto end@echo errflag > c:err; ;创建err标志文件,以免重复执行chang*.bat引起系统文件混乱。if exist c:flag95 goto end;检查标志文件,以辩明当前所在的系统。if exist c:flag98 goto flag98if exist c:flagme goto flagme@echo falg > flag95;创建当前系统标志文件。
flag98:ren c:flag98 flag95ren c:msdos.sys msdos.98ren c:command.com msdos.98ren c:config.sys config.98ren c:autoexec.bat autoexec.98goto flag95;保存当前98文件系统
flagme:ren c:flagme flag95ren c:msdos.sys msdos.meren c:command.com msdos.meren c:config.sys config.meren c:autoexec.bat autoexec.megoto flag95;保存当前wimme文件系统
flag95:ren c:msdos.95 msdos.sysren c:command.95 command.comren c:config.95 config.sysren c:autoexec.95 autoexec.bat;修改以作好下次启动win95用。 end:;
2.chang98.bat@echo offif exist err goto end@echo errflag > c:err; if exist c:flag98 goto endif exist c:flag95 goto flag95if exist c:flagme goto flagme
flag95:ren c:flag95 flag98ren c:msdos.sys msdos.95ren c:command.com msdos.95ren c:config.sys config.95ren c:autoexec.bat autoexec.95goto flag98
flagme:ren c:flagme flag98ren c:msdos.sys msdos.meren c:command.com msdos.meren c:config.sys config.meren c:autoexec.bat autoexec.megoto flag98
flag98:ren c:msdos.98 msdos.sysren c:command.98 command.comren c:config.98 config.sysren c:autoexec.98 autoexec.bat end:
3. changme.bat@echo offif exist err goto end@echo errflag > c:err; if exist c:flagme goto endif exist c:flag95 goto flag95if exist c:flagm8 goto flagme
flag95:ren c:flag95 flagmeren c:msdos.sys msdos.95ren c:command.com msdos.95ren c:config.sys config.95ren c:autoexec.bat autoexec.95goto flagme
flag98:ren c:flag98 flagmeren c:msdos.sys msdos.98ren c:command.com msdos.98ren c:config.sys config.98ren c:autoexec.bat autoexec.98goto flagme
flagme:ren c:msdos.me msdos.sysren c:command.me command.comren c:config.me config.sysren c:autoexec.me autoexec.bat end:
这里说明一下这几个批处理文件的用法。第一次使用时,请用windows的新建命令在c盘根目录下建一个flag95的文件,再执行chang98等。如果不想建,请执行chang95一次,重启机器就不用手动建这个文件了。
至此,win2000启动windos各个系统的多菜单我们已经成了。下次启动机器,你就可以通过选单进入你想操作的系统啦。
Q:win2000的多启动菜单支持启动第二硬盘的windos系统吗?A: 可以,只需要将第二硬盘的hda.bin引导文件的24H处改为81H(原值是80H),其它的不用修改。但因为windows只认c:盘是主盘,所以启动不了第二硬盘的windos,按上面的四:对逻辑分区的启动文件做最后修改的法则相应修改就可以了。
Q:我想把win2000的多启动做到软盘上,可以吗?A: 当然可以,读入c盘的主引导记录,存为文件1,改24H处为00H,备用。然后读入软驱引导区,复制从00H到3DH的内容,写入文件1的00H-3DH间。只取文件1前面的512字节(00H-1FH)写入软盘的引导区即可。由于相对来说作用不大,所以就不作详细介绍了。