Booting Windows From CD-ROM
精华序号
:19
来自论坛
:
小熊在线
《光盘刻录论坛》
内容说明
:Booting Windows From CD-ROM
我转贴了。谢谢MS-6199兄弟!
(3637字)
gar2000
(39929)
于2002/04/29(12:37:56)..
Booting Windows From CD-ROM
Windows无法从光盘启动的原因是启动时Windows会报告无法访问注册表。本文将解释如何消除这些错误并优化光盘启动。
制作一张可启动的Windows光盘,需要至少500M磁盘空间,一些自由软件。并且需要了解一些DOS命令。
本文所介绍的方法只可用于Windows 95b以上的系统和Windows 98,不可用于NT和2000的启动光盘。
实际上所有的问题就是处理Windows对磁盘的写访问。考虑两个问题:其一,注册表位于光盘的系统可以正常启动并运行。其二,将注册表置于RAM盘。RAM盘是主存的一部分并被模拟成一个硬盘。其中的窍门是只需要拷贝注册表文件到RAM盘,因此该RAM盘只需4M左右的内存空间。所有启动时无需写访问的文件都留在光盘上。用这种方法,在没有硬盘的情况下注册表将也可以被写访问。
开始安装Windows之前,需要制作一张启动盘,并且将Win98的安装目录拷贝到硬盘上,这将加速安装的过程。
然后需要创建一些目录:
c:\w 将用于光盘的启动镜像
c:\cdrom 将作为光盘的目录
c:\cdrom\ramdisk 用于存放光盘启动时讲被拷贝至RAM盘的文件
c:\cdrom\ramdisk\w 作为RAM盘的Windows目录
c:\backup 将msdos.sys, io.sys, config.sys, autoexec.bat拷入,用于当前系统的备份
将下列文件拷入c:\w
dblbuff.sys, himen.sys, ifshlp.sys, setver.exe(位于windows目录)
attrib.exe, keyb.com, keyboard.sys, mscdex.exe, subst.exe, xcopy.exe, xcopy32.exe, xcopy32.mod
(位于windows\command目录)
DOS下的光驱驱动,RAM驱动(ramdrive.sys是不合适的,因为不能为它指定盘符,可以使用xmsdsk.exe,可以从【1】免费下载,如果使用了别的驱动,需要修改autoexec.bat中的配置)
重装windows之前必须删除c:\config.sys和c:\autoexec.bat,并且创建一个新的autoexec.bat,加入下列配置:
c:\w\subst.exe x: c:\cdrom
path c:\;c:\w
因为系统将要从光盘运行,而光盘只能分配未被分配的盘符,因此系统必须被安装在后面的驱动器上。这对于使注册表与盘符独立很重要。因此使用subst命令将你安装windows的目录映射为一个虚拟的盘符,autoexec.bat中的第一行将c:\cdrom映射到x:盘。
为了防止现存的系统被覆盖,需要重命名硬盘上所有的win.com和system.ini文件,另外也包括system.dat。因为windows启动时若无法在系统目录下找到这些文件,系统将自动在所有分区上寻找system.dat这将可能影响其他系统。
现在开始安装windows。运行setup.exe,它将报告subst.exe已经被加载。忽略这个信息,按esc拒绝程序的建议继续安装。并且使用x:\w作为安装路径。安装时的第一次重启必须从先前制作的软盘启动,忽略取走软驱的提示。从软盘启动后编辑c:\config.sys,加入如下配置,其中ifshlp.sys用于支持VFAT文件系统:
devicehigh=c:\w\himem.sys
devicehigh=c:\w\ifshlp.sys
devicehigh=c:\w\dblbuff.sys
devicehigh=c:\w\setver.exe
同样再编辑c:\autoexec.bat,加入以下配置:
c:\w\subst.exe x: c:\cdrom
path c:\w;x:\w;x:\w\command;x:\w\system
取走软盘,按ctrl-alt-del重启并且完成安装。至此,你可以在这个系统上安装一些必须的驱动和应用程序,这些最终都将放入光盘,比如声卡和显卡驱动。为了使稍后的安装更为简便,你需要安装TweadUI工具。在windows98中你可以在\tools\reskit\powertoy目录中找到,windows95版本可以在【2】免费下载。
现在来为注册表准备RAM盘,依旧使用subst命令,在c:\autoexec.bat中加入下面这行:
c:\w\subst.exe w: c:\cdrom\ramdisk
windows将在启动分区的\msdos.sys中寻找注册表文件的位置,所以需要修改它。这个文件具有系统属性,用attrib msdos.sys -s -h -r命令去掉它的系统,隐藏,只读属性。然后可以修改它的前四行如下:
[Paths]
WinDir=w:\w
WinBootDir=w:\w
HostWinBootDrv=w
编辑msdos.sys时需要加入以下这行:
DisableLog=1
注意如果已经包含一行DisableLog=0则只需将0改为1即可。
如上述,为了防止光盘启动时系统读取硬盘上的system.dat,注册表文件必须被改名。它的名字包含在c:\io.sys中,使用16进制编辑器修改它,搜索所有的system.dat字符串,将它改为system.tat。这个改动将确保只有system.tat将被认为是系统的注册表文件,而system.dat将被忽略。
在windows95系统中推荐进行这个修改,而在windows98中需要考虑更多的问题:注册表文件名并非只在io.sys中指出,在一些启动时运行的应用程序中也将自动检测这个注册表文件,如果做了这个改动,你可能在每次启动时都面临注册表错误的信息。而且scanregw.exe在启动时必须被禁止,可以使用msconfig.exe来禁止它。
为了使接下来的一次重启更为安全,将start menu从c:\cdrom\w拷贝至c:\cdrom\ramdisk\w
然后关闭windows至命令行状态,将system.dat, system.ini, user.dat, win.ini从c:\cdrom\w拷贝至c:\cdrom\ramdisk\w,若你按上述方法修改了io.sys,此时需要将system.dat改名为system.tat
当再次重启windows时将使用w:盘中的注册表。然而,系统启动时不仅要写访问注册表文件,而且要写访问系统目录。因此从光盘启动系统后系统目录必须改为RAM盘的路径,这个位置在注册表中由以下键值指出,使用regedit.exe修改这个键值为'w:\w':
HKLM\Software\Microsoft\Windows\CurrentVersion
目前start menu驻留在RAM盘上(由subst命令模拟的),但它占用了不需要的空间,因此你需要将其移回光盘:从system controls目录启动TweakUI,选择'General'并且并且调整'Special Folders'的入口,将'Programs', 'Start Menu', 'Startup'改为'x:\w\startmenu'和各自的子目录。在windows98中同时需要调整'Desktop'目录的入口至'x:\w\Desktop',重启后w:\w\Start Menu目录和w:\w\Desktop目录可以被删除。
接下来配置一个真实的RAM盘,再次重启至DOS,用attrib c:\cdrom\ramdisk\*.* -s -h -r /s去掉c:\cdrom\ramdisk下所有文件的系统,隐藏和只读属性。编辑c:\autoexec.bat,删除以下这行:
subst w: c:\cdrom\ramdisk
并且加入如下几行:
c:\w\xmsdsk 4000 w: /y
copy c:\command.com w:\
set COMSPEC=w:\command.com
c:\w\xcopy c:\cdrom\ramdisk\*.* w:\ /s
在启动过程中这些设置分配了4000K内存作为RAM盘,取代了先前由subst命令虚拟的RAM盘。copy命令将命令解释器和系统目录中的注册表文件拷贝至RAM盘,COMSPEC参数则指定了命令解释器的位置。
如果重启后一切运行正常,这时便可删除c:\cdrom\ramdisk\w下的所有文件,除了保留system.ini, user.dat, win.ini, control.ini, system.dat(或者system.tat,如果修改了io.sys的话)。
刻录:
刻录一张启动光盘,你需要一张启动盘活者一个启动盘的镜像文件,这取决于所使用的刻录软件。
因此,需要制作一张普通的启动盘,使用FORMat a:/s或sys a:,复制c:\下先前修改过的io.sys, msdos.sys, config.sys, autoexec.bat至该启动盘,覆盖原来的文件,并且将整个c:\w目录拷入软盘。
现在必须修改a:\config.sys以包含正确的路径。修改的结果如下:
devicehigh=a:\w\himem.sys
devicehigh=a:\w\ifshlp.sys
devicehigh=a:\w\dblbuff.sys
devicehigh=a:\w\setver.exe
device=a:\w\aspi8dos.sys
device=a:\w\aspicd.sys /D:CD001
同样的,a:\autoexec.bat中的路径也必须修改,subst命令必须用mscdex.exe取代,最终修改如下:
a:\w\mscdex.exe /D:CD001 /L:X /M:50
a:\w\xmsdsk 4000 w: /y
copy a:\command.com w:\
set COMSPEC=w:\command.com
a:\w\xcopy x:\ramdisk\*.* w:\ /S
path w:\;x:\w;x:\w\command; x:\w\system
x:
确认mscdex.exe的数据缓冲不至于太小,/M:12的参数和一个快速的光驱,windows可能在启动是因为光驱无法以足够快的速度提供数据而死机。参数/L:X指定了光驱的盘符为x:。
恢复原系统之前你可以将io.sys, msdos.sys, config.sys, autoexec.bat从c:\备份到某一无关的目录,以备后需。并且将c:\backup中的原系统备份拷回c:\并且将先前更名的system.dat, system.ini, win.com改回原名。然后可以启动原系统进行刻录。
该光盘必须含有一个Joliet文件系统并且将c:\cdrom作为它的根目录。
参考书目:
[1] Free Software For DOS, http://www.geocities.com/SiliconValley/Lakes/1401/softlib1.htm
[2] Windows 95 Power Toys Set, http://www.microsoft.com/windows95/downloads/contents/wutoys/w95pwrtoysset/
[3] How to make a PC-bootable CD, http://www.os.rim.or.jp/~gigo/bootcd/index_e.html
[4] WinImage, http://www.winimage.com/
[5] Klaus Ditze, Booten von CD, Neues Feature neue Fragen, c't 12/95, S. 72
[6] Curtis E. Stevens, Stan Merkin, `El Torito?Bootable CD-ROM FORMat Specification, PDF-Dokument at http://www.ptltd.com/techs/specs.html
[7] Ahead Software GmbH, Nero Burning ROM, http://www.ahead.de/
本论坛由小熊在线(
www.beareyes.com
)
joyt
制作及维护