新闻

Linux Remote-Boot mini-HOWTO

作者:MarcVuilleumierStückelberg,SandroVialeandDavidClerc
译者:曾元佑yytseng@ms16.hinet.net
v2.5.2,九月1997


--------------------------------------------------------------------------------
这份文件将说明如何使一群PC拥有相当稳定的Server-based架构,此法可使每台PC在开机时选择使用何种作业系统.此种架构的精要就是TCP/IPbootprom,它可以让使用者在开机时选择不同的开机区块.此份文件的最新版本,包含超文件连结到可供下载的软体及其它相关的资讯,都可以在这个网址找到http://cuiwww.unige.ch/info/pc/remote-boot/howto.html.Linuxdoc-SGML,DVI及postscript各种版本都在这个目录下.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

1.有那些变更...

1.1...从1.x版後?
一大堆变动:

Linuxserver-based的架构与文件已全部重新设计.目前是以RedHatLinux4.1为主,kernel更新成2.0.30.更简化了Linux系统的设定与维护.
DOS和Windows的设定也重新设计过,几乎换成"hard-diskbased".如此使得架构更加简化,开机速度变快,降低网路的负载,甚至允许WindowsNTworkstation采用server-basedsetup(虽然还未在本文中谈到).
目前我们用一台DHCPserver,遵寻DHCP/BOOTPextensions(RFC2132).
在这个架构也用了Samba免费的SMBserver,来取代Novellserver.事实上,我们正要丢掉我们的Novellserver...

1.2...从2.4版後?
新的开机旗帜功能已加在bpunzip这个工具程式.它现在可以在VESA-相容型的显视卡下工作.开机旗帜可以用ESC键;从萤幕中移掉;其他的按键已不会干扰到TFTP的传输.MRZIP,有一只臭□,在解压缩磁碟压缩影像时会导至"Badcompresseddata"错误,我们已发现并修正了.另外在BPUNZIP中发现的两只会导至电脑当机的臭□也被修正了.

更加完整的.加入连结到相关软体(SharedLANCache)及文件(fromJ.Carlstedt,ofTheCathedralSchoolofUppsala,Sweden).

加入UNZIPREG原始程式码的连结位址.这些资讯是用来跟Windows95OSR2搭配使用的.

bootptagLinux版的工具程式改采DHCP取代BOOTP.现在可以跟Solaris2.6DHCPserver一起搭配使用.



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

2.简介
这里所描述的架构是从1996夏季开始在CUI,UniversityofGeneva所发展的.这个资讯系有许多的伺服器(大多是Unix与Novell),和一些个人电脑,可依用途分为两类:

学生使用
研究与辅助教学
以下是我们发展这种架构的目标:
任何一台电脑都可以执行Linux,DOS,Windows3.1orWindows95.每次开机时可以选择所需要的作业系统.
所有的软体,包含作业系统,可以放在伺服器上,便於安装与更新.
客户端电脑可以不对伺服器作写入的状态下正常工作(为了安全性),home目录除外.
尽可能减少客户端的设定.客户端可以自动由伺服器取得IP组态设定,这些资讯放在一个小档案,可供各种作业系统使用.
大部份的电脑都各自拥有硬碟,客户端可以靠这优点来降低网路负载与存放使用者的暂存档.
所有的使用者都必须注册才能使用电脑.
注册资讯必须所有的作业系统都相同且使用者可以存取个人的目录,而每种作业系统都一致.
学生所使用的电脑在每次启动时必须清理一次.也就是像刚安装完的样子.
每台电脑可以防毒.
这些限制使我们选用来自KöppenEDVGmbH的TCP/IPBootprom因为这种Bootprom跟作业系统无关而令我们相当感兴趣;它只是模拟出一台软碟机,而且当以Linux开机时就跟DOS或Windows95一样简单.另外,开机磁碟的影像档,可由自制的程式来取代,这个功能使我们能在作业系统启动前,先做许多初始设定.


2.1网路
Geneva大学拥有B级网域,分割成许多子网路.CUI共使用了四个子网路,其中之一供学生使用.

原本,我们的个人电脑使用两种网路的通讯协定:IPX与IP.IPX这一类,我们由一台NovellNetware3的伺服器共用DOS与Windows的软体.IP这一类,我们由一台SUN伺服器靠NFS共用Linux软体及个人的分割区.

在我们最新的架构中,已不再使用IPX通讯协定.改由一台Unix伺服器(可以是Linux或SUN)担任,Linux客户端可透过NFS而DOS与Windows则由SMB(NetBIOS)overTCP/IP共用软体及使用者的档案.


2.2它是如何工作

客户端个人电脑开机後,在TCP/IPBootprom获得控制权之前先做自我测试.
Bootprom送出BOOTP/DHCP要求而取得IP组态参数.
如果伺服器收到个人电脑所送出的要求,就会送回BOOTP/DHCP回应,内容包括客户端的IP位址,预设通讯闸道,及开机影像档.否则,伺服器会忽略这个要求.
Bootprom由TFTP通讯协定从伺服器下载开机影像档,并同时用这个开机影像档虚拟出一台BIOS层级的软碟机.
个人电脑透过这个开机影像档开机,这个开机档只是单纯的开机程式(并不包括作业系统).
如果这台电脑是学生的个人电脑,开机程式开始就由TFTP通讯协定下载一个小的文字档其内容是叙述这台电脑的硬碟规划状态.透过这个小档案,硬碟的分割区将重新规划且DOS所使用的分割区也被快速格式化.当所有的工作完成,这些工作将在开机後三秒内完成.
开机程式接著让使用者选择所需的作业系统.
依照使用者的选择,新的开机影像档将从伺服器透过TFTP通讯协定下载.
如果选择使用Linux,开机影像档将包含kernelloader及压缩过的kernel,此kernel将支援NFSroot及caching档案系统:
第一点,IP组态是透过BOOTP/DHCP通讯协定由Novell伺服器所接收.
这个kernel可以透过NFS挂上一个只能读的rootfilesystem.
挂上一块有写入功能的小型ramdisk.
如果在硬碟内发现swap分割区,则为它做好准备并启动它.
如果在硬碟内发现linux分割区,挂上它并为它做好cachingNFS分割区.
IP组态一完成,启动所有的服务,也启动xdm.
要求使用者登入.这台工作站就续.
如果选择使用DOS或Windows,开机影像档将是一个可以处理FAT16分割区压缩影像的程式.透过TFTP下载开机影像档,并且储存在硬碟中以供未来使用,包含任何使用过的分割区.更严紧的说法是,这个程式可以在以下的状况中执行:
这个程式下载一个检查档(512bytes)以确认所选作业系统的开机影像档
如果所需的影像档并不存在磁碟中,或者与检查档不吻合(可能是由於开机影像档已被变更或者一个新的版本被安装到伺服器上),整个影相像档将透过TFTP通讯协定来传输.
作业系统的影像档解压缩到第一个FAT16的分割区,传输速度大约是以每秒一megabytes.
程式接著跳到所选的作业系统的开机磁区,而它现在已存在本机的硬碟中.
对DOS与Windows3.1而言,我们使用免费的MicrosoftLanManagerforDOS(请透过网路找到较接近您的mirror站;它是由三个档案所组成disk1todisk4)当成SMB客户端.MicrosoftLanManager可藉DHCP而支援动态设定.在登入後,使用者会看到DOS,并且可以打win启动Windows3.1.请注意这点,DOS与Windows3.1就如同安装在客户端一般.对Windows95而言,我们也使用MicrosoftSMB客户端(叫ClientfortheMicrosoftNetwork),它也可藉DHCP而支援动态设定.我们为降低网路负载使用了SharedLANCache,一个强而有力的network-to-diskcache程式.
学生所使用的电脑可以很暴力的直接关掉电源而不会有任何问题,因为硬碟的资料在每次开机都会重新建立.
对於比较"安全的"电脑(如辅助教学的电脑),或许有时会使用上述的方法来开机,有时则直接载入硬碟内的开机影像档而不再清理硬碟.这样可以允许使用者保留资料在硬碟中.而当组态修正後又可以完整的更新开机影像档就如同重新安装一般.


