DOS网络启动盘

 
DOS网络启动盘
 
 
 
这张从97年到现在我一直保留并维护的工具盘,也许平时用的机会不多,但总在关键时刻救急。它能帮你在无法通过光驱安装操作系统时,通过网络或USB移动盘把几百兆的Windows系统安装文件复制到本地硬盘来进行安装。当然还可以用它来干别的,不过对我来说,这才是我一直不断更新它的最重要的原因。现在网上类似的东西很多,尽管在吸收他人作品的优点时自己这张盘里使用的工具程序等内容也和其它作品越来越相近,其间随着主流网络技术的更替也换用了好几种系统,但在主体逻辑和操作界面方面一直保持着简朴实用的风格。所以也许是因为用惯了,还是觉得自己的比别的都好用……
 
用途
  • 支持以微软网络客户访问和提供局域网共享资源;
  • 支持以包驱动方式访问局域网和互联网上的TCP/IP服务;
  • 可通过PPPoe拨号用基于包驱动的应用程序访问互联网上的TCP/IP服务;
  • 多种网卡支持(须下载驱动包软盘)、自动检测PCI网卡,对驱动包中不含、但自己有NDIS2驱动文件的网卡,提供便利的方式直接使用(详见文中网卡驱动的替换部分);
  • 支持IDE/USB/1394/PCMCIA光驱和USB硬盘/软驱;
  • DOS 7.1启动,支持FAT32,也包含了只读版NTFS和长文件名支持。


下载地址

此处分别提供一组软盘映像和一个启动光盘范例。软盘主要是为在无法使用光驱启动的情况下使用,而范例光盘则包含有软盘文件中的绝大多数内容,在便于测试的同时也具有一定实用性。供下载的文件中有些也许是您用不上的,因此您不必下载所有文件,建议您阅读本文后根据您需要使用的内容有选择地下载。

