最新消息:

Booting Windows From CD-ROM (转)

RamOs 大步 1035浏览 0评论

转自:http://pc.beareyes.com.cn/bbs/5/19.htm
Windows无法从光盘启动的原因是启动时Windows会报告无法访问注册表。本文将解释如何消除这些错误并优化光盘启动。
制作一张可启动的Windows光盘,需要至少500M磁盘空间,一些自由软件。并且需要了解一些DOS命令。
本文所介绍的方法只可用于Windows 95b以上的系统和Windows 98,不可用于NT和2000的启动光盘。
实 际上所有的问题就是处理Windows对磁盘的写访问。考虑两个问题:其一,注册表位于光盘的系统可以正常启动并运行。其二,将注册表置于RAM盘。 RAM盘是主存的一部分并被模拟成一个硬盘。其中的窍门是只需要拷贝注册表文件到RAM盘,因此该RAM盘只需4M左右的内存空间。所有启动时无需写访问 的文件都留在光盘上。用这种方法,在没有硬盘的情况下注册表将也可以被写访问。
开始安装Windows之前,需要制作一张启动盘,并且将Win98的安装目录拷贝到硬盘上,这将加速安装的过程。
然后需要创建一些目录:
c:w 将用于光盘的启动镜像
c:cdrom 将作为光盘的目录
c:cdromramdisk 用于存放光盘启动时讲被拷贝至RAM盘的文件
c:cdromramdiskw 作为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
(位于windowscommand目录)
DOS下的光驱驱动,RAM驱动(ramdrive.sys是不合适的,因为不能为它指定盘符,可以使用xmsdsk.exe,可以从【1】免费下载,如果使用了别的驱动,需要修改autoexec.bat中的配置)
重装windows之前必须删除c:config.sys和c:autoexec.bat,并且创建一个新的autoexec.bat,加入下列配置:
c:wsubst.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:whimem.sys
devicehigh=c:wifshlp.sys
devicehigh=c:wdblbuff.sys
devicehigh=c:wsetver.exe
同样再编辑c:autoexec.bat,加入以下配置:
c:wsubst.exe x: c:cdrom
path c:w;x:w;x:wcommand;x:wsystem
取走软盘,按ctrl-alt-del重启并且完成 安装。至此,你可以在这个系统上安装一些必须的驱动和应用程序,这些最终都将放入光盘,比如声卡和显卡驱动。为了使稍后的安装更为简便,你需要安装 TweadUI工具。在windows98中你可以在toolsreskitpowertoy目录中找到,windows95版本可以在【2】免费 下载。
现在来为注册表准备RAM盘,依旧使用subst命令,在c:autoexec.bat中加入下面这行:
c:wsubst.exe w: c:cdromramdisk
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:cdromw拷贝至c:cdromramdiskw
然 后关闭windows至命令行状态,将system.dat, system.ini, user.dat, win.ini从c:cdromw拷贝至c:cdromramdiskw,若你按上述方法修改了io.sys,此时需要将system.dat 改名为system.tat
当再次重启windows时将使用w:盘中的注册表。然而,系统启动时不仅要写访问注册表文件,而且要写访问系统目录。因此从光盘启动系统后系统目录必须改为RAM盘的路径,这个位置在注册表中由以下键值指出,使用regedit.exe修改这个键值为'w:w':
HKLMSoftwareMicrosoftWindowsCurrentVersion
目前start menu驻留在RAM盘上(由subst命令模拟的),但它占用了不需要的空间,因此你需要将其移回光盘:从system controls目录启动TweakUI,选择'General'并且并且调整'Special Folders'的入口,将'Programs', 'Start Menu', 'Startup'改为'x:wstartmenu'和各自的子目录。在windows98中同时需要调整'Desktop'目录的入口至'x:w Desktop',重启后w:wStart Menu目录和w:wDesktop目录可以被删除。
接下来配置一个真实的RAM盘,再次重启至DOS,用attrib c:cdromramdisk*.* -s -h -r /s去掉c:cdromramdisk下所有文件的系统,隐藏和只读属性。编辑c:autoexec.bat,删除以下这行:
subst w: c:cdromramdisk
并且加入如下几行:
c:wxmsdsk 4000 w: /y
copy c:command.com w:
set COMSPEC=w:command.com
c:wxcopy c:cdromramdisk*.* w: /s
在启动过程中这些设置分配了4000K内存作为RAM盘,取代了先前由subst命令虚拟的RAM盘。copy命令将命令解释器和系统目录中的注册表文件拷贝至RAM盘,COMSPEC参数则指定了命令解释器的位置。
如 果重启后一切运行正常,这时便可删除c:cdromramdiskw下的所有文件,除了保留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:whimem.sys
devicehigh=a:wifshlp.sys
devicehigh=a:wdblbuff.sys
devicehigh=a:wsetver.exe
device=a:waspi8dos.sys
device=a:waspicd.sys /D:CD001
同样的,a:autoexec.bat中的路径也必须修改,subst命令必须用mscdex.exe取代,最终修改如下:
a:wmscdex.exe /D:CD001 /
L:X /M:50
a:wxmsdsk 4000 w: /y
copy a:command.com w:
set COMSPEC=w:command.com
a:wxcopy x:ramdisk*.* w: /S
path w:;x:w;x:wcommand; x:wsystem
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/

转载请注明:大步's Blog » Booting Windows From CD-ROM (转)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
SiteMap