2.3相关非商业
这种组态已经成功的移殖到世界上的许多地方.少数人已经开始篆写一些技巧跟提示来完成这份How-To.如果您也曾做过但在本文件中未备引用欢迎送一份e-mail给Marc.VuilleumierStuckelberg@cui.unige.ch.如果您在重建这种组态中遇到问题,请在详细看一次文件!

http://www.katedral.se/system/elevsyst,byJohanCarlstedtofTheCathedralSchoolofUppsala,Sweden.
http://vitoria.upf.tche.br/~fred/,inportuguese,byFredericoGoldschmidtofthePassoFundoUniversity,Brasil.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

3.如何设定
首先,调整机器位置使手边有下列两台机器:

伺服器,我们是用一台Unix主机.
客户端,一台已经启动TCP/IPBootprom的个人电脑,硬碟内不要有重要资料.
如果你想要测试您的组态设定而您还没拿到TCP/IPBootprom,您可以到http://www.incom.de下载测试版的磁片.这个磁片可以使您的电脑就好像是插上TCP/IPBootprom一般.Ifyouwanttotesttheconfigurationbutyoudonotyethavea

学生所使用的电脑,我们设定Bootprom由网路开机,不能使用硬碟开机及软碟开机.教学用电脑,我们设定Bootprom可以由往路开机,也允许硬碟与软碟开机;在你的客户端设定Bootprom.

伺服器端,设定DHCPdaemon(我们使用InternetSoftwareConsortium所提供的正式版,970329发行).你也必需启动TFTPdaemon.这份文件将假设您使用TCP/IPBootprom工具磁片内的加强型TFTPdaemon.如果您较喜欢使用标准的TFTPdaemon,移掉所有开机影像档的副档名P,用来支会Bootprom使用标准的TFTPport(请看TCP/IPBootprom文件).

别忘了BOOTP/DHCP通讯协定被限制在子网域中使用.如果客户端与伺服端不在同一网域,您必须在这两网域间架设闸道器.现在,先假设两台机器在相同的网域中.

首先,我们先做所有作业系统都要得做的事,如:

设定初始化硬碟的组态及清理
设定作业系统选单
测试开机流程
然後,对每一种作业系统,我们将完成下列步骤:
建立单独的客户端
把它的组态放到伺服器上
测试远端开机客户端
由本尊产生分身
完成这些事,以後你所追加的客户端只要插上Bootprom再加几行到DHCP设定档.

3.1设定开机流程
在伺服器端的/tftpboot目录下,放下列的开机影像档(这些是二进位格式)

bpclean,硬碟清理工具
bpmenu,TCP/IPBootprom选单程式(包含在您的Bootprom工具磁片)
bpunzip,我们的硬碟还原工具
bphdboot,传送开机程序到硬碟的影像档

硬碟的初始化与清理
在相同的目录下,我们建立符号连结到(或者直接用拷背指令))bpclean命名为XXXclean(或者您认为可以帮助您记住这是用来清理您的客户端机器的名称)并且产生一个名为XXXclean.tab档叙述您客户端所需的硬碟分割区,及您要联接的开机影像档.例如:我们对2Gb硬碟使用下面的方法


--------------------------------------------------------------------------------

#允许不超过512bytes的说明叙述
#十六进制请在字首加一个$钱字符

#Part||Part
#type|Boot?|Size
6Y+500Mb
$82N+31Mb
$83N-50Mb
0

#联接的影像档
/tftpboot/XXXmenu


--------------------------------------------------------------------------------

完整的档案格式在後面会叙述.现在您只要知道这些
分割区型态6是指BIGDOS,ie.如.DOSFat-16由32Mb到500Mb
分割区型态hex82是LinuxSwap
分割区型态hex83是LinuxExt2fs
大小如为负值,则表示我们的第三个分割区至少要占据50Mb
分割区型态0表示是空的(未使用的)分割区.
现在,bpclean在不清除分割区资料内容下,将重新写入主要开机计录(masterbootrecord),当然也包括分割表.

作业系统选单
同样的,建立符号连结(或者直接拷贝)bpmenu命名为XXXmenu(或者你认为可以帮助您记住这是客户端机器开机选单的名称)并且产生一个名为XXXmenu.m档叙述您客户端所需的开机选单.您比可以手动产生这个档案或透过我们写的开机选单全营幕编辑器menuedit.exe.例如,假设您用下列这个档案:


--------------------------------------------------------------------------------

.CLS23
.ATT23
.POS234
.WRTSimpleBootMenu\
.POS235
.WRT----------------\
.POS238
.WRT1.Bootfromlocalharddisk\
.POS2310
.WRT2.BootDOSandWindows3\
.POS2312
.WRT3.BootWindows95\
.POS2314
.WRT4.BootRedHatLinux\
.POS2317
.WRTYourchoice:\
.POS3717
.KEY1:bphdboot
.KEY2:linux.PX
.KEY3:win31.P
.KEY4:win95.P


--------------------------------------------------------------------------------


测试开机程序
在您的DHCP设定档中加入您的客户端.并设定开机影像档为/tftpboot/XXXclean.您可能需要重新启动您的DHCP伺服器使您的变更生效.

现在我们起动您的客户端.您可以讯速的看到由bpclean,所送出来的讯息,告诉您它所建立的分割区的大小,然後您会看到开机选单出现在您的营幕上.您可以用键盘上的pause键来暂停以便读取刚刚的讯息,但是这可能会导致TFTP的连接逾时.

如果您按下按键1,您将收到一个这样的讯息"开机分割区存在一个无效的开机磁区"(thebootpartitioncontainsnotvalidbootsector).对未被格式化过的开机分割区而言这是正常的.因为我们现在还未建立任何开机影像档所以其他的按键将会失效...

现在我们要开始安装各种作业系统.您可依您的需要来决定先做那一种.对任何一种作业系统,您都需要先从软碟来做初始化的动作.所以我们在看到TCP/IPBootprom的标志後立刻按space键换成软碟开机.

有些作业系统会更动主要开机计录(masterbootrecord).特别是Linuxkernelloader(lilo)会这样做.而这种变动会因bpclean这个程式而无法完成,因此您最好改变客户端的DHCP设定内容使开机影像档直接跳到/tftpboot/XXXmenu(不做清理的动作).别忘了要使您的改变生效,您必需重新启动DHCP伺服器.


3.2设定Linux
在您的客户端架设RedHatLinux4.1支援网路功能,kernel原始程式码及您所需要的软体套件.准备未来要挂入的点(放在/mnt/tmp比较有用),设定您的Xserver,等等.在/usr/src/linux-2.0.27目录中,您必须有kernel2.0.27的原始程式码.

