BilinSun 早期的Windows NT光盘是不能直接引导(boot)电脑启动安装的,只能从DOS下启动安装;或者,就要依靠制作启动软盘来引导启动了,随后可以使用光盘的内容。一开始创建软盘是安装过程必经的一个步骤。后来由于光盘也可以启动电脑了,就只保留winnt32 /ox选项提供创建软盘的功能,亦可直接安装,不创建软盘。如果要创建的话,系统会读取安装光盘当中dosnet.inf里提供的文件列表,按照这个列表从光盘中一个一个复制文件到软盘。 Windows 2000当中(从build 1946开始),这一功能被从winnt32中剥离。同时,光盘根目录下开始出现一个BOOTDISK目录,下面有四个镜像文件(CDBOOT1.IMG、……、CDBOOT4.IMG)并两个软盘创建程序(MAKEBOOT.EXE、MAKEBT32.EXE)。也就是说,创建软盘的功能相当于是被做成了小程序。如果需要创建启动软盘的话,直接命令行调用这两个小程序之一即可,跟winnt32已经没关系了。 Windows Whistler开始,光盘里连这些软盘镜像也不再提供了。Windows XP有六张启动软盘,只能从微软另行下载(现在微软官方早已停止提供了)。 Windows Server 2003据说有七张。但是真的有人见过吗?我持怀疑态度。在互联网上多方搜索,都没有找到关于这些软盘的任何信息。 自从Windows Longhorn改用Windows PE启动安装以来,老式的文字安装模式(text setup mode)便退下舞台。既然如此,微软大概也不会为了再做软盘而专门更新那些该模式用到的程序。从此之后,Windows再无启动软盘——至少在我是闻所未闻。 软盘终落进了遗忘。
BilinSun 要想由给定的安装光盘制作启动软盘,我们首先需要知道需要知道应有多少个软盘、向每个软盘复制什么文件。 我们首先想到的是查看dosnet.inf。即使winn32不再主动读取它,我们可否自己来读取它? 但是,不幸的是,dosnet当中的软盘文件列表从某时开始不再获得更新。下图是我随便找的一个36xx的build,应该没有争议它至少该有6张软盘(不少于XP)。可以找到与第一张软盘对应的占位符disk101文件,但是找不到第五张的。
BilinSun 到哪里去找文件列表呢? 根据我以前跟软盘打交道的经验,dosnet这个文件并不被复制到软盘里。换言之,如果dosnet是存储文件列表的唯一信息的话,那么我们仅用软盘启动的时候,它可能甚至不知道它自己有什么文件! 或许在其它哪里还有一个文件列表。 提到文件列表,最容易想到的就是……没错!txtsetup.sif。这个文件承载了几乎整个Windows Installation的文件列表,此外还附有不少其它信息。再加上几张软盘的文件应该是不成问题的。 (下面用的都是3683) 打开txtsetup,最开头的一堆东西就比较引人注意。1到7这一串数字,看上去就像是对应(与Server 2003同样多的)七张软盘。
BilinSun 显然,_1等都是变量,应该要用来标记哪些文件来源于哪些软盘。直接搜索一下可以找到一些行: biosinfo.inf = 1,,,,,,_1,20,0,0,,1,1 ntdetect.com = 1,,,,,,_1,1,3,,,1,1 …… 这正是软盘当中能见到的文件!!
BilinSun 我有点气,所以看了一下有什么文件特别大 这个setupreg.hiv没有压缩啊。另外几个NLS文件占了不少空间。 (背景知识:NLS文件主要用于提供多语言支持。像936、949、950提供中日韩编码支持,对于一个英文启动软盘其实没什么用。) 于是我用makecab把setupreg给压缩了一下。然后邪念一起……
BilinSun 根据我和软盘打交道的经验,我发现这样复制的还少一些东西。 占位文件disk10*没了。如果读不到这个文件,那么安装程序就认为没有插入正确的安装软盘。幸好这个文件的内容是不重要的,所以随便凑出来就好。 txtsetup.sif、setupldr.bin(一般在第一张软盘下)、spcmdcon.sys(一般在最后一张软盘下)还有smss.exe(一般在最后一张软盘的system32文件夹下)在txtsetup里面是没有记载的,不能忘记加。