以下下载链接均存放于Google服务站点,但因网络审查影响有时访问不正常;另提供一组具有RSS功能的镜像位置,链接不分别列出。

  • 软盘映像下载
    部分软盘分别提供img格式和exe格式,两者内容是相同的,无须重复下载。其中,img格式可用各种能读写原始软盘映像格式的程序打开后写入物理软盘片,如DOS下的rawrite、di、dcf/dcp、diskdupe、hdcopy等、Windows下的WinImage、Linux下的dd等;exe格式是由WinImage生成的自解压文件,可在任何win32环境中运行并直接将内容写至物理软盘片。您可根据需要下载方便使用的格式。

    启动软盘(含RTL8139、Intel PRO/100/1000、AMD PCNet、DC21x4五个系列的网卡驱动

    [img] [exe]

    网卡驱动(共含96种PCI网卡及ISA、PCMCIA网卡驱动,兼容卡不在此计,非PCI网卡须手选)

    [img] [exe]

    一些为该启动盘配置好的常用的包驱动应用程序

    Arachne图形浏览器(此处版本为英文版,用RUNME运行;可显示中文的版本体积较大仅包含于光盘范例中)

    [img]

    Lynx文本方式浏览器,可支持GB2312编码的网页

    [img]

    远程客户端合集:RDP/MS终端服务、VNC、Citrix ICA、Winternals RRC

    [img]

    EzNos:DOS下简单的WWW/FTP/SMTP服务器

    [img]

    FTP、Telnet客户端、Ghost 7.5、NetCopy网络硬盘复制

    [img]

    其它包驱动程序

    [rar]
     
  • 启动光盘范例
    这个范例是为方便测试而提供的,因此比较简陋。且存储空间限制单个文件不能超过10M,所以其中的驱动和应用程序都只包含最常用内容。需要的话请自行下载软盘映像或压缩文件,一般只需将其中内容展开并存储于光盘文件的相应目录即可(例如可将完整驱动软盘中那个drvpk开头的文件代替光盘中\ndisdrv目录里原有的文件)。 [下载
    ]

    光盘范例里已经容纳了一些额外的常用的工具,并整合了一个简单的导航选单以方便直接使用这些工具,同时也示范了一些DOS批处理的简单技巧,有兴趣的不妨看看。需要的话可此光盘范例也可直接利用ISOEMU放在Windows XP里做成镜像文件引导。

    较新的光盘范例里包含了一个修改的Arachne。是在1.90J1的源码基础上修改后为Arachne加入了对中文页面的一些有限的支持,能显示GB2312、BIG5、UTF-8 编码的中文网页。这个版本很粗糙,不能输入中文、不常用的标点符号也不能显示、另外汉字自动断行等方面还有好多瑕疵,且汉字显示速度很慢,即使是放在RAM Drive里运行也感觉慢(显示汉字时是直接从文件里读字模的所以……很抱歉)。

  • PXE启动映像范例
    请根据需要自行修改USERPROF.BAT、AUTORUN.BAT等文件。 [下载]

其它相关下载请见下文中的链接。


使用说明

坦率地说,这个工具不是完全“傻瓜型”的工具,使用的人光对DOS熟悉还不够,必须了解一些关于网络的知识。建议使用者耐心把本文看完,尤其是后面技术信息中的一些内容,也许会对不熟悉的人多点帮助;如果是在虚拟机上测试,还请阅读后面关于虚拟机网络配置的一些说明。

对各菜单的说明

启动菜单针对不同的需要而设置。了解了各个菜单的设置意图,用的时候就会感到方便了。

  • 第一级菜单用于选择需要加载哪些驱动、外加一个“干净启动”的选择:
    1. DOS only, with utilities cached to ramdisk
    2. Data Storage support (CDROM/USBHD/UDMA etc.)
    3. Network support only
    4. Network + IDE/USB/PCMCIA CDROM support
    5. Clean boot options (edit.com available)

各选项用途如下:

    1. 仅启动DOS并将常用程序展开到虚拟盘;
    2. 启动时加载外接存储设备驱动或UltraDMA驱动;
    3. 启动网络支持(通常用范例光盘启动的需要网络功能时直接选这个即可);
    4. 启动网络支持并加载外接存储设备驱动;
    5. 几种常用的干净启动模式(仅加载DOSKEY,可使用EDIT.COM对启动配置进行编辑)。
  • 若选择上述选项2或4,则需要手工选择要加载的外接存储设备驱动程序的类型:
    1. IDE CD
    2. USB CD/HD/FD + IDECD
    3. 1394/Firewire CD/HD + IDECD
    4. PCMCIA CD + IDECD
    5. UltraDMA HDD              <– 该项在选择网络支持时没有,反正这时通常用不着那么高速度。
    6. <<< Return

注意这里选择2、3、4启动后A盘会被替换成一个只读的内存盘,所以软驱将不能用了(这是为防止加载那些设备的驱动程序时会造成设备被复位,从而导致启动到一半时找不到引导文件,所以要用RAMFD来建立一个内存盘把启动盘内容预读进来),这种情况下就不能直接使用额外的软盘来加载网卡驱动包了(但可事先用软盘启动,不选存储设备支持,把检测出的网卡驱动保存在启动盘上再重新启动,这样就无须更换软盘了)。

  • 启动网络支持时(第一个菜单里选3或4后),其中包含的一个基本驱动包会显示一个只有5种网卡驱动的菜单、外加0和9两个选项(做成光盘引导时不会出现9,可将驱动包里那个名字以drvp开头的文件放在光盘的 \NDISDRV 目录里,用带IDE光驱支持的选项启动,一般就能自己找到驱动包;也可把启动软盘映像改成288的,把驱动包文件放到软盘映像的\NET目录里):

[0] Do not start network support at this moment
[1] RTL8139 based PCI NIC
[2] Intel Pro/100ve/vm PCI NIC
[3] AMD PCnet Family PCI NIC
[4] Digital Semiconductor DC21X4 series
[5] Intel Pro/1000 Gigabit NIC
[9] I have the Supplemental Driver Pack diskette

选0会停止加载网络,1~5分别可用于:

    1. 台式机常见的RTL8139及兼容网卡
    2. 笔记本常见的Intel Pro 100vm网卡(台机上的Intel Pro 100ve也能用)
    3. VMware虚拟机用的AMD PCnet系列网卡(InnoTek的VirtualBox也是这个网卡)
    4. 微软或Connectix的Virtual PC产品用的DC21x4系列网卡
    5. 台式机常用的Intel Pro/1000千兆卡

如果制作了驱动包软盘,此时可以把启动盘取出换上驱动包软盘,然后按9。如果在驱动包中找到了能用的驱动,又希望能将该驱动保存在启动软盘上的话,可以在屏幕提示时选择保存、并将启动软盘放回。这将删除启动盘中原有的4种网卡的基本驱动包,这时启动盘上有大约70K左右空间,除少数网卡的驱动外都能保存进去。保存后以后再启动时就不会出现这个网卡选择的菜单了。

扩展的驱动包软盘可自动检测约50种PCI网卡(兼容产品不在计算之中),另可手选40多种ISA卡和PCMCIA卡。

检测到多网卡时也须手选,但因有些驱动不支持用来指定网卡的配置参数,所以有时还会出现驱动找不到网卡的问题。

  • 之后就是网络支持的主菜单了。其中包含了若干典型的网络应用模式:

[0] Do not load network support at this moment.
[1] Ethernet Packet Driver only
[2] MS Client – TCP/IP with Packet Driver support
[3] MS Client – TCP/IP
[4] MS Client – NetBEUI
[5] MS Client – IPX (MS NWLink)
[6] MS Client + Peer Server – TCP/IP only
[7] PPPoE dialup link (Packet Driver)

大体上分成对两类典型应用的支持:一类应用是基于微软网络客户的访问(通常是访问局域网上的共享文件夹这样的资源)此处称为“客户级的访问”;另一类通常是通过包驱动接口使用TCP/IP协议访问局域网或公网上的主机所提供的服务(例如HTTP浏览、FTP下载、用Ghost以对等克隆或者单播/多播/广播方式的克隆等),以下称为“包驱动应用”。

这两类应用本来是位于两个层面的内容,本身是可以同时存在的,但是对于DOS应用来说,由于内存的限制,一般来说同时使用两者是不必要的,所以在这个菜单里基本是把两类应用分开来提供的(选项2是个例外,它可同时供两种需要使用,但是剩下用来运行程序的内存一般也就400K左右了)。详见下文说明。

  • 选项1、2、7都可以为包驱动的应用提供支持。其中1和2用于访问局域网内资源、或通过路由网络来访问互联网资源;7则是专门为了用于使用与本机网卡连接的DSL猫通过PPPoe拨号连接来直接访问互联网上的下载资源而提供的。

在使用局域网或路由网络使用包驱动应用时,通常选项1是最有效率的选择,因为这种模式下加载的东西最少、要配置的内容也少,不仅启动的速度快,而且留给应用程序的可用内存较多,所以此项是推荐的选择。

选项2能同时支持包驱动应用和基于MS TCP/IP的客户级访问。对两种情况来说这样会很方便:一种情况是用Ghost时,既可以用Peer和Cast的方式、又能访问映射成逻辑盘的网络共享上的文件;还一种情况就是索性把那些如Lynx、Arachne这类包驱动应用软件直接放别的机器的共享文件夹里映射成逻辑盘上运行。这类程序往往个头都不小,没光驱的时候从网络上执行的确比用软盘省时省力。

选项7提供通过与网卡连接的DSL modem建立PPPoe连接的能力,实质上就是在以太网卡的包驱动上加了一层PPPoe封装。不过由于各地DSL规范的不同,这里选用的PPPoe驱动程序(PEPA)可能不一定能广泛应用(我在北京电信的ADSL上试过能用,其它符合欧洲标准的也应该可以)。有可能你需要修改ADSL.bat文件来使其配置符合自己的使用。

  • 选项2~6是提供对微软网络客户的支持,相当于在Windows系统的网络配置里绑定了那个“Microsoft网络客户端”服务,说通俗点就是能访问共享文件夹等资源。

其中2也可用于包驱动应用,这已在前面说明过(整体来比较的话,选项2就是选项1和3的合并。它比1多了3的客户访问部分,比3多了1的包驱动部分)。此处不多赘述。

其中3~5是用不同的协议仅启动客户端功能,就是说能访问网络共享,但是自己这台机器不能提供共享;6则可在这台计算机上设置共享,以允许其它电脑访问。尽管IPX兼容协议和NetBEUI在新的网络中使用较少,但对msclient来说网络客户跑在两者中任何一个之上都比跑在MSTCP上节省不少常规内存。维护工作中在需要运行放置在网络共享里的DOS程序时,这点内存也许会决定一些工具程序是否能够运行,因此保留它们。

6的用处除了可以把这台DOS计算机当成文件和打印服务器外,更实际的用处是:有时我们需要的文件在一台没有设置共享文件夹的Windows计算机上,但是在那台机器上却只有个普通用户帐户(设不了共享),这种情况下可在DOS机上用模式6启动网络,并用 net share myshare=d:\incoming /full 这样的命令把DOS机上的文件夹设置为可写的共享,Windows机器的普通用户就能从那台机器上把需要的文件复制到例如\\dossvr\myshare 这个共享文件夹里了。

目前使用模式6启动对等共享只加载TCP/IP协议,启动后所剩内存已经不足400K了(视具体情况)。如果希望使用NETBEUI或IPX兼容协议,可以选0退出后运行

        MSNET ASERVER

此方式会绑定上述三种协议,但占用的内存就很多了,基本上也就能用来复制文件了。

关于如何输入IP地址、机器名什么的就不用说了。这里要提醒用过MS Client的人,若是自己指定IP,在那个黄色的提示后面请输入用点分开的IP地址,如192.168.0.10、255.255.255.0等,别按MS Client的默认方式用空格分隔。

至此,关于各个菜单就都介绍完了。使用方面其实没什么好说的,用MSTCP的,可以用ping测试一下;用微软网络客户的可以net view一下;包驱动及ADSL拨号的可以用pdping测试。

技术信息

  • 一些对不熟悉DOS网络应用的人的帮助

    大体上和Windows下的网络支持具有相似的层次,MS Client中也包含相应的“网卡”、“协议”和“网络客户”几个层次的内容。但是包驱动则是独立的一支。这里提供的网络启动盘中的网络连接是大体符合下面的结构的:

      基于包驱动的应用程序                  基于微软网络客户的对网络共享的访问
            |                                      |
        dis_pkt.dos                   MS Client提供的三种协议及微软网络客户
            |                                         |
            \-------------------+---------------------/
                                |
                       PROTMAN.EXE和网卡驱动模块
    可以看出,包驱动支持是独立于MS Client提供的几种协议的,就是说它不需要MS Client的任何协议的支持就能运行,也能和它们自由组合。另外,这也意味着基于包驱动的TCP/IP应用程序完全不使用MS Client的TCP/IP支持。所以如果用MS Client自带的ping.exe去测试用包驱动建立的PPPoe连接就是驴唇不对马嘴了。启动盘里提供的pdping.exe可用来在包驱动下测试连通性

    对wattcp应用程序来说(使用包驱动的一类),必要时可以直接修改环境变量或wattcp.cfg文件中的配置,大多数情况下不用重新启动电脑、只要重新进入一下要用的应用程序就可以,因为这里面的配置不驻留在内存里。而在使用MS Client的协议时,变更了配置必须重新启动。

    关于通过微软网络客户访问共享资源的一些注意事项也在下面说明,你必须自己用net use建立对其它机器上的网络共享的映射,或用net share在本机上创建共享。需要的话请看net help提供的简单帮助。

  • 关于微软网络客户要注意的几个问题

    1. 输入工作组名字的时候一定要保证这个组里必须有至少一台配置有相应协议的“Samba服务器”(就是启动了Computer Browser服务的Windows机器、或开了Samba支持的Linux主机),否则DOS机找不到其它电脑,反之亦然。
    2. 在登录到NT域时,提供共享的计算机和提供鉴权的域控制器都必须启动Net Logon服务,如果是Windows 2000/XP的计算机,还要注意有关的安全策略中的设置。
    3. 需访问装有防火墙的计算机上的共享时,请注意该机防火墙的设置应允许TCP 139、445端口以及UDP 137、138;同时对有些情况还应该进一步注意DOS客户所在的网络是否在这些端口设置所允许的范围内。
  • 关于PPPoE和ASDL拨号

ADSL拨号的建立是由ADSL.BAT的文件来进行的,目前这个文件还比较粗糙,所以使用时需要点仔细和耐心。
建立连接时,正常时脚本可以自动检测到连接的建立的,它用轮询的方式不停地ping几个测试服务器的,如果可通则自动退出。但的确发现过有些时候建立连接后要过相对较长的一段时间才能通,此时会显示那个故障定位帮助的屏幕。这时候请仔细注意屏幕右上角闪动的状态指示(是黑底白字的字母、数字和标点符号,有点难于辨认),如果没看到字母,请稍微多等一阵,通常半分钟之内总会看见。然后再在键盘上按那个字母对应的键,一般按的时候要迅速地连续按两下才行。字母P意味顺利,其它则请根据帮助信息检查后按R重试。

本文其它部分还有一些关于PEPA的说明,请适当参阅。

ADSL.BAT是toggle型的工作方式,第一次运行是拨号,第二次是挂机。
需要重新输入用户名和密码的话可执行 ADSL ! (字母和后面的叹号之间有个空格)。

  • 用软盘启动时,我选择了保存检测到的网卡,如何删除保存的网卡设定并恢复网卡选择菜单?
    对软盘来说,最省事的办法是重新用映像文件做张新启动盘。如果是手工操作,可删除软盘上\net目录里除 dosnetx!.exe 外的其它文件,再把镜像文件中的基本驱动包drvpk!.exe复制到软盘的\net目录里即可恢复。



网卡驱动的替换

  • 使用自己的网卡驱动:
    对驱动包里没提供驱动的网卡,一般可通过其它办法知道网卡的厂家和型号(例如通过其它操作系统获知、从相同配置的机器上了解到、从购机的产品配置单里知道等),然后通过搜索引擎查找一下这种网卡的NDIS2驱动通常就能找到。下载到的压缩包中扩展名是.dos的即是NDIS2驱动文件,与此文件相伴的一般还有一个名为protocol.ini的文件,其中Drivername一行含有网卡驱动使用的逻辑设备名,多数情况下这个设备名是驱动文件的基本名后面加了一个美元符;有时该文件还会包含一些可选参数。

    方法1:单个驱动文件的速成法
    该方法能对付大多数使用PCI网卡的情况,只要如上所述驱动文件的基本名和设备名里不含美元符的部分相同即可使用此方法。对于驱动包中没有包含的网卡,若有正确的NDIS2驱动文件,则不妨用这个方法尝试一下。

    直接把扩展名为.dos的驱动文件复制到启动软盘的NET目录、或启动光盘范例及模拟USB-HDD启动的闪盘的NDISDRV目录里即可,但要保证该目录中仅此一个以.dos为扩展名的文件(原来的驱动包drvp*.*文件可删除),启动网络时会自动使用该驱动。

    方法2:手工添加(PROTOCOL.INI或SYSTEM.INI文件包含自己加入的内容时)

    如果手头已经有了需要的NDIS2驱动文件,可直接把此文件复制到启动盘NET目录下,必要的话可以删除该目录中drvp*.*文件以获得空间。同时在NET目录下手工创建两个INI文件,内容如下:

    SYSTEM.INI
    [network drivers]
    netcard=驱动文件名(别忘掉文件扩展名,如DC21X4.dos)

    PROTOCOL.INI
    [NICDEF]
    Drivername=设备名

    其中设备名通常就是驱动文件基本名后面加个美元符$,如DC21X4$;如果伴随该文件有原厂的protocol.ini文件则直接在原厂protocol.ini文件前面加上“[NICDEF]”一行即可。

    如果需要使用其中的网卡启动参数进行特别设置的话(一般是加在“Drivername=”这行下面的内容),可再创建一个和驱动文件具有相同基本名、而扩展名为.ini的文件(例如对DC21X4.dos就是DC21X4.ini),里面的内容如下:

    驱动文件基本名.INI (其实可用原厂protocol.ini直接更名而得到)
    Drivername=设备名
    参数=值

    用修改后的启动盘重新启动后将直接跳过选择网卡的提示,但需要到真正启动网络功能时才能知道驱动是否被正确加载了。

  • 自己的驱动包
    也可将自己常用的驱动制成文件名以drvp开头的cab文件放入启动盘net目录、或启动光盘\ndisdrv目录、或单独软盘中,启动时在需要确定网卡驱动时会自动寻找符合的文件并运行里面名字为drvpak.bat的批处理文件,一般来说这个批处理文件只要象上面所说那样把合适的驱动文件复制到%netdrive%\net这个目录里、并且如上产生那几个INI文件就可以了。

定制自己需要的网络功能

制作此启动盘是意图满足多种需要,因此用它启动时需要用户选择或输入各种内容。用于应用环境和所需功能相对确定的环境时,可以通过少量定制来减少或完全消除用户干预。

首先,如果不想在启动时出现开头的启动配置选单,需要自己编辑config.sys文件,去掉不需要的内容,但要注意留下的设置中至少要包括以下内容(其中粗斜体的部分自己根据需要决定):

DEVICE=\DOS\HIMEM.SYS /TESTMEM:OFF /SHADOWRAM:OFF
DEVICE=\DOS\EMM386.EXE NOEMS I=B000-B7FF VERBOSE
DOS=HIGH,UMB,AUTO
DEVICEHIGH=\DOS\IFSHLP.SYS
DEVICEHIGH=\DOS\ELTORIT0.SYS /D:EMUCD$
STACKSHIGH=9,256
BUFFERSHIGH=30,0
FILESHIGH=30
FCBSHIGH=4,0

SHELL=COMMAND.COM /p /e:1024 /f
LASTDRIVEHIGH=Z
SET PATH=\DOS
INSTALL=\DOS\XMSDSK.EXE v: 16000 /t /y
SET MODS=ASK

注意上面最后设置MODS环境变量的行,要自动启动网络功能,务必保证在config.sys中将此变量设置为合法的值(参看后面说明)。

之后详述对网络功能的定制,这可分成两部分,其一是确定要启动哪些网络模块(可以理解为网络功能主选单供选择的那些种模式,当然还有个别额外的选择)、以及相应需要用户输入的参数(比如IP地址或者登录方式等);其二是启动过程完成后需要执行的后续操作(例如映射网络驱动器、运行自己的选单或应用程序等)。

对第一部分内容,主要是由预设环境变量完成,这可通过在启动盘上的config.sys中用set命令设置,但是在config.sys中进行设置的话如果有需要临时变化的需要,则没有机会变更。所以也可将对这些变量的设置单独写在一个名为userprof.bat的文件里,把该文件放置在启动软盘的net目录下或者启动光盘的ndisdrv目录中(如果启动时同时在两个位置找到同名文件,则光盘上的起作用)。使用userprof.bat的好处是在执行它之前用户可以看到一个询问是否跳过该文件的提示(默认是不跳过),若在3秒钟之内选择跳过它的话则有机会手工选择所需的网络功能和配置参数。

下面详细说明可供定制的变量。

首先必须设置的是MODS变量,它决定的是和你在网络模块选单中选1-7一样的内容,可选的设置值是:

MODS
设定值

对应选单选项

支持的网络功能

PDO

1

以太网卡的包驱动应用

IP_PD

2

微软TCP/IP协议上的网络客户访问,同时也提供包驱动支持

IP

3

微软TCP/IP协议上的网络客户访问

IPX

4

微软IPX兼容协议上的网络客户访问

NETBEUI

5

微软NETBEUI协议上的网络客户访问

SERVER

6

通过微软TCP/IP协议作为文件和打印服务器运行(含客户功能)

DSL

7

通过和网卡直接连接的DSL猫进行PPPoe拨号,以使用包驱动应用程序

ASK

强制出现网络模式选单

PD

同时支持包驱动和用MSTCP的TCP/IP应用(但不含网络客户)

ASERVER

作为文件和打印服务器运行,支持三种协议

不设置

启动时直接跳过网络功能

要注意的是,这是唯一一个必须在config.sys中进行赋值的变量,如果在config.sys中没有赋值,则启动时会直接跳过网络部分,也根本不管userprof.bat里是如何设置的。如果使用userprof.bat进行定制,可以在config.sys中将MODS设为ASK。只要userprof.bat被执行,其中的设置就会取代原来的ASK。

在用到IP协议时可设置的环境变量有(若不设置,则需要时提问用户输入):

变量名

说明

IP_ADDR

可为点分隔的静态IP,或AUTO/DHCP等(对使用DHCP分配的建议设为DHCP)

NETMASK

点分隔的子网掩码(自动分配时可不设)

GATEWAY

点分隔的网关地址(自动分配时可不设)

NAMESVR

点分隔的域名服务器地址(自动分配时可不设)

使用网络客户功能的还应设置(若不设置,则需要时提问用户输入):

变量名

说明

HOST

本机的NetBIOS名,即所谓的NTLM格式。可用一个点表示自动随机生成(SERVER模式下则固定为DOSSVR)

WKGP

工作组名

DOMAIN

域名。写的话则登录到此域,写成一个点则仅使用对等鉴权(不设则会提示输入)

USER

登录的默认用户名

PASS

登录密码,大小写敏感(建议留空,还是每次自己输入较好)

HOME

可设置为一网络共享的UNC路径,则登录后自动将此共享映射为Z盘并在启动后自动运行其中的autorun.bat文件。若不设置此变量也不会提示用户输入,当然也不会自动映射Z盘和链接其上的autorun.bat

关于以上变量的说明也可参阅光盘范例中\ndisdrv\userprof.txt文件。

启动网络后,基本上启动盘上的脚本就要退出了。如果希望在这之后运行自己的批处理文件来进行后续操作,则可把自己的批处理文件命名为AUTORUN.BAT,并把它放置在某些特定位置上,启动脚本会自动在这些位置找寻此文件并运行它。这些位置可以是:

  1. 启动盘的根目录;
  2. Z盘的根目录(仅当启动了网络客户并设置了HOME变量,且能正确将Z盘映射到此路径时);
  3. 启动光盘的根目录;
  4. 其它光盘的根目录。

如果多个位置都存在此文件,则启动盘根目录的会先被执行,而后面各处的只会运行按上面顺序找到的第一个,这是为了防止混乱。而对启动盘根目录中的此文件优先运行、且不会导致跳过其它位置的文件,则意图在开始进一步寻找其它位置上的autorun文件前,在该脚本中包含更复杂的网络登录和逻辑盘映射处理。

 

 

启动介质的转移


变更启动介质

此启动盘在设计时已注意到对使用不同启动介质的需要。对大部分情况来说,在需要变更启动介质时,一般只要保持原目录结构进行文件复制即可。如果对比下载里提供的不同启动盘就会发现,其实启动光盘范例中包含的启动软盘是和直接下载的软盘映像文件没有任何区别的;而PXE启动映像范例中也只是去掉了网络启动中不需要的功能、并加入了网卡驱动包而已,其余大多数文件也都是一样的。

尽管现今的启动方式很多,但无论是软盘、光盘(又分仿真方式和非仿真方式)、USB盘(又分可模拟为软盘的和可模拟为硬盘的)、映像文件引导(如ISOEMU、VFLOPPY、或者通过网络远程引导),都无非是将启动的逻辑盘虚拟为A盘或C盘,对此类情况本启动盘可尽量容纳,但有少数问题要适当注意。

对硬盘启动、或虚拟为硬盘的各种启动方式,基本上没有特殊要求,直接将空间作为C盘格式化后,保持原目录结构进行文件复制即可(注意复制隐藏的系统文件)。网卡驱动包和userprof.bat可放在NET目录里(autorun.bat还是要放在根目录下)。

对软盘启动、或虚拟为软盘的各类方式,如果仿真的是超过了1.44M容量的软盘,在需要加载一些额外的存储介质驱动程序时(如USB CD/HD驱动,甚至是使用USB软驱启动、而需要访问USB硬盘时),极少数情况下会出现因硬件复位造成的挂机。这是因为起保护作用的RAMFD不能处理大于1.44M容量或非标准格式的磁盘映像而无法提供保护所致。所幸此类情况比较少见。

虚拟为软盘启动时的另一个问题是网卡驱动包的放置。对光盘来说我倾向保持1.44M标准格式的软盘文件,这一则因为我维护这个启动盘比较省事,二来从光盘启动时难免会遇到启动光驱正好就是挂在USB或1394接口上的。网卡驱动包和userprof.bat可放在光盘的NDISDRV目录里(autorun.bat还是要放在根目录下)。

当然,如果觉得前述问题不足为虑,或者如远程引导这样的情况来说,为包含足够的内容则可以索性采用大容量的软盘映像格式。网卡驱动包和userprof.bat可放在NET目录里(autorun.bat还是要放在根目录下)。

下面是一些比较常见的变更启动介质的情况:


用于PXE启动或其它远程无盘启动

进行网络引导的机制不同,此处不解释具体设置。各种无盘启动时都有相应程序制作启动映像文件,而主要问题是用于无盘启动的所有文件必须都放置于同一个逻辑盘的映像中,这一来的麻烦主要出在网卡驱动上面。启动盘里那个基本驱动包所含内容很有限,对大多数情况来说是不能满足需要的,而完整驱动包又很大,不能放在1.44M的启动盘里。

可以考虑两种解决方法:一种是对不同的网卡做不同的启动映像,并在服务端人工指定使用哪个映像来引导;另一种是所有机器都用一个扩容的启动映像,在启动映像里加入可以自动检测网卡的驱动包,由脚本来判断实际用哪种驱动。

  • 在网络中远程启动客户端数量不大,且网卡类型相对较少时,第一种方法其实很省事。只要在每种网卡的机器上用启动软盘启动后插入补充的网卡驱动盘,检测到合适的驱动后,将驱动保存回启动软盘就行了。通常这都是自动进行的,你只需注意提示、选择“保存”并换盘即可。而在引导服务端,把这些更新好驱动的启动盘通通制成引导映像,按客户端的MAC地址分别指派即可。一般都能从这些MAC看出其网卡的厂家,所以也不会选错映像。
  • 另一种办法其实就是做个大容量的启动盘,够把需要的东西放进去而已。依我愚见,这样做唯一的好处是所有客户端都使用同一个启动映像,服务端的启动配置上不用做特别处理。不过用这办法有个前提,尽管通常不是问题但还是要提一下,就是所使用的远程引导技术支持、并且用来生成引导映像的程序也能处理大于1.44M的磁盘格式。对这句话前半句的解释是,有些老技术确实不支持1.44M以上的格式,因为那时候还没出现更大的软盘,好在对现今来说这不是问题。后半句基本可以理解为那个映像生成程序能直接处理WinImage这类程序生成的磁盘映像文件,如果它只能从物理软盘上读内容的话,那除非你真能去找一套2.88M或者更大的驱动器加软盘片了。所幸的是实际上这不难满足,一般远程启动映像无非也就是在普通映像前面加个头、或者在引导区部分改动几个字节,多数目前常用的生成工具都能胜任。对不少人还在使用的3Com DABS来说,尽管它只能从普通软盘中创建引导映像,但可以编辑WinImage处理好的标准映像。

具体操作很简单,用WinImage等程序可以轻易地将1.44M格式的启动软盘转换为2.88M格式,之后可以将网卡驱动包文件放入启动盘的NET目录下,同时删除原有的基本驱动包DRVPK!.cab文件,再做进一步处理即可。本文前面提供下载的PXE启动映像范例就是用这个办法制作的,使用时请先根据自己情况适当修改其中的USERPROF.BAT、AUTORUN.BAT等文件的内容。

还可以用WinImage使用更大容量的非标准格式软盘映像。象DABS可以处理最大到16M的映像文件,不过我个人认为对此应该有严格节制,还是应尽可能地用其它方式来访问启动时不一定必须的内容。因为大容量的启动映像不仅可能存在兼容性的问题,更重要的是会直接增加网络及服务器的压力。供下载的映像范例其实至少还可以减小几百K,对无盘站来说里面例如各种存储设备的驱动、若干DOS工具、还有PEPA等都没必要包含在里面。甚至网卡驱动包也可以去掉那些根本用不着的内容。尤其是对启动了网络客户的情况来说,多数的应用程序更应该放在网络共享上而不是启动映像里。总之在经常需要无盘启动的环境下,还是该尽可能根据自己需要量身定做启动映像。

要注意的是,用于不同远程启动环境的启动映像当然是不同的,标准的软盘映像其实是可以直接用在NetWare RPL的方式的,而相同内容的映像用于PXE的话文件前面就要增加一个引导信息头了,所以要注意这个映像的格式。以DABS的映像编辑器来说,制作PXE引导映像时,要在打开WinImage生成的映像文件后,将属性从默认的NetWare格式改为TCP/IP格式。

在进行远程引导后一般都是需要运行存储于网络共享下的更多更复杂的应用程序的(最常见的无非又是ghost了),只要网络客户顺利启动,这些都不再受到引导映像大小的限制,因为可以放置在网络共享中了。对网络管理员来说,此时所需的进一步调整仅仅是适当调整引导映像中的内容来贴合自己的具体环境了。例如:

  • 去掉CONFIG文件中不需要的选项;
  • 在NET目录中创建USERPROF.bat文件,定制启动盘以IP_PD方式启动网络、设定以DHCP方式配置IP;
  • 在启动盘根目录下创建AUTORUN.bat文件,登录网络客户、将放置公用程序的网络共享映射为逻辑盘、运行其中的某个应用程序或其它批处理文件等。

更多内容除可参考PXE启动映像范例和启动光盘范例外,还请细读前面有关定制部分的说明。


用启动软盘制作启动光盘

可引导的光盘有仿真方式和非仿真方式之分。仿真方式是指直接将可启动的软盘映像或硬盘映像文件的内容作为光盘引导块内容写入,启动时由BIOS程序来将其作为仿真的软盘或硬盘来启动。非仿真方式则是在光盘引导块内包含了专门的引导代码,由该代码直接完成引导、或从光盘数据区读入标准格式的映像文件再模拟成软盘来启动;可实现该功能的工具很多,常见的如bcdw、grub、isolinux等。此处供下载的光盘范例就是使用BCDW的。

对非仿真方式的引导光盘,通常使用ELTORIT0.SYS作为光驱驱动即可自动找到启动光盘所在的光驱,而仿真方式的启动光盘则需要根据光驱的实际类型来选用合适的驱动。

如果需要将驱动包或定制文件放置于光盘中,可在光盘根目录下建立一个名为NDISDRV的子目录,将驱动包软盘镜像中的文件(drvp开头的那个)和修改好的USERPROF.BAT放于其中,启动后即可自动用该驱动包来检测网卡以及载入USERPROF文件指定的配置。


使用ISOEMU进行镜像文件引导的办法

提供下载的启动光盘范例可以直接用来供ISOEMU使用。下载isoemu后把ieldr和那个iso文件放到C:\下,修改、制作好boot.ini和isoemu.ini就行了。

制作闪盘或USB硬盘引导的办法

制作闪盘引导的方法并非唯一,以下例子是在XP下用启动光盘范例手工制作的过程。这期间需要的工具软件是SysLinux、WinImage和UltraISO,都可从网上下载到。闪盘可自行进行格式化为FAT16(即XP磁盘格式化对话框中的FAT)格式。

  • 将光盘范例中的DOSNETX7.img文件提取出来,用WinImage打开后将磁盘格式更改为2.88M,然后将光盘中NDISDRV目录下内容提取出来,放入更改格式后的软盘映像的NET目录里,可以删去原目录中名为DRVPK!.cab的文件。将这个新映像保存在闪盘根目录下、并命名为reduced.img(也可用压缩格式存为reduced.imz格式),注意文件名要和下面syslinux.cfg中内容对应。
  • 将syslinux的memdisk目录中的memdisk文件复制到闪盘根目录下。
  • 在闪盘根目录下用文本编辑器创建syslinux.cfg文件,内容为:

    default dos
    timeout 0
    implicit 0

    label dos
      kernel memdisk
      append initrd=reduced.img ro (注意文件名要对应)

  • 运行sysliux的w32目录中的syslinux.exe将引导文件写到闪盘上:
    • 闪盘大体分两类,一类是在XP中显示为可移动磁盘的(图标和普通硬盘不同),这类闪盘通常是作为USB-ZIP或USB-FDD仿真的,它们一般不含MBR和分区,对此类闪盘可使用
           syslinux [-s] U:     (假定U: 是闪盘在XP下的逻辑驱动器符。)
      来将syslinux引导文件写入引导扇区。-s 参数是stupid模式,有些主板对闪盘引导支持不好,如果引导不成功则可以试一下这个,但速度会大大下降。
    • 另一类是在XP中显示为本地磁盘的(图标和普通硬盘相同),这类闪盘通常是作为USB-HDD仿真的,它们一般含有MBR和分区,对此类闪盘要分别用两条命令将MBR和分区引导部分都替换为syslinux代码:
           syslinux -fma[s] U:  (替换MBR并激活U:所代表的分区)
           syslinux -f[s] U:        (假定U: 是闪盘在XP下的逻辑驱动器符。)
      -s 参数如前述;-f是force模式,要求syslinux忽略闪盘非可移动磁盘的介质类型;-m表示替换MBR;-a表示激活该分区。
      于是第一条命令作用类似于在DOS中执行 fdisk /mbr ,后一条作用类似于执行 sys U:
    • 上述根据XP中显示图标来区分这两类闪盘的方法有时并不能准确地判断出实际在BIOS引导时该闪盘仿真的是哪类磁盘,此时需要尝试。不妨直接包含有MBR的情况(即上边第二种)来处理。

  • 可将光盘中DOSWARE目录和根目录下的autorun.bat复制到闪盘中,再加入自己常用的其它程序即可。

实际环境中,启动后DOSWARE和AUTORUN.BAT等内容一般会在B或C盘找到(此为BIOS的特性,同时会因启动时仿真为硬盘还是软盘而不同)。启动后可直接执行DRVTYPES看看系统中可用的盘符,找到autorun.bat文件后手工运行一下即可出现范例光盘中的选单。


直接安装于虚拟机硬盘的方法

如果你喜欢偶尔玩玩DOS,想在虚拟机上装个DOS系统玩玩DOS网络的话,可直接将虚拟机的C盘用format c: /s 格式化,然后把软盘上的目录和文件原封复制到C盘里,驱动包文件可放在c:\net目录里,不用修改什么文件。这样可直接从C盘启动,功能和软盘启动基本相同,不过保存网卡驱动时不会删除C盘上的基本驱动包。恢复网卡选择单时只要留下c:\net目录里名开头为dosnetx!和drvp 的文件即可。


编辑本文

其它说明和已知问题


NTFS和长文件名

这个不必多说大家要么少用要么都心知肚明无论是NTFSDOS还是NTFSPRO,还有什么NTFS4DOS,都不好用。以前真需要访问NTFS的话READNTFS是最保险的,但是只能在界面里用而且比较慢。后来有了Paragon IFS Driver,这个是目前我认为用来访问NTFS最好的选择,光盘范例里加了这个,这几个月忙没顾上提这些。在执行IFS那个批处理就可以了。

关于长文件名,DOSLFN不稳定,慎用,能用短名访问就别用这个。

加载ISO或软盘映像文件为虚拟驱动器

加载ISO的用到的情况多些,放在启动软盘里了,用 "ISO 路径\文件名" 即可加载,不带参数则卸载。
加载软盘映像的情况少,只放了IMG和FAKEDISK在范例光盘里。

SHUCDX的问题

SHUCDX有时会引起Memory allocation error问题,换了SHSUCDX后这个问题明显好些,但没有深入测试是否该驱动确实稳定。

恢复XP/2003本地SAM数据库里的用户口令

对我来说极少用,但留个在范例光盘里也保险。RSTXPPWD。


WATTCP库程序的问题

PCDHCP.C里dhcp_fsm()有一行代码比较收到的SOCK数据大小是否大于DHCP_MIN_SIZE的值,本意是忽略掉过于短小的dhcp offer包。早些的版本里那个DHCP_MIN_SIZE是300,后来因为有人发现有设备提供的offer只有280字节,所以dhcp request会停在那里所以新点的版本又把这个值改成280……我的ZXDSL猫的offer似乎比这个还小,只好挑了几个常用的程序patch了一下(索性改成100)。试过TCPINFO是好了,但其它程序没挨个试验是否补丁打得都正确。

另外一个不是问题的问题。在启动盘输入IP地址时如果直接按回车,表示用AUTO方式分配IP,对包驱动的程序来说意思是要先试BOOTP、再DHCP、再RARP。目前用的最多的属DHCP,但很多DHCP server不支持BOOTP,所以如果用默认的AUTO,可能需要先等比较长一段时间(启动盘设定的15秒BOOTP超时,以及比默认30秒要少一半了)才会开始试DHCP。如果想直接试DHCP,请在输入IP地址时候直接输入dhcp,而不是直接按回车跳过。这样能节约不少时间。

使用PEPA时的问题

PEPA的最大缺点是缺乏错误提示,虽然在文本屏幕时右上角有个状态显示灯,也能通过在pepa.ini里使用“-l”(Lima的L)来显示些附加的细节,但都不够直观和详细(需要的话可去下载pepa 1.9的完整zip包看看里面的readme.htm,不过别抱太大希望)。

  • 连接后一般要等几秒钟再启动网络应用程序(要等PPPoe连接成功)。

  • 挂断后不要马上重拨,也要等上几秒。这是因为软件采用的挂机方式其实只是把PEPA卸载掉,然后被动地等局端设备实际挂断。要小心有时局端设备没真把你挂断(ADSL不是包月的就惨了),这时重新拨号后会不能访问网络,这就需要把网线断开几秒钟或者重开一下DSL modem。

PEPA的未注册版本只能用30分钟,之后没任何提示,但访问网络时什么都收不到。可以运行两次ADSL.bat(相当于重新拨号)来继续使用。

使用Ghost进行网络镜像的问题

以我自己的经验来看,11版以上的ghost比较令人满意。此前从5.1d开始的所有版本都出现过无法恢复映像的问题,所以这以前我是从来不敢拿ghost做备份的。对11版以后的ghost我的看法已经有了很大改变,似乎安全感提升了不少,但真正的信任还有待进一步加强。

出于性能和对网络及服务器造成的压力等方面的考虑,网络镜像操作的优选方式是GhostCast。有些机器上使用GhostCast方式时(多播、组播、单播都包括),如果找不到多播服务器,可以试试在启动后显示网络模式菜单时先选0退出到提示符下,用下面set命令设置pdmode环境变量,变量内容和依次试用4/5/6,用于控制包驱动程序对接收到的哪些类型的包进行过滤。然后运行 msnet 回到网络模式菜单启动网络,该操作可解决有些情况多播连接方面的问题。并非所有网卡的NDIS驱动程序都支持此功能。当然,如果这样能解决问题,也可把这个设定加到USERPROF.BAT中。该问题更详细的说明请参见以下Symantec文档:

关于cast方式,额外提醒一下,注意ghostcast server的版本应和客户端一致。其实不一致的时候是有错误提示的,只是有人连这个也不注意看……

其次是Peer方式,最后才是通过网络客户访问共享中的gho映像。

关于远程客户端的说明

目前供下载的远程客户软盘里包含了三种远程桌面客户端(分别用于微软终端服务、VNC和Citrix终端服务),以及Winternals的远程恢复客户端(可使用其Administrator’s Pak或ERD Commander连接)。由于存储空间限制,范例光盘中只包含了前两个。其中RDP和VNC客户需要包驱动支持,而Citrix ICADOS和Winternals RRCDOS则需要TCP栈才能工作(这意味着需要启动MSTCP模块和Sockets服务才行),请注意在启动网络时选择正确的配置模式。

在使用ADSL连接互联网时,其只提供了包驱动支持,而不提供TCP栈服务,因此RDP和VNC客户可以正常工作,但其它两者则无法使用。另外,DOSRDP的VESA接口方式似乎和VMW 5.x的VBE 2.0不太兼容,我在使用时发现其似乎不能正常工作,但VPC和Qemu则可以。


编辑本文

  在虚拟机上调试网络时要注意的内容

 

对于习惯使用一种操作系统(例如Windows XP)的用户来说,虚拟机产品无疑是调试用于其它系统环境的软件的好工具。常见的个人用虚拟机产品主要是 VMware Workstation 和 Microsoft 从 Connectix 那里买来的 Virtual PC (所以Connectix VPC也算这个一类),高端的 GSX Server 和 Virtual Server 我没用过,但道理上应该是一样的。

在网络设置方面 VPC 和以前的版本比变化不大(还是一样的简陋),而 VMW 早先的版本是不象现在那样可以让用户自己设置那么多的(Virtual Network Manager 好像是 3.0 还是 4.0 才有的,我对 2.0 版本的印象太深所以记不清楚了),所以下面的内容主要针对 VMW 4.x 和 VPC 2004 SP1。

虚拟机客户系统的网卡模式

先从虚拟机上客户系统的网卡模式说起。这两种虚拟机上,客户系统可用的虚拟网卡模式都是三种:

  • 桥接:VMW 的选项叫 Bridged、VPC 上是那个真实网卡的名字;
  • 共享:VMW 是 NAT、VPC 上是 Shared;
  • 仅限宿主:两个都叫 Local only。

三种设置方式中,仅限宿主方式没什么好说,也用得不多,但是桥接和共享两种就值得根据实际需要来选择了。

桥接方式简单说可理解为虚拟机在逻辑上和宿主机为并列的关系,仿佛虚拟机是直接连接到宿主机所在的网络设备上一样,换句话说,虚拟机、宿主机、和宿主机网络里的其它电脑或网络设备三者是在同一个网络里。

共享方式,从与桥接相比较的角度来说,可理解为宿主机是虚拟机和外部网络之间的一个网关,宿主机的物理网卡和宿主机网络里的设备在一个网络里,宿主机上另外有个虚拟网卡和虚拟机则在另外一个网络里,虚拟机访问外部的网络时,宿主机从这个虚拟网卡上收到的请求进行 NAT 转换,再从物理网卡发到外部网络,反方向也是一样。

在进行 PPPoe 拨号时,必须将虚拟机网卡设为桥接的方式。如果设成共享方式再拨号——用个不准确的例子来比喻,就仿佛用自己的电脑去拨局域网上另一台机器上的 modem 那样——虽然想得很方便,但实际不行。

实际中,使用共享方式还是桥接方式都能使宿主机成为和外界网络相联系的网关,问题是看怎么配置。共享方式的便利是实现网关功能的服务提供者是虚拟机产品本身的组成部分,而桥接方式时这个功能就要由不属于虚拟机产品组成部分的其它软件或设备来提供了。如果仅仅是需要路由功能,通常宿主系统(例如 XP)能够满足需要,但是稍微复杂点的需要,例如 DHCP,XP 就不能满足了。所以通常情况下,建议为客户系统选共享方式。

VMW 的 NAT Service 和 DHCP Service

如果你在宿主机的外部网络上有个 DHCP 服务器,你就能发现这桥接和共享两种方式的区别了:桥接时虚拟机能直接从这个 DHCP 服务器上获得 IP 地址(通常是和宿主机物理网卡的 IP 地址在同一网段上),而共享时在正常情况下(指宿主机上没开 DHCP Relay 服务的话),虚拟机根本无法找到外部的 DHCP 服务器。

所以在共享方式时,要想使用 DHCP 为虚拟机提供 IP 配置,只有两个办法:一个是宿主上开 DHCP Relay,把虚拟机的 DHCP 请求转到外边的 DHCP 服务器上(注意,NAT 是不能转发 BOOTP 和 DHCP 请求的,NAT 对 ICMP、TCP、UDP 这样的协议管用,但是 BOOTP 不行,这时候虚拟机连 IP 地址都没有,还怎么 NAT ?);另一个办法就是在这个虚拟网络里设置一台 DHCP 服务器——VMW 和 VPC 就是这样,它们由自己的组件专门为这个虚拟网络提供 DHCP 服务。这就是安装 VMW 后系统服务里会在多出来个 VMware NAT Service 的同时还多出来个 VMware DHCP Service 的原因。在 VPC 里其实也有这两个东西,只不过不是作为系统服务来安装的。

忘了从那个版本起,VMW 的编辑菜单里有了那个 Virtual Network Settings 项,现在的版本还把启动这个 vmnetcfg 程序的快捷方式放在了程序组里(2.0 时用户可以编辑一个名字也差不多的文本文件来调整 DHCP 的配置)。这个改进实在是让 VMW 的网络方面的功能大大地强过 VPC 。用这个东西就可以配置 VMW 的 DHCP 和 NAT 服务。

目前版本下这个 VM DHCP 服务其实没什么好配置的。需要的话可以变化一下各个虚拟网卡的子网、调整一下 DHCP 服务的 IP 地址范围(网段变不了,只能变主机部分)。

NAT 服务的设置倒是有时需要略微调整一下,例如有时可能需要为客户机上的服务加些 Port Forwarding,还有时需要在这里额外加上些互联网上的 DNS 服务器等等。具体的设置还是看 VMW 的帮助比较好。VPC负责DHCP Server功能的部分不允许自己设置DNS服务器,它的DNS服务器地址是直接使用绑定了Virtual Machine Network Service服务的那个物理网卡的IP配置中的DNS服务器地址,因此如果本地连接的IP地址是通过DHCP分配的,则要注意保证同时分配的域名服务器地址也是有效的,也可直接手工指定那个物理网卡IP配置中的域名服务器,否则可能导致在虚拟机里访问域名时解析失败(这个我自己遇到过好几次)。

在 VPC 上使用 VMware 的网络功能

VMW 至少在网络功能上无疑比 VPC 更强大,但是大多数时候我更喜欢用 VPC。它更快些,细节方面更便于使用,比如能方便地暂停虚拟机,VMW 要等半天;没装辅助工具时,VMW 在捕获键盘输入时也会捕获鼠标,必须要按 Ctrl-Alt 才能释放,VPC 就不用;还有 VPC 能方便地把客户机屏幕上的文本复制出来……所以这部分是为用着舒服写的。

同时安装了 VMW 和 VPC 时,打开宿主机的网络连接文件夹,在显示出的各个 VMnet 网卡的属性中钩选 Virtual Machine Network Service 那个服务,绑定后这个 VMnet 网卡就能出现在 VPC 的网卡菜单里了。VPC 其实是以桥接的方式来使用这个网卡的,所以真正的方式是由在 VM 虚拟网络配置中对这个网卡指定的工作方式来使用的。

我从 VMW 4.0 升级到 4.5 后发现 VPC 里找不到原来的 VMnet8 网卡了,后来才发现升级后原有的几个 VMnet 网卡的属性中都没有绑定 VPC 的网络服务,改了就好了。

不过有一点要注意,就是如果同时使用 VPC 和 VMW 的话(例如在用 Ghost 在两种虚拟机间复制硬盘时),应该分别为它们创建不同的 VMnet 虚拟网卡,不然两个会打架。

防火墙的问题

在虚拟机上调试网络应用时还要特别注意防火墙软件(XP SP2的Windows防火墙也算)的设置,无论是桥接方式还是共享方式。而且在配置防火墙时,更要耐心地注意每个物理的和虚拟的网卡上防火墙的设置。

除非特别必要,或者网络的逻辑结构实在复杂、而你需要集中精力去解决别的问题,否则无论什么情况,都不推荐完全关闭防火墙软件。

通常可以考虑选择地关闭虚拟机网卡的防火墙,再对本地连接和可能涉及的拨号连接分别适当地建立例外规则。一般情况采用这种步骤还是能兼顾安全性和方便性地解决防火墙造成的问题的。

总之除非特别需要,不要关闭防火墙或禁用本地连接上的防火墙,拨号连接更要谨慎。

关于虚拟机的其它方面的问题

虚拟机环境下网络的设置要注意的因素很多,但是没什么难懂的内容,遇到问题需要仔细分析。有时候虚拟机软件的版本升级也会会引起麻烦。

还一个例子是用 Ghost 在 VMW 和 VPC 之间复制虚拟机硬盘时,升级到 4.5 的总是出错,查了半天才发现因为升级到 4.5 后 VMW 的优先级设置被设为高优先级了,导致 VPC 老抢不到 CPU,从而造成没时间响应网络请求——这个例子的意思是有时候麻烦出在意想不到的地方。

关于Qemu和Virtual Box 

严格说,Qemu还没有复杂到能被算得上一个虚拟机宿主,而只是个仿真器,然而Qemu确实可以用来当虚拟机宿主用。

但是DJGPP的默认DPMI服务器CWSDPMI 0.9r5在目前的Qemu 0.8核心上似乎不能正确提供服务,在试图运行许多需要DPMI支持的程序时(例如Symantec Ghost,以及其它用DJGPP和DJGPP2编译的基于包驱动的TCP/IP应用程序),总是得到“Load error: no DPMI selectors”这样的错误,这种现象在VMW和VPC上没有出现过。不清楚导致该问题的具体原因,但EMM386这类内存仿真程序能在Qemu上仿真出多达190K的UMB来,我觉得这其中应该有一定联系。另外一个问题是如果在加载EMM386时使用HIGHSCAN参数会导致挂机,相信这两个问题都和Qemu核心的内存仿真部分有关。

作为权宜的方法,可以使用HX DOS Extender中的HDPMI32代替CWSDPMI为应用程序提供DPMI服务。可以在Qemu上用命令行

loadhigh HDPMI32.exe -r

将HDPMI32加载在UMB中(Qemu提供的UMB那么大,确实有好用的地方)。这样解决后就可以象在其它环境中一样运行这些需要DPMI支持的程序了。

qemu(以及显示部分代码类似的InnoTek VirtualBox)似乎还有一个问题就是和有些DOS程序配合在一起用的时候可能对直接写屏的老式汉字系统支持不太好,有时候在批处理中加载或退出汉字系统时会屏幕会全黑,连光标都没了,其实没有死机,只是显示没跟上而已,如果是在此时应该是处于命令提示符下的话,打个CLS就又能看见显示了。VirtualBox目前还比较新,我发现它似乎和帮助虚拟机释放CPU资源的idle.com或dosidle.exe有点冲突,常常会突然挂掉。以上问题在其它产品中都没出现过。

如何在批处理文件中检测出上述几种虚拟机宿主?

我的办法是用下面这个文件,它利用pciscan检测虚拟机的PCI控制器返回的cpu、pci控制器及虚拟显卡几个基本上不会缺少或变化的部件的信息来判断是哪种虚拟机宿主。要注意的是,这只能对付模拟了pci控制器的虚拟机宿主环境,对没有pci控制器(例如仅模拟ISA架构的qemu配置)则无效。再有就是如果某台真正的电脑的cpu、pci控制器和显卡完全和某种虚拟机上的型号一致,那就会搞错。这个方法实用但不严谨,仅供参考:

@if .%debug%==. echo off
if not exist z:\ipxnet.com goto _vmdetect
if not exist z:\imgmount.com goto _vmdetect
if not exist z:\boot.com goto _vmdetect
if not exist z:\intro.com goto _vmdetect
if not exist z:\rescan.com goto _vmdetect
if not exist z:\loadfix.com goto _vmdetect
if not exist z:\mem.com goto _vmdetect
if not exist z:\mount.com goto _vmdetect
if not exist z:\mixer.com goto _vmdetect
if not exist z:\config.com goto _vmdetect
rem Suspected to be in DOSBox Shell. Not applicable to the native/boot mode.
set vmhost=DBsh
goto _echo

:_vmdetect
if .%ramdrive%==. goto _no_ramdrive
for %%f in (%path%) do if exist %%f\pciscan.exe goto _ok_pciscan
echo %0: requires pciscan.exe in path.
goto _eof

:_ok_pciscan
for %%f in (%path%) do if exist %%f\xgrep.com goto _ok_xgrep
echo %0: requires xgrep.com in path.
goto _eof

:_no_ramdrive
echo %0: RAMDRIVE variable has not been set.
goto _eof

:_ok_xgrep
for %%f in (%path%) do if exist %%f\lmod.com goto _ok_lmod
echo %0: requires lmod.com in path.
goto _eof

:_ok_lmod
set $=%ramdrive%\$
pciscan -v>%$%
echo @echo off>%$%.bat
: data for vpc
xgrep -cy "8086 7192 .+CPU/PCI" %$%|lmod /l1 set vm1cpu=[]>>%$%.bat
xgrep -cy "8086 7110 .+PCI/ISA" %$%|lmod /l1 set vm1pci=[]>>%$%.bat
xgrep -cy "5333 8811 .+VGA" %$%|lmod /l1 set vm1vid=[]>>%$%.bat
: data for vmw
xgrep -cy "8086 7190 .+CPU/PCI" %$%|lmod /l1 set vm2cpu=[]>>%$%.bat
xgrep -cy "8086 7191 .+PCI/PCI" %$%|lmod /l1 set vm2pci=[]>>%$%.bat
xgrep -cy "15AD 0405 .+VGA" %$%|lmod /l1 set vm2vid=[]>>%$%.bat
: data for qemu
xgrep -cy "8086 1237 .+CPU/PCI" %$%|lmod /l1 set vm3cpu=[]>>%$%.bat
xgrep -cy "8086 7000 .+PCI/ISA" %$%|lmod /l1 set vm3pci=[]>>%$%.bat
xgrep -cy "1013 00B8 .+VGA" %$%|lmod /l1 set vm3vid=[]>>%$%.bat
: data for virtualbox
xgrep -cy "8086 1237 .+CPU/PCI" %$%|lmod /l1 set vm4cpu=[]>>%$%.bat
xgrep -cy "8086 7000 .+PCI/ISA" %$%|lmod /l1 set vm4pci=[]>>%$%.bat
xgrep -cy "80EE BEEF .+VGA" %$%|lmod /l1 set vm4vid=[]>>%$%.bat
:
if exist %$%.bat call %$%.bat
for %%f in (%$% %$%.bat) do if exist %%f del %%f
set vmhost=
if not .%vm1cpu%==.0 if not .%vm1pci%==.0 if not .%vm1vid%==.0 set vmhost=VPC
set vm1cpu=
set vm1pci=
set vm1vid=
if not .%vm2cpu%==.0 if not .%vm2pci%==.0 if not .%vm2vid%==.0 set vmhost=VMW
set vm2cpu=
set vm2pci=
set vm2vid=
if not .%vm3cpu%==.0 if not .%vm3pci%==.0 if not .%vm3vid%==.0 set vmhost=QEMU
set vm3cpu=
set vm3pci=
set vm3vid=
if not .%vm4cpu%==.0 if not .%vm4pci%==.0 if not .%vm4vid%==.0 set vmhost=VBOX
set vm4cpu=
set vm4pci=
set vm4vid=
goto _echo

:_echo
if not .%vmhost%==. echo Virtual Machine type is %vmhost%.

:_eof
set $=

把它保存为vmdetect.bat,并且保证路径中能访问pciscan.exe、lmod.com和xgrep.com这几个工具程序,需要测试时call vmdetect,然后检查vmhost环境变量的值即可(要注意大小写)。这里是用VMW、VPC、QEMU、VBOX和DBsh分别表示VMware Workstation、Microsoft Virtual PC 2004、qemu、InnoTek VirtualBox以及DOSBox自带的shell,如果调用该批处理后没有设置vmhost变量,则表示是在真实电脑或其它类型的虚拟机上运行。

 


编辑本文

 

其它软件下载地址和技术信息

 

 

MS Network Client 3.0 和 MS Workgroup for MS-DOS 补丁

  • 下载地址:msclient安装文件1 msclient安装文件2 wg1049补丁
  • 说明:
    • msclient 本身不提供服务功能,需要在DOS中设置共享的话,可在安装msclient后用wg1049补丁中的文件替换msclient目录中的四个文件即可使用 net share myshare=d:\mydir 这样的命令设置共享。

MS LAN Manager 2.2c

PEPA 1.9 – DOS 下的 PPPoe 连接程序

Lynx 2.85 rel 1 – 文本Web浏览器

Arachne 1.90J1 – DOS 下的图形界面Web浏览器 

  • 下载地址:DOS版本原版下载 直接用于范例启动盘的软盘镜像
  • 说明:由于这个版本不支持中文、且DOS下的中文系统无法提供对图形方式的文字中汉字的支持,因此目前该浏览器只能浏览若干欧洲语言的网页。
  • 2007.09.22 中文支持文件(将其中文件展开到原Arachne目录即可。注意最好从内存盘运行!)若有朋友愿意继续完善请向我索要源程序和开发环境(完全免费,只要别害我吃官司就行)。

WATTCP

  • 说明:WATTCP本身没有提供什么具有实用性的应用程序,它主要是提供了一个供开发使用的基于包驱动的TCP/IP库,也包括一些基本的网络测试工具。较早为实模式开发的工具由于实模式本身的限制太多,其应用比较有限。后来结合DJGPP和DOS扩展器等工具开发的32位保护模式下的Watt-32则包含了更强的功能,也更具实用价值(这里面的ftp和telnet客户端是我个人觉得其同类程序最好用的,单弄出来放在这里)。
  • 下载地址:实模式的工具包 Watt-32开发包 用watt-32开发的一些应用程序 我把其中一些较实用的打包放在这里

PC Pine – 文本界面的IMAP/POP3客户端

VNC – 基于wattcp的远程客户端

  • 说明:通俗、但不准确地说,VNC (Virtual Network Computing) 有点类似于pcAnywhere或者Windows终端服务,不少Linux用户都比较熟悉。也有厂商提供Windows系统上和MacOS下免费或商业的VNC服务端程序,此处不提供服务端程序的下载链接,下面的链接只是DOS下的客户端程序。
  • 下载地址:DOS VNC Viewer 1.1  RealVNC 4.0

虚拟机产品


编辑本文

 

4条回应

  1. 写的很好,很全,谢谢你。我最近在了解PXE引导方面的东西,结果就找到你这里了。

  2. 您好,看了你的这篇文章,试着做了一下
    进入Network support only 、再选择[3] MS Client – TCP/IP
    这时可以Ping服务器IP和公网IP,工作组也设置好了
    但用net use z: \\\\192.168.8.5\\ghost时,提示:Error 53:The computer name specified in the network path cannot be located.
    不知道是什么原因,可以帮助我吗?
    先谢过
    注:那个服务器通过\\\\192.168.8.5可以打开,用其它Dos网络驱动盘也可以访问(用以上方法)(就是支持的网卡太少,才查到你的文章)

  3. 回复楼下的朋友:首先感谢您的留言!遇到53号错误“Error 53:The computer name specified in the network path cannot be located.”是因为您在UNC路径中使用了IP地址作为机器名,此时若只是为成功访问该共享的话可以把其中的IP地址换成那台计算机的NETBIOS名就会成功了。的确,因为很多机器在安装XP系统时机器名是自动生成的,所以此类情况下使用 \\\\192.168.8.5\\ghost 这样的路径要方便得多,但我印象里好像曾经看到哪个有点权威的地方说过 ms client 不支持这种方式。所以可能你用其它启动盘可以访问,会不会因为那个盘是基于mslanman的呢?无论如何,若是方便,希望能发给我参考一下,如果是基于ms client的,我希望能好好学习、借鉴。

  4. 链接很多都失效了,重新弄一下吧,正好最近需要。

留下评论