现在我们要加入一些修正档,使它升级到2.0.30,并且支援TCP/IPBootprom及档案快取的功能.档案快取是一个把"未确定的"NFS档案储存在您硬碟中的结构,它您可以降低网路负载.TCP/IPBootprom的支援已经由□MarcVuilleumierStuckelberg完成,并且由DavidClerc转移到kernel2.0.档案快取已经由UnifixGmbH完成,并且已是UnifixLinux2.0的一部份.TCP/IPBootprom及档案快取的支援都已经由它们的作者免费的散布.

值得注意的是Linux对NFS-Root的支援只能架构在BOOTP通讯协定,不是DHCP通讯协定.仅管DHCP只是BOOTP的延伸,Linux也可以在DHCP伺服器下工作(如果您没有设定DHCP伺服器拒绝BOOTP要求).


产生Kernel
首先,到您的/usr/src目录并加入下列修正档,使用这个指令

patch-p0<修正档的名称:

patch-2.0.28:这是一个正式的kernel更新,您一定要加入这个修正档
patch-config-sound:一个美化音效设定的修正档,来自UnifixLinux2.0
patch-PCSP:一个较大的修正档用来使PC的扬声器模拟音效卡,来自UnifixLinux2.0
patch-bootprom:一个小的修正档用来产生特别的kernelimage,使它可由TCP/IPBootprom开机
patch-filecache:一个小的修正档使kernel加入一些特别功能,如Unifixfilecache.来自UnifixLinux2.0
patch-penguinlogo:一个小的修正档帮助您的使用者等到Linux系统完全载入
patch-2.0.29:另一个小的正式的kernel更新档,如果您不需要最新版的kernel则不用加入它
patch-2.0.30:又是一个正式的kernel更新档,满大的.一样,您不需要加入这项修正(但它会改善TCP/IP通讯协定).如果在您的机器上您没有alpha的原始程式码(这很有可能发生),这个修正档将出现两次抱怨含入档不存在的讯息.不要紧张,只要回答您要跳过这些缺少的档案,不会发生任何问题
接著执行makemrproper及makexconfig,产生kernel.记住这将是客户端电脑以Linux启动时,唯一接收到的软体,所以它必须要包含启动整个作业系统所需的东西.可以使用模组方式,但是不包括网路模组.因为网路功能一定要放在kernel中.简而言之,您的kernel至少需要以下这些

支援网路
在有BOOTP通讯协定下,支援NFS-Root
支援filecache
支援客户端电脑的硬体所需的模组
您可以使用我们的.config当做起点.如果您想要在没有Bootprom的状况下测试,请确定您已经在kernel内包含硬碟机的支援.
当您的选择完成後,照常地输入makeclean;makedep接著makezImage,makemodules与makemodules_install.这会花一点时间...现在您准备去测试您的新kernel,先用先用lilo.安装您的kernel(参考lilo文件),并重新启动您的电脑(由硬碟启动).如有任何错误,修正它们并再试一次.执行depmod-a计算modulesdependencies.当完全无误时,执行makebpImage产生一个bootimage给TCP/IPBootprom使用.


把Root档案系统移到NFS
您的伺服器要有足够的空间来保存您的整个Linux档案系统(几百Megabytes).建立一个新的目录给NFS输出,就叫rootfs,并在其中建立另一个新目录就叫runtime.我们使用/export/linux/rootfs/runtime.把它输出成只有您的Linux客户端可读可写,并具有root的存取权(annon=0).例如,我们的NFS是在Solaris下执行,我们用以下这个指令:


share-Fnfs-orw=pc7971,anon=0/export/linux/rootfs/runtime.

在您的Linux客户端挂上这个分割区并用GNUtar把整个Linux档案系统复制过去(预设是RedHatLinux).很重要的是当您使用GNUtar指令,因为所有的tar指令可能无法正确地处理blockdevice的specialnodes.然後编辑档案/export/linux/rootfs/runtime/etc/fstab并变更根目录的设定,使根目录符合以nfsmount取代自己的硬碟机.你还要移去(或者至少要变更名称)/export/linux/rootfs/runtime/etc/sysconfig/network-scripts/ifcfg-eth0因为网路装置将由NFS-root初始化但不能被初始化两次.

现在在您的/etc/lilo.conf复制一行linux,例如:以linux-nfs为名,并加入以下的参数:


append="root=/dev/nfsnfsroot=/export/linux/rootfs/runtimenfsaddrs=您的-ip:伺服器的-ip:闸道器的-ip:网路遮罩:机器名称"

(您的-ip是您的Linux客户端的IP位址,是以十进位有点的方法表示,伺服器的-ip是NFS伺服器的IP位址,闸道器的-ip是Linux客户端的预设闸道器,网路遮罩是Linux客户端的网路遮罩而机器名称是Linux客户端的主机名称).再执行一遍lilo,重新启动您的电脑(仍然是由硬碟机),并选择linux-nfs开机设定.您的电脑将如先前一般启动,即使有一点慢.如果在这里有某些东西不能正常工作,您只要重新开机用您原来local的linux开机设定并试著修正它.大部份的状况是,您的NFSroot设定错误.如果有任何东西您不了解,看一下/usr/src/linux/Documentation这些档案...您或许可以看看NFS-Root-Mini-Howto.

您可以再试一次,这次只用append="root=/dev/nfs"以确定Linuxkernel可以透过DHCP/BOOTP要求而获得您所设定的IP参数.如果要这样做,您必须在您的DHCP设定档中加入以下这些选项(当然是要设定您自己的网路组态),加上您的机器的硬体及IP位址:


--------------------------------------------------------------------------------

optionsubnet-mask255.255.252.0;
optionrouters129.194.68.1;
optionroot-path"/export/linux/rootfs";


--------------------------------------------------------------------------------

如果您的Linuxkernel须要再加入其它指令参数,您可以用optionoption-177来加入.
下一步要使我们的系统在唯读的NFS档案系统下可以工作.


产生唯读的NFSRoot档案系统
既然我们要我们的root档案系统在大部份的Linux客户端以唯读的方式挂上,那就要使档案系统有些微的不同,因此我们将需要写入权限的地方以ramdisk或filecache取代.我们把这个档案系统建立在/export/linux/rootfs目录下,而标准的版本则直接放到/runtime/下.登入您的NFS伺服器并在/export/linux/rootfs目录下,建立以下的目录跟连结:


bin->cache/bin
dev->ramdisk/dev
etc->ramdisk/etc
lib->cache/lib
root->ramdisk/root
sbin->cache/sbin
tmp->ramdisk/tmp
usr->cache/usr
var->ramdisk/var
cache/
bin->/runtime/bin
lib->/runtime/lib
sbin->/runtime/sbin
usr->/runtime/usr
mnt/
cdrom/
floppy/
tmp/
proc/
ramdisk/
dev->/runtime/dev
etc->/runtime/etc
root->/runtime/root
tmp->/runtime/tmp
var->/runtime/var
就如您所见的,它看起来像正常的rootfilesystem,除了少部份几个是重新指到/ramdisk,有些则重新指到cache目录.当用唯读的NFSfilesystem开机,我们将挂上一个已初始化过的ramdisk放在/ramdisk下.同样□自己硬碟的分割区将被挂在/cache给NFS快取使用.粗略的说,这个档案快取的原理是当theprincipleofthefilecacheisthatwheneverasymboliclinkfromthecachesubdirectoryisfollowed,itisreplacedbyitstarget.如果目标自己是一个子目录,则每一个子目录会转换成一个符号连结并连结到外部档案系统的原始位置.注意档案快取使用绝对符号连结是必须的,即使它们在NFS伺服器上是无意义的.如果您不喜欢这样,可以在您的NFS伺服器上,建立一个符号连结由/runtime到/export/linux/rootfs/runtime.
在唯读的客户端加入一些设定的东西是必须的,如此才可以挂上ramdisk,及设定档案快取和侦测硬体以变更设定档.这些都由三个程序档和一个组态档来完成,您可以把它复制到您的NFS伺服器:


runtime/etc/rc.d/rc.ramdisk,可以快速设定并挂上ramdisk:

--------------------------------------------------------------------------------

#!/bin/sh
#
#设定一个ramdisk因为root透过NFS以唯读方式挂上
#
modproberd
gzip-c-d/runtime/lib/ramdisk.gz|ddof=/dev/rambs=1k>/dev/null2>&1
mount-n-text2/dev/ram/ramdisk


--------------------------------------------------------------------------------

runtime/etc/rc.d/rc.sysdetect,这是所有的机器各自独立的设定档,包括侦测及分配区域硬碟机的分割区给档案快取使用.为了空间的理由我们不在此份文件可列印的版本中包含此档,但您可以在超文件的版本找到它;
runtime/etc/rc.d/init.d/filecache.init这是用来启动档案系统的:

--------------------------------------------------------------------------------

#!/bin/sh
#
#filecache:档案快取:启动档案快取(给NFSroot用)
#
#来源功能函数库.
./etc/rc.d/init.d/functions

#看看我们如何呼叫功能函数.
case"$1"in
start)
if[-e/cache-a-r/etc/filecache.conf];then
echo-n"StartingNFSfilecache:"
#把var与tmp移到区域性的硬碟机
rm-rf/cache/var/cache/tmp
(cd/ramdisk;tarcf-vartmp)|(cd/cache;tarxf-)
(cd/ramdisk;rm-rfvartmp;ln-s/cache/var;ln-s/cache/tmp
)
chmod777/cache/tmp
#启动档案快取
daemonfilecache-don
echo""
touch/var/lock/subsys/filecache
fi
;;
stop)
filecacheoff
rm-f/var/lock/subsys/filecache
;;
*)
echo"***Usage:filecache.init{start|stop}"
exit1
esac

exit0


--------------------------------------------------------------------------------

runtime/etc/filecache.conf,档案快取的设定档

--------------------------------------------------------------------------------

Max100MB50%#
Cache/runtime/cache


--------------------------------------------------------------------------------

前两个档案应该放在前两个档案应该放在runtime/etc/rc.d/rc.sysinit,档案内最前面的位置,如下所示:

--------------------------------------------------------------------------------

#设定所需的ramdisk(给rootNFS唯读的机器)
if[-e/ramdisk-a-r/etc/rc.d/rc.ramdisk];then
/etc/rc.d/rc.ramdisk
fi

#设定硬体各自独立的参数(给每个rootNFS使用)
if[-r/etc/rc.d/rc.sysdetect];then
/etc/rc.d/rc.sysdetect
fi


--------------------------------------------------------------------------------

而第三个应该beboundasusualtotheSystemVinitdirectories:weuselinksnamedS35filecacheintherc3.dandrc5.ddirectories,andK80filecacheintherc0.d,rc1.d,rc2.dandrc6.ddirectories.
检查一下rc.sysdetect这个档案,并使它与您的硬体设备配合.特别要注意的是,如果您跟我们一样没有使用相同的显示卡及萤幕(这很可能发生的:-),看看它们在/proc/pci的回应并依此修改叙述档.在每台机器所使用的存放位置下,其rc.sysdetect之中有一段内容为,可自订的设定档(例如printcap),a为了能每台独立工作,您需要於伺服器的dhcpd.conf档案中,用特别的标记option-132设定每台机器所使用的位置.在您继续安装之前,您至少要先建立基本的几个档案runtime/etc/fstab.ref和runtime/etc/hosts.ref,这些将由rc.sysdetect叙述档在启动时透过侦测设定来完成,为了动态的设定Xservver,使用RedHat软体套件,有一件事您必须先变更的:在/usr/X11R6/bin及/usr/X11R6/lib/X11目录下,有一些相关的连结设定档及目录应该改成绝对连结.别忘了以後的Xserver更新安装也要如法泡制.

把filecache安装在runtime/bin目录下,并把它的使用说明manpage安装在runtime/usr/man/man8目录下.把bootptag或dhcptag安装在runtime/usr/local/bin目录下,并且bootptag.c(或dhcptag.c)必须放在runtime/usr/local/src目录下:它是一个发送BOOTP/DHCP要求,并以相容於shell的标准输出格式回应BOOTP/DHCP内容的小程式,就如下的□例所示:




--------------------------------------------------------------------------------

bootp_your_ip='129.194.71.32'
bootp_server_ip='129.194.77.31'
bootp_filename='XXXclean'
bootp_subnet_mask='255.255.252.0'
bootp_routers='129.194.68.1'
bootp_domain_name_servers='129.194.69.200129.194.8.7129.194.4.32'
bootp_host_name='pc7132'
bootp_domain_name='unige.ch'
bootp_root_path='/export/linux/rootfs'
bootp_broadcast_address='129.194.71.255'
bootp_nis_domain='cuisunnet.unige.ch'
bootp_nis_servers='129.194.69.200'
bootp_option_132='dufour'


--------------------------------------------------------------------------------

标记的名称与RFC2132很相似.如果您使用dhcptag,您将得到一些以dhcp_开头的标记,这些是DHCP-规格的选项内容;为了顾及相容性,其它的资讯仍然以bootp_为字首.我们使用这个程式自动设定rc.sysdetect.最後,在runtime/lib安装makeramdiskscript.我们将用它自动产生ramdisk影像档.这些软体都在超文件的版本中.
现在试著由客户端以read-writeNFS开机(仍然用硬碟开机).它将侦测您客户端的个别组态,并产生适当的档□检查/etc/fstab,/etc/hosts,/etc/sysconfig/network是否设定正确.如果您看到的不是这样,请在单人工作模式下重试一遍,并找出您在rc.sysdetect叙述档中所犯的错误.

等到它可以正常工作,到/lib目录下执行./makeramdisk.将会花几秒钟,来产生一个ramdisk影像档给唯读的NFS客户端.把产生出来得ramdiskimage放在这/lib/ramdisk.gz,就这样您的组态就绪了!


由Bootprom开机
如果您还未完成它,请安装您的TCP/IPBootprom-相容的kernel影像档(可在这找到/usr/src/linux/arch/i386/boot/bpImage)即您伺服器上的/tftpboot/linux.PX.rc.sysdetect这个叙述档用来初始化您的Linuxswap及Linux资料分割区.因为要启动它,故编辑伺服器上XXXclean.tab这个档案并改变分割区的型态由hex82改为hex28,及hex83改为hex38.这是一种未知的分割区型态,但是安装程序档能把它当成预备分割区来辨识.在DHCP的设定档中,把开机档设定为XXXclean,使它能重新建立分割表.别忘了在修改完设定档後要重新启动DHCPdaemon.

最後,unexport可读写的runtime目录,并export唯读的/export/linux/rootfs目录.重新启动客户端,这一次使用开机使用Linux选单的选项.您的系统现在已是remote-bootLinux.


系统维护与更新
如果您以後想更新软体,安装一些错误修正档或安全性修正档,请按照下列步骤:

Unexportrootfs目录
Exportruntime目录为可读可写给您得客户端
设定您客户端的nfsroot目录为runtime(在/etc/bootptab中设定)
启动您得Linux客户端,并安装您想安装的东东.不要怕使用rpm,它可以做得很好(只要小心当您安装任何软体套件时,要注意一些您做过的修正可能有些要作修改).
当您完成後重新换成正常的export
这是指,您必须在local安装的状态下,才能更新您的server-based设定的软体.

3.3设定DOS6及Windows3.1
在您的客户端电脑,使用您喜欢的dos软碟开机(记得开机时,按空白键取消BootPROM开机).格式化您硬碟中的dos分割区并加上/S参数,使它放入作业系统.建立一个名为DOS的子目录,把DOS拷贝进去.安装你所喜欢的网路客户端程式(例如MicrosoftLanManager),Windows3.1,等等.使用DHCP通讯协定设定IP组态.

您必须恢复原本被BootPROM所使用掉的记忆体空间(当DOS启动後这些记忆体不再需要用到啦)加入下面这一行到您config.sys内的第一行:



--------------------------------------------------------------------------------

device=\util\bputil.sys-r


--------------------------------------------------------------------------------

(bputil是一个TCP/IPBootPROM工具磁片中的程式).不用怕使用EMM386最佳化您所使用的记忆体,您可以把网路卡ROM所占的区域纳入管理,因为它在这时已经用不到了.但要记得把网路卡所使用的RAM区块不纳入管理,否则您将无法连接到您的伺服器.
如果您不让您的客户端机器使用无效的登入名称,把我们的nobreak.syspseudo-device驱动程式放在您config.sys的开头处并把以下这些东西放到您的autoexec.bat:



--------------------------------------------------------------------------------

rem--我们使用c:\logged为一个旗号
delc:\logged>nul
:loginneeded
cls
echoPleasetypeinyourloginnameandpassword
echo.
netlogon*
rem--theloginscript已经建立好c:\logged
ifnotexistc:\loggedgotologinneeded
delc:\logged
rem--使break功能生效
echoYes>NOBRK


--------------------------------------------------------------------------------

重新开机并在开机选单中选择Bootfromlocalhard-disk选项,确定可以开机.


把组态设定移到伺服器
回到伺服器上,建立一个分享名称为admin,用来放一些系统管理者用的东东.如果伺服器是跑Unix,建议您把/tftpboot子目录用softlink放一份到admin,这样您可以直接由客户端传回开机影像档.在admin目录内,建一个/utils子目录并放入如下的工具:

mrzip.exe,一个用来压缩您客户端硬碟影像档的程式.
mrunzip.exe,一个用来回存您硬碟影像档到伺服器的程式.
您也需要把一些用来清理硬碟及产生压缩影像的批次档放到相同的目录下,这些批次档如下:

--------------------------------------------------------------------------------

@echooff
if"%1"==""gotoerror
echo>c:\lanman.dos\lmuser.ini
l:\utils\mrzipl:\tftpboot\%1
gotoend
:error
echoUsage:MAKEIMG{image-name-without-extension}
:end


--------------------------------------------------------------------------------

现在回到您的客户端,以下将以adminmount为磁碟机L:为□例作说明接著执行您建立的批次档,如果您还没做那可以按下列的指令执行(不一定要用绝对路径)




--------------------------------------------------------------------------------

L:\util\mrzipL:\tftpboot\win31


--------------------------------------------------------------------------------

一分钟过後,您伺服器上的/tftpboot子目录下将有两个新档案,名称为win31.imz,是您硬碟内容的压缩影响档win31.chk,这是相关的检查档(是partitionbootrecord细部修改後的拷贝).在这真正的目录内,只要建立一个bpunzip的symboliclink(或这用拷贝的)且命名为win31.P.

您的硬碟为主的远端开机设定现在一切就绪啦.


测试远端开机客户端
现在重新启动您的客户端并在开机选单中选DOSandWindows3.1的选项.bpunzip这程式将传给您一些它产生影像的表格讯息,并自网路下载整个开机影像档(因这是第一次它看到这个开机影像档).这将会花掉一分钟左右.接著它会解压缩这个影像到DOS分割区,并由他开机.这就是你要的,您的远端开机客户端完成啦!

下一次您重新开机,它只会解压所这个影像档,大概在30秒内完成.


转换设定档给其他机器
如果您要为每台机器修正一些设定(例如预设印表机),或者如果您需要变更一些不能透过DHCP通讯协定修改的网路设定,您可以使用unzipreg.exe程式来处理,它必须放到客户端的autoexec.bat(原始程式码在这).这程式将读取一个由bpunzip产生的特殊隐藏档案,名称为BOOTP.ANS,它的内容是由伺服器透过BOOTP/DHCP通讯协定回传的.接著,它将读取第一个参数所指的档案名称,藉由BOOTP/DHCP的回应内容,以UNZIPREG:标签名:这种格式取代所有的字串,并把结果写入第二个参数所指的档案名称.例如,如过您有个档案名为input.bat内容为:




--------------------------------------------------------------------------------

sethostname=UNZIPREG:HOSTNAME:
setdomainname=UNZIPREG:DOMAINNAME:
setgateway=UNZIPREG:ROUTER:
setsubnetmask=UNZIPREG:SUBNET:
setprinter=UNZIPREG:T180:


--------------------------------------------------------------------------------

而您执行了这个指令

--------------------------------------------------------------------------------

unzipreginput.batoutput.bat


--------------------------------------------------------------------------------

您将得到一个档案名为output.bat包含内容:

--------------------------------------------------------------------------------

sethostname=pc7179
setdomainname=unige.ch
setgateway=129.194.76.1
setsubnetmask=255.255.252.0
setprinter=laserwriter1


--------------------------------------------------------------------------------

假设您的DHCP设定档定义这台机器名为pc7179,领域名称为unige.ch,等等,而option-180标记是laserwriter1.
也可以透过这种登入修改Windows桌面.我们写了一个小程式simpleprogram用来增加PROGMAN.INI档案,允许为一群使用者设定同样的桌面.

在为任何一台客户端机器设定後,别忘了使用mrzip重新建立磁碟影像档以维持您的所有变更.


3.4设定Windows95
在此份文件先前的版本,我们使用过微软公司的Windows95server-basedinstallation,但是用这方法太过痛苦又不是那麽的有价值:

它就真的是非常的虚拟
大部份的软体套件都不支援它而且如果您试著去安装结果通常是失败的.包括,MicrosoftInternetExplorer,OnNet32,Novell'sProtected-modeclient(这较MicrosoftClientforNetware安全).
因为微软公司不提供Windows95在真实模式下的TCP/IP相容的驱动程式所以您无法使用MicrosoftNetworkclientoverTCP/IP这也就意味著您不能使用Samba
因为当客户端一启动就会锁住一些动态连结档造成许多程式几乎无法更新,如果您试著去更新它则会出现违背分享(sharingviolations)的错误.
因此几个月前我们放弃这份错误百出的资料(您仍然可在这找到http://cuiwww.unige.ch/info/pc/remote-boot/win95old/win95old.html)然後换到我们这个新的disk-based远端启动的概念.基本上,这种Windows95安装方法就跟安装DOS一样容易.

建立一台独立的客户端
在客户端用DOS开机,如果您已经设定好DOS/Windows3.1那就随便由开机选项中选一个,或者用一个软碟开机(按space键可以跳过BootPROM).使用第一种方法的优点是你已经有一台可使用网路的客户端,并且只需要把Windows95的安装磁片放到您的伺服器上的某个地方.

如果您由软碟开机,您的第一步是安装作业系统,方法是格式化您硬碟机的DOS分割区并用/S的选项.如果您使用DOS/Windows3.1的组态,那麽首先您要清除一些您安装Windows95时不需要的档案以及一些在您最後的开机影像中不需要的档案(例如,WINDOWS这个目录).

开始安装Windows95,照著步骤把它装在local.安装最後,程式会重新启动您的客户端电脑,做一些设定并再重新启动一次.这几次的重新开机,您必须再您的开机选单选择Bootfromlocalhard-disk选项.等到您设定好您所需要的驱动程式後,您可以执行defrag做完整的硬碟重组(包含重组未使用得磁碟空间).

您或许也想要使用BootPROM所占掉的记忆体,只要在config.sys第一行加上:



--------------------------------------------------------------------------------

device=\util\bputil.sys-r


--------------------------------------------------------------------------------

(bputil是放在TCP/IPBootprom工具磁片中).不同於DOS,您避需避免在Windows95中使用EMM386.
如果您要使用Windows95OSR2(或叫MSWIN4.1,或者Windows95servicepack1,或者Windows95withInternetExplorer),您要在MSDOS.SYS中的[Options]段加一行(没错它是文字档):



--------------------------------------------------------------------------------

AUTOSCAN=0


--------------------------------------------------------------------------------

这样可以使Windows知道您开机时不自动启动ScanDisk.
当所有的软体都放在伺服器时,如果您要减轻网路及伺服器的负担(这将增进您的系统效率),您可以考虑安装这套相当不错的SharedLANCache,由MeasurementTechniques,Inc生产的(参考http://www.lancache.com).这套软体在每台客户端电脑执行,它会对所有从网路上取得的资料放在区域性的硬碟中快取.即使像MS-Office在您第二次执行时也会更快...您的每台客户端电脑都要有一份版权,不是它还不是很贵,这家公司对於大专院校有特惠价格.更好的是您可以到他们的网页下载免费的评估版.



把设定档移到伺服器
伺服器端,如果您目前还没有建一个名为admin的目录,那就建一个.这将放一些系统管理要用的东西.如果伺服器是Unix的机器,现在把admin目录用softlink到/tftpboot子目录下,这样您可以由客户端直接把影像档放到这.在admin目录内,建立一个/utils子目录并把下列工具放进去:

mrzip.exe,一个用来产生您客户端硬碟机压缩影像的程式.
mrunzip.exe,一个用来把压缩影像档从伺服器回存到您客户端硬碟的程式.
在您的客户端开个MS-DOS视窗,可以把您的admin用网路磁碟机挂在L:并执行下列的指令(不一定要使用绝对路径,多打几个字无害啦:-)



--------------------------------------------------------------------------------

L:\util\mrzipL:\tftpboot\win95


--------------------------------------------------------------------------------

这将在伺服器的/tftpboot子目录下,产生两个新档案,名为win95.imz,一个您客户端硬碟机的压缩影像及win95.chk,检查用的档案(其实内容是把开机分割区做些许的变动).真正的目录,只要建个名为win95.P的符号连结到bpunzip(或者拷背一份).

现在您的Windows95远端开机组态就完成啦.


测试远端开机客户端
现在重新启动您的客户端电脑并从开机选单中选择Windows95.bpunzip程式将给您一些关於它更新影像表的讯息,并且从网路下载整个开机影像(如果它是第一次看到这个开机影像).这大约会花掉两分钟.接著它将解压缩这个影像档到DOS分割区,并启动它.就这样,您的远端开机客户端就序啦!下一次您重新开机,它只会解开这个影像档,大概会花40秒.


转换为其它分身的设定
Windows95与Windows3.1最大的不同是加入了即插即用的程式码,即自动侦测您的硬体设备.它本身无舍坏处,但问题是出在它太过灵敏,而且有时後会出□.

如果您试著用同样的开机影像去启动另一台客户端机器,您将在收到一堆Windows侦测到新的硬体设备的讯息:一片新的音效卡,一棵新的硬碟机,一片新的网路卡,或者一只新的滑鼠...会这样的原因有二:


这些设备可能使用不同的硬体资源(比如,滑鼠不是接在相同的连接埠,音效卡不是接在同样的扩充槽-没错,这会被侦测到)
这些设备可能通知Windows95它们的序号(比如,每台跑Windows95的网路卡,从最基础的乙太网路位址就每台都不一样了)
事实上,如果Windows95的即插即用功能可以正常工作的话,自动侦测变更的硬体设备并不会出问题,所以如果即插即用功能失效时,问题就来了.例如,Windows95对上我们的罗技PS2滑鼠时就不能即插即用,更糟的是滑鼠就消失了.要解决这类问题方法就是,尽可能使全部电脑有相同的设备.
您无法避免的问题是每台电脑的网路卡.很不幸的,给我们的SMCEtherEX使用的即插即用的程式码会使电脑当机.唯一的解法是使Windows95相信它已经知道有这片网路卡,且不需触动即插即用机制.这个技巧就是透过开机自动执行档autoexec.bat,自动的把关於这片网路卡的设定值加入Windows95的系统注册资讯.要注意的是使用PCI的网路卡并不需要这个技巧.

到您的客户端电脑,编辑开机自动执行档autoexec.bat并加入下列几行:



--------------------------------------------------------------------------------

rem---修正Windows系统注册资讯以避免即插即用功能侦测
cls
unzipregc:\lib\smc.regc:\temp\smc.reg
regedit/L:c:\win95\system.dat/R:c:\win95\user.datc:\temp\smc.reg
echo.
delc:\temp\smc.reg


--------------------------------------------------------------------------------

regedit是标准Windows95的程式.如果您在Windows95下执行它,它可以帮您流览您的系统登录资讯,或者如果您在DOS下执行它,它可以对您的系统登录资讯做一些简单的修正.unzipreg.exe是一个自制的小程式,您可以放在您的路径下的任何地方(原始程式至在这).它将读取一个由bpunzip所产生的特别隐藏档案,名称是BOOTP.ANS,它包含来自伺服器的原始BOOTP/DHCP回应资讯.然後,它将读取第一个参数的档案(c:\lib\smc.reg),然後以BOOTP/DHCP回应的资料取代档案内所有以UNZIPREG:tagname:为格式的内容,接著写入第二个参数的档案(c:\temp\smc.reg).
在lib子目录下,我们有个名为smc.reg的档案其内容如下:



--------------------------------------------------------------------------------

REGEDIT4

[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C0]
"HardwareID"="*SMC8416,ISAPNP\SMC8416"
"HWRevision"="1.0.10"
"DeviceDesc"="SMCEtherEZ(8416)"
"Class"="Net"
"Driver"="Net\\0001"
"CompatibleIDs"="*SMC8416"
"Mfg"="SMC"
"ConfigFlags"=hex:10,00,00,00

[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C0\Bindings]
"MSTCP\\0001"=""

[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C0\LogConfig]
"0000"=hex:00,04,00,00,00,20,00,00,10,00,00,00,04,00,00,00,00,00,00,00,a8,0e,\
00,00,20,00,00,00,02,00,00,00,01,00,0c,00,00,00,00,00,00,00,00,00,e0,ff,20,\
00,40,02,ff,03,00,00,04,03,2c,00,00,00,01,00,00,00,01,00,14,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,e0,ff,ff,00,20,00,00,00,00,0c,00,ff,ff,0f,00,00,\
00,00,00,2c,00,00,00,01,80,00,00,01,00,14,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,e0,ff,ff,00,80,00,00,00,00,0c,00,ff,5f,10,00,00,00,00,00,00,00,00,\
00

[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C1]
"HardwareID"="*SMC8416,ISAPNP\SMC8416"
"HWRevision"="1.0.10"
"DeviceDesc"="SMCEtherEZ(8416)"
"Class"="Net"
"Driver"="Net\\0001"
"CompatibleIDs"="*SMC8416"
"Mfg"="SMC"
"ConfigFlags"=hex:10,00,00,00

[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C1\Bindings]
"MSTCP\\0001"=""

[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C1\LogConfig]
"0000"=hex:00,04,00,00,00,20,00,00,10,00,00,00,04,00,00,00,00,00,00,00,a8,0e,\
00,00,20,00,00,00,02,00,00,00,01,00,0c,00,00,00,00,00,00,00,00,00,e0,ff,20,\
00,40,02,ff,03,00,00,04,03,2c,00,00,00,01,00,00,00,01,00,14,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,e0,ff,ff,00,20,00,00,00,00,0c,00,ff,ff,0f,00,00,\
00,00,00,2c,00,00,00,01,80,00,00,01,00,14,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,e0,ff,ff,00,80,00,00,00,00,0c,00,ff,5f,10,00,00,00,00,00,00,00,00,\
00


--------------------------------------------------------------------------------

这个档案一开始由Windows95的regedit产生.我们把关於网路卡的设定部份输出成一个档案(HKEY_LOCAL_MACHINE/Enum/ISAPNP/SMC8416)然後用UNZIPREG:MACID:记号取代网路卡的硬体位址.当我们在这档案中执行unzipreg,它会自动的以网路卡真实的硬体位址值取代我们所设定的记号.注意这里有个数字在MACID之後的有时是C0有时是C1.即使放一个不存在的网路卡在这个登录档中不会出□,我们还是把两项都放进去.
还要一次ㄡ,这整个技巧对PCI网路卡而言并不需要.顺便一提的是,我们可以用同样的方法自动的配置主电脑名称,当Windows95不能透过DHCP取的设定时.我们只须加入下列几行到我们的smc.reg档案中:



--------------------------------------------------------------------------------

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
"ComputerName"="UNZIPREG:HOSTNAME:"

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP]
"HostName"="UNZIPREG:HOSTNAME:"

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\ComputerName\ComputerName]
"ComputerName"="UNZIPREG:HOSTNAME:"


--------------------------------------------------------------------------------

您也可以使用同样的机器按照机器的型态跟位置来设定其他的环境.这个□例,您一样可以参考DOS/Windows3.1那一段的叙述.

在变更任何客户端机器的设定後,千万别忘了用mrzip重新建立磁碟影像,否则您所有的设定都会不见.

使用这个系统登录资讯的小技巧,您的设定资讯将可以正常的转移到所有的机器.如果您无法避免Windows去侦测一些机器上的新硬体,试著由这台机器重新建立磁碟影像档.包含针对这台机器所设定的登录资讯也要放入磁碟影像中,如果顺利的话可以解决这个问题.

当磁碟影像档解压缩时会花一些时间(通常是20-30秒.),您可以给使用者一些讯息或者就放张漂漂的图给他们看.这个工作可以很简单的完成(看看下一篇文件的BPUNZIP).

如果您想得到更多设定Samba的资讯与工具给远端开机的电脑使用,我们还写了另一份文件.可以看看http://cuiwww.unige.ch/info/pc.



--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

4.TCP/IPBootprom相关工具程式
这一段将把我们为TCP/IPBootPROM所写的程式作一些说明.


4.1MENUEDIT
这是在DOS下执行的程式,用来编辑给TCP/IPBootprom的开机选单叙述档.它很简单,不过比原厂所提供的开机选单叙述档来的方便.您可以按F1看到一些线上说明.如果您想要加强他的功能(比如加入剪贴功能),我会很乐意发表您的新版本.

原始程式为Pascal语法可在这取得.


4.2BPHDBOOT
此bootimage将载入硬碟的masterbootrecord并执行它.

这个bootimage对於那些需要重新开机才能完成所有设定的作业系统是相当方便的.它也可以用在当您要强迫清理硬碟的时候.

原始程式为Assembler语法可在这取得.


4.3BPCLEAN
此bootimage将重新写入硬碟的masterbootrecord,包含硬碟的分割表.此外,它可以快速格式化DOS(FAT16)资料分割区(但无法使它可开机).因为版权的关系,我们必须重新规划我们的masterbootrecord与FAT16开机磁区,除了一些远端开机的讯息外,它们与标准的分割区大致上是一样的.为了使这个程式能工作,您或许需要关掉BIOS对masterbootrecord的保护(因为每次开机都更新一遍).

这个程式下载与这个程式同样主档名的分割表叙述档其副档名为.tab.这个档案可以包含空行,注解由记号开始但不得超过512个字元.

前四个不含空白及注解的几行应该包含四个硬碟分割区的叙述.第五个不含空白及注解的那一行应包含下一个要载入的开机影像档名称.

分割区的叙述行由由空格或tab键来分割,必须如下这三种格式:



--------------------------------------------------------------------------------

typeboot?1st-cyl1st-head1st-sectlast-cyllast-headlast-sect
typeboot?1st-cyl1st-head1st-sectrelative-size
typeboot?relative-size


--------------------------------------------------------------------------------

第一种格式,给予精确的分割区叙述.
第二种格式,第一个sector位置有定义但分割区的结束位置是依要求的分割区大小自动计算.
第三种格式,第一个sector依照前一个分割区的结束位置自动推算且分割区的结束位置是靠所要求的分割区大小自动计算.这种格式是完全决定於硬碟的大小.
所有的数字都假设十进制,除非字首有出现钱字号,这样才会被设定为十六进制.
分割区的typeDOS分割区小於32Mb为4,DOS分割区在32Mb到500Mb之间为6.其他的值可以在使用Linuxfdiskhelp找到例子.
如果可开机分割区boot?这一段应该设定成Y而其它分割区设定成N.这个旗标是给主要开机纪录(masterbootrecord)所使用.
1st-cyl,1st-head及1st-sect是关系著这个分割区的第一个磁区.千万别忘记,磁柱及磁头是从0开始,而磁区是从1开始.
last-cyl,last-head及last-sect是关系著这个分割区的最後一个磁区.分割区通常结束在磁柱的边界.
分割区所占的大小比例可以下列的方法表示:
+10Mb是指分割区至少要有10Mb(即2048磁区);
-100Mb是指分割区必须预留至少100Mb(即20480磁区)可用的空间给下一个分割区;
+30%是指分割区必须在目前的位置,占住至少30perceny的空间;
-70%是指分割区应留下至少70percent的空间在目前的位置给下一个分割区.
以大小比例定义分割区时通常会在磁柱的边界结束,并且除非第一个分磁区的位置是正确的,才会从磁头的边界处开始.以我们所知,这是为了符合标准的使用.
当一个标签附加在一个分割区叙述句之後,相对应的分割区会被格式化成DOSFAT16的分割区,无论原本是哪种格式.分割区形式4跟6是相容的,而且它在清理学生所使用的电脑时相当有用的.这种快速格式化只要花几十秒.

预设值,bpclean是编译成支援LBA(不超过1024个磁柱,但可达256个磁头).某些奇怪的BIOS及某些奇怪的作业系统较喜欢另一种NORMAL模式(可达4096个磁柱,但不能超过64个磁头);如果您需要这种模式,那麽把LBA的定义从原始程式里改成注解然後重新编译一遍.

Assembler语法的原始程式码在这.


4.4MRZIP,MRUNZIPandBPUNZIP


MrZip是一个在DOS下执行的程式,用来建立压缩的DOSFAT16分割区.第一步,先分析磁碟机的使用状况,它然後只对有使用到的资料做压缩,接著用相当快的(并不是最有效率的)统计的压缩演算法则来压缩资料.已经支援Windows95的长档名,但是副档名为.SWP的档案并不会储存.在各式不同的档案类型中,已经包含许多magicnumbers,且已跟原始资料做过检查的处理.当档案容量的高位序号数字增大时,这个检查码储存在档案的容量的低位序号数字中.如果您在建立压缩影像档前把您硬碟的序号归零,则您可以使用这个数字来追踪您影像档的更新次数.

因为MrZip会使用直接磁碟存取,建议您在执行前先把磁碟机快取区的资料回存.Windows95似乎是对做一制性的管理直接磁碟存取□

MrUnzip是一个在DOS下执行的程式,用来解压缩磁碟影像档到硬碟机中,使用直接磁碟存取.不要跟任何具有快取功能的程式一起使用,因为光是这个程式就已经快把DOS给折磨死了...不管怎样,如果您要恢复一个无法开机的机器那麽它会是将很有用的.

BpUnzip是一个开机影像用来管理压缩硬碟的影像档.粗略的来说,它将由硬碟机的影像来开机并用同样的名称,副档名为.imz.

首先,它会先读取分割区表并检查


第一个DOS分割区,磁碟影像档回存的地方
分割区中最後一个磁柱,以後将储存压缩硬碟影像.
接著它会读取第一个未用到的磁柱的第一个磁区并检查是否已经有一个影像表.如果不是这样,或者影像表内容有点矛盾,或者两个shift键都被按下时(一种特别的general-cleaning信号),这个影像表将会被清除.
如果影像表还没有包含所需的影像,它会透过TFTP通讯协定载入并加在影像表内.如果在前面所载入的影像之後,没有足够的空间来存放旧的影像资料时,则旧的影像档会被砍掉.如果影像档已经存在影像表中,最新的开机影像磁区(包含检查码)将会透过TFTP通讯协定载入并且与目前得影像档做比较.如果它们不完全一致,则压缩影像会再重新载入一次.

这个影像接著会被解压缩,所有的magicnumbers都再确认,并检查解压缩後的资料.如果解压缩失败,或者检查结果与最新的开机磁区不吻合,则影像档将会重新载入并修正一次.否则,程式会把控制权交给开机磁区,作业系统就会启动.

如果bpunzip透过副档名.P载入(如win95.P),则它会假设TFTP伺服器在port59有加强型的介面(在正规的port69之外所附加的).BpUnzip将透过它以较大的封包格式载入影像档,通常是以1408bytes来取代每个封包512bytes(这种转换使用大封包的技巧有点像TCP/IPBootprom所使用的).

同理,如果bpunzip是透过副档名.G载入(如win95.GP),则它将会先下载一个以同样主档名的GIF图档(如win95.gif)并在开机时把它秀在营幕上.这个程式只能在800x600,256色的模式下工作(即使GIF图档可以更小或者使用更少的颜色).如果您想要看看开机的流程记录,则这个标题可以按ESC键移除.如果您的显示卡不是VESA相容型,则这个功能您不能使用.另外,还要注意的是这个标记的执行完成棒是使用调色盘的最後十六色来显示.如果不想使用这个功能,或者希望修正它.顺便一提,如果您不喜欢我们标记的执行完成棒,您可以自由的改变它(在GIFDATA.ASM),但请保留我们的名字在可以看得到的地方.

目地分割区不需要完全跟原始的大小相同;它只要有足够的空间来存放分割区中,所有使用到的磁柱.如果目地分割区小於原始的分割区,则档案对硬表FAT将会因此而萎缩(但磁柱大小则不变).如果目地分割区大小大於原始分割区,则档案对应表FAT将会尽可能的扩大.然而,如果目地分割区比原始分割区大更多,可能65518个磁柱就不够覆盖所有的空间(因为磁柱大小是无法改变的).像这种状况,bpunzip将会产生警告,告诉使用者有一些空间流失掉了.

预设值,bpunzip是编译成支援LBA(不超过1024个磁柱,但可达256个磁头).某些奇怪的BIOS及某些奇怪的作业系统较喜欢另一种NORMAL模式(可达4096个磁柱,但不能超过64个磁头);如果您需要这种模式,那麽把LBA的定义从原始程式里改成注解然後重新编译一遍.

Assembler语法的原始程式码在这.

如果使用Solaris2.5当TFTPserver.在处理超过16Megabytes时,会有问题.这是因为它无法处理超过32768packetsperfile这是一个已知的臭□,但直到目前SUN仍未提供修正.我们建议您使用更有效率的加强型extendedTFTPserver(它也支援其他作业系统,就在TCP/IPBootprom工具磁片中).


4.5NOBREAK
Nobreak.sys相当小(大概只有350bytes)的驱动程式,它将加在您config.sys中的开始处.它的目的是保护开机程序,直到使用者登入.DOS为这提供一种设定(名为BREAK=OFF),但它不够暴力,并且在autoexec.bat没舍用.我们的驱动程式工作原理是当中断要求产生时修改键盘的扫描码,直接在BIOS层工作.以这方法,所有的程式在中断未致能前都收不道中断讯息.

这个驱动程式必须放在config.sys档中(或者使用UndocumentedDOS的devlod程式).接著,可以透过传送Yes到NOBRK这个虚拟装置,并且传送No而禁能(事实上,只需要第一个字元,Y或N才是最重要的).

因为这个驱动程式依靠BIOS,所以它只能在DOS跟Windows3.1.下工作Windows95则有它自己的低阶键盘处理机制.

Assembler语法的原始程式码在这.



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

5.讨论
我们在这将讨论关於这个架构的相关理论性议题.


5.1Bootproms与硬碟机
Bootproms已经出现相当久了,而通常我们只会把它们使用在无磁碟机的电脑.但我们主张,Bootproms用在具有硬碟机的电脑将更有趣,因为我们得到了双面的利益:

一个Bootprom可以使得您的架构更加稳定,因为它可以确定电脑必定会以同一个开机步骤开机,即使是中了病毒或分割表损毁.还可以这样作,也就是我们做过的,在载入作业系统之前先清理您的硬碟
有硬碟机使得这个组态更加有效率,因为它可以透过快取而降低网路负载,并允许更有效率的swap.

5.2使用那一种Bootprom?
个人电脑可用的Bootproms相当多.我们有许多理由选择KöppenEDVGmbH的TCP/IPBootprom:


它是以BOOTP/DHCP通讯协定为基础,这些通讯协定已由RFCs公开的定义.它的定义是当BOOTP/DHCP伺服器收到未知的客户端的要求讯号,将不会有任何回应.这是用来防止有多台伺服器时而互相干扰,当您苦於MSD开机伺服器的体验.而且,而且IP只能在子网路内广播,这样比起IPX会产生较低的杂讯.
它可使用多种作业系统.
技术资料与API资料可索取.
可以自己写开机载入程式(我们试过)
开机的程序可以有更多的变化.特别是,它可以允许我们在旧式的AST电脑关掉软碟的开机,这在原机器的BIOS不包括这项功能.
提供建立与维护开机选单的工具.


--------------------------------------------------------------------------------
打开驱动中国APP,了解更多热点新闻