当前位置:Linux教程 - Linux资讯 - Linux Remote-Boot mini-HOWTO

Linux Remote-Boot mini-HOWTO

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  就如您所见的, 它看起来像正常的 root filesystem, 除了少部份几个是重新指到 /ramdisk, 有些则重新指到 cache 目录. 当用唯读的 NFS filesystem 开机, 我们将挂上一个已初始化过的 ramdisk 放在 /ramdisk 下. 同样□ 自己硬碟的分割区将被挂在 /cache 给 NFS 快取使用. 粗略的说,这个档案快取的原理是当the principle of the filecache is that whenever a symbolic link from the cache subDirectory is followed, it is replaced by its target. 如果目标自己是一个子目录, 则每一个子目录会转换成一个符号连结并连结到外部档案系统的原始位置. 注意档案快取使用绝对符号连结是必须的, 即使它们在 NFS 伺服器上是无意义的. 如果您不喜欢这样, 可以在您的 NFS 伺服器上,建立一个符号连结由 /runtime 到 /eXPort/Linux/rootfs/runtime .  在唯读的客户端加入一些设定的东西是必须的, 如此才可以挂上 ramdisk, 及设定档案快取和侦测硬体以变更设定档. 这些都由三个程序档和一个组态档来完成, 您可以把它复制到您的NFS 伺服器:  runtime/etc/rc.d/rc.ramdisk, 可以快速设定并挂上 ramdisk:  -------------------------------------------------------------------------------- #!/bin/sh # # 设定一个 ramdisk 因为 root 透过 NFS 以唯读方式挂上 # modprobe rd gzip -c -d /runtime/lib/ramdisk.gz  dd of=/dev/ram bs=1k > /dev/null 2>&1 mount -n -t ext2 /dev/ram /ramdisk -------------------------------------------------------------------------------- runtime/etc/rc.d/rc.sysdetect, 这是所有的机器各自独立的设定档, 包括侦测及分配 区域硬碟机的分割区给档案快取使用. 为了空间的理由我们不在此份文件可列印的版本中包含此档, 但您可以在超文件的版本找到它;  runtime/etc/rc.d/init.d/filecache.init 这是用来启动档案系统的:  -------------------------------------------------------------------------------- #!/bin/sh # # filecache:    档案快取:    启动档案快取 (给 NFS root 用) # # 来源功能函数库. . /etc/rc.d/init.d/functions # 看看我们如何呼叫功能函数. case "$1" in   start)         if [ -e /cache -a -r /etc/filecache.conf ]; then                 echo -n "Starting NFS filecache: "                 # 把 var 与 tmp 移到区域性的硬碟机                 rm -rf /cache/var /cache/tmp                 (cd /ramdisk; tar cf - var tmp)  (cd /cache; tar xf -)                 (cd /ramdisk; rm -rf var tmp;ln -s /cache/var;ln -s /cache/tmp )                 chmod 777 /cache/tmp                 # 启动档案快取                 daemon filecache -d on                 echo ""                 toUCh /var/lock/subsys/filecache         fi         ;;   stop)         filecache off         rm -f /var/lock/subsys/filecache         ;;   *)         echo "*** Usage: filecache.init {startstop}"         exit 1 esac exit 0 -------------------------------------------------------------------------------- runtime/etc/filecache.conf, 档案快取的设定档  -------------------------------------------------------------------------------- Max 100 MB 50 % # Cache /runtime /cache -------------------------------------------------------------------------------- 前两个档案应该放在前两个档案应该放在 runtime/etc/rc.d/rc.sysinit, 档案内最前面的位置, 如下所示:  -------------------------------------------------------------------------------- # 设定所需的  ramdisk  (给 root NFS 唯读的机器) if [ -e /ramdisk -a -r /etc/rc.d/rc.ramdisk ]; then         /etc/rc.d/rc.ramdisk fi # 设定硬体各自独立的参数 (给每个 root NFS使用) if [ -r /etc/rc.d/rc.sysdetect ]; then         /etc/rc.d/rc.sysdetect fi -------------------------------------------------------------------------------- 而第三个应该 be bound as usual to the System V init directories: we use links named S35filecache in the rc3.d and rc5.d directories, and K80filecache in the rc0.d, rc1.d, rc2.d and rc6.d directories.  检查一下 rc.sysdetect 这个档案, 并使它与您的硬体设备配合. 特别要注意的是, 如果您跟我们一样没有使用相同的显示卡及萤幕 (这很可能发生的 :-), 看看它们在 /proc/pci 的回应并依此修改叙述档. 在每台机器所使用的存放位置下, 其 rc.sysdetect 之中有一段内容为, 可自订的设定档 (例如 printcap), a为了能每台独立工作, 您需要於伺服器的 dhcpd.conf 档案中, 用特别的标记 option-132 设定每台机器所使用的位置. 在您继续安装之前, 您至少要先建立基本的几个档案 runtime/etc/fstab.ref 和 runtime/etc/hosts.ref , 这些将由 rc.sysdetect 叙述档在启动时透过侦测设定来完成, 为了动态的设定 X servver, 使用 RedHat 软体套件, 有一件事您必须先变更的: 在 /usr/X11R6/bin 及 /usr/X11R6/lib/X11 目录下, 有一些相关的连结设定档及目录应该改成绝对连结. 别忘了以後的 X server 更新安装也要如法泡制.  把 filecache 安装在 runtime/bin 目录下, 并把它的使用说明 man page 安装在 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.200 129.194.8.7 129.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' -------------------------------------------------------------------------------- 标记的名称与 RFC 2132 很相似. 如果您使用 dhcptag, 您将得到一些以 dhcp_ 开头的标记, 这些是 DHCP-规格的选项内容; 为了顾及相容性, 其它的资讯仍然以 bootp_ 为字首. 我们使用这个程式自动设定 rc.sysdetect. 最後, 在 runtime/lib 安装 makeramdisk script . 我们将用它自动产生 ramdisk 影像档. 这些软体都在超文件的版本中.  现在试著由客户端以 read-write NFS 开机 (仍然用硬碟开机). 它将侦测您客户端的个别组态, 并产生适当的档□ 检查 /etc/fstab, /etc/hosts, /etc/sysconfig/network 是否设定正确. 如果您看到的不是这样, 请在单人工作模式下重试一遍, 并找出您在 rc.sysdetect 叙述档中所犯的错误.  等到它可以正常工作, 到 /lib 目录下执行 ./makeramdisk. 将会花几秒钟, 来产生一个 ramdisk 影像档给唯读的 NFS 客户端. 把产生出来得 ramdisk image 放在这 /lib/ramdisk.gz, 就这样您的组态就绪了!  由 Bootprom 开机 如果您还未完成它, 请安装您的 TCP/IP Bootprom-相容的 kernel 影像档 (可在这找到 /usr/src/linux/arch/i386/boot/bpImage) 即您伺服器上的 /tFTPboot/linux.PX . rc.sysdetect 这个叙述档用来初始化您的 Linux swap 及 Linux 资料分割区. 因为要启动它, 故编辑伺服器上 XXXclean.tab 这个档案并改变分割区的型态由 hex 82 改为 hex 28, 及 hex 83 改为 hex 38. 这是一种未知的分割区型态, 但是安装程序档能把它当成预备分割区来辨识. 在 DHCP 的设定档中, 把开机档设定为 XXXclean , 使它能重新建立分割表. 别忘了在修改完设定档後要重新启动 DHCP daemon.  最後, unexport 可读写的 runtime 目录, 并 export 唯读的 /export/linux/rootfs 目录. 重新启动客户端, 这一次使用开机使用 Linux 选单的选项. 您的系统现在已是 remote-boot Linux.  系统维护与更新 如果您以後想更新软体,安装一些错误修正档或安全性修正档, 请按照下列步骤:  Unexport rootfs 目录  Export runtime 目录为可读可写给您得客户端  设定您客户端的 nfsroot 目录为 runtime (在 /etc/bootptab 中设定)  启动您得 Linux 客户端, 并安装您想安装的东东. 不要怕使用 rpm, 它可以做得很好 (只要小心当您安装任何软体套件时,要注意一些您做过的修正可能有些要作修改).  当您完成後重新换成正常的 export  这是指, 您必须在 local 安装的状态下, 才能更新您的 server-based 设定的软体.  3.3 设定 DOS 6 及 Windows 3.1  在您的客户端电脑, 使用您喜欢的 dos 软碟开机 (记得开机时, 按空白键取消 BootPROM 开机). 格式化您硬碟中的 dos 分割区并加上 /S 参数, 使它放入作业系统. 建立一个名为 DOS 的子目录, 把 DOS 拷贝进去. 安装你所喜欢的网路客户端程式 (例如 Microsoft LanManager), Windows 3.1, 等等. 使用 DHCP 通讯协定设定 IP 组态.  您必须恢复原本被 BootPROM 所使用掉的记忆体空间 (当 DOS 启动後这些记忆体不再需要用到啦) 加入下面这一行到您 config.sys 内的第一行:  -------------------------------------------------------------------------------- device=\util\bputil.sys -r -------------------------------------------------------------------------------- (bputil 是一个 TCP/IP BootPROM 工具磁片中的程式). 不用怕使用 EMM386 最佳化您所使用的记忆体, 您可以把网路卡 ROM 所占的区域纳入管理, 因为它在这时已经用不到了. 但要记得把网路卡所使用的 RAM 区块不纳入管理, 否则您将无法连接到您的伺服器.  如果您不让您的客户端机器使用无效的登入名称, 把我们的 nobreak.sys pseudo-device 驱动程式放在您 config.sys 的开头处并把以下这些东西放到您的 autoexec.bat:  -------------------------------------------------------------------------------- rem -- 我们使用 c:\logged 为一个旗号 del c:\logged >nul :loginneeded cls echo Please type in your login name and passWord echo. net logon * rem -- the login script 已经建立好 c:\logged if not exist c:\logged goto loginneeded del c:\logged rem -- 使 break 功能生效 echo Yes >NOBRK -------------------------------------------------------------------------------- 重新开机并在开机选单中选择 Boot from local hard-disk 选项, 确定可以开机.  把组态设定移到伺服器 回到伺服器上, 建立一个分享名称为 admin , 用来放一些系统管理者用的东东. 如果伺服器是跑 Unix, 建议您把 /tftpboot 子目录用 softlink 放一份到 admin , 这样您可以直接由客户端传回开机影像档. 在 admin 目录内, 建一个 /utils 子目录并放入如下的工具:  mrzip.exe, 一个用来压缩您客户端硬碟影像档的程式.  mrunzip.exe, 一个用来回存您硬碟影像档到伺服器的程式.  您也需要把一些用来清理硬碟及产生压缩影像的批次档放到相同的目录下,这些批次档如下:  -------------------------------------------------------------------------------- @echo off if "%1"=="" goto error echo >c:\lanman.dos\lmuser.ini l:\utils\mrzip l:\tftpboot\%1 goto end :error echo Usage: MAKEIMG {image-name-without-extension} :end -------------------------------------------------------------------------------- 现在回到您的客户端, 以下将以 admin mount 为磁碟机 L: 为□例作说明接著执行您建立的批次档, 如果您还没做那可以按下列的指令执行 (不一定要用绝对路径 )  --------------------------------------------------------------------------------         L:\util\mrzip L:\tftpboot\win31 -------------------------------------------------------------------------------- 一分钟过後, 您伺服器上的 /tftpboot 子目录下将有两个新档案, 名称为 win31.imz, 是您硬碟内容的压缩影响档win31.chk, 这是相关的检查档 (是 partition boot record 细部修改後的拷贝). 在这真正的目录内, 只要建立一个 bpunzip 的 symbolic link (或这用拷贝的) 且命名为 win31.P.  您的硬碟为主的远端开机设定现在一切就绪啦.  测试远端开机客户端 现在重新启动您的客户端并在开机选单中选 DOS and Windows 3.1 的选项. bpunzip 这程式将传给您一些它产生影像的表格讯息, 并自网路下载整个开机影像档 (因这是第一次它看到这个开机影像档). 这将会花掉一分钟左右. 接著它会解压缩这个影像到 DOS 分割区, 并由他开机. 这就是你要的, 您的远端开机客户端完成啦 !  下一次您重新开机, 它只会解压所这个影像档, 大概在 30 秒内完成.  转换设定档给其他机器 如果您要为每台机器修正一些设定 (例如预设印表机), 或者如果您需要变更一些不能透过 DHCP 通讯协定修改的网路设定, 您可以使用 unzipreg.exe 程式来处理, 它必须放到客户端的 autoexec.bat (原始程式码在 这). 这程式将读取一个由 bpunzip 产生的特殊隐藏档案, 名称为 BOOTP.ANS, 它的内容是由伺服器透过 BOOTP/DHCP 通讯协定回传的. 接著, 它将读取第一个参数所指的档案名称, 藉由 BOOTP/DHCP 的回应内容, 以 UNZIPREG: 标签名 : 这种格式取代所有的字串, 并把结果写入第二个参数所指的档案名称. 例如, 如过您有个档案名为 input.bat 内容为:  -------------------------------------------------------------------------------- set hostname=UNZIPREG:HOSTNAME: set domainname=UNZIPREG:DOMAINNAME: set gateway=UNZIPREG:ROUTER: set subnetmask=UNZIPREG:SUBNET: set printer=UNZIPREG:T180: -------------------------------------------------------------------------------- 而您执行了这个指令  --------------------------------------------------------------------------------         unzipreg input.bat output.bat -------------------------------------------------------------------------------- 您将得到一个档案名为 output.bat 包含内容:  -------------------------------------------------------------------------------- set hostname=pc7179 set domainname=unige.ch set gateway=129.194.76.1 set subnetmask=255.255.252.0 set printer=laserwriter1 -------------------------------------------------------------------------------- 假设您的 DHCP 设定档定义这台机器名为 pc7179, 领域名称为 unige.ch, 等等, 而 option-180 标记是 laserwriter1.  也可以透过这种登入修改 Windows 桌面. 我们写了一个小程式 simple program 用来增加 PROGMAN.INI 档案, 允许为一群使用者设定同样的桌面.  在为任何一台客户端机器设定後, 别忘了使用 mrzip 重新建立磁碟影像档以维持您的所有变更.  3.4 设定 Windows 95  在此份文件先前的版本, 我们使用过微软公司的 Windows 95 server-based installation, 但是用这方法太过痛苦又不是那麽的有价值:  它就真的是非常的虚拟  大部份的软体套件都不支援它而且如果您试著去安装结果通常是失败的. 包括, Microsoft Internet Explorer, OnNet 32, Novell's Protected-mode client (这较 Microsoft Client for Netware安全).  因为微软公司不提供 Windows 95 在真实模式下的 TCP/IP 相容的驱动程式所以您无法使用 Microsoft Network client over TCP/IP 这也就意味著您不能使用 Samba  因为当客户端一启动就会锁住一些动态连结档造成许多程式几乎无法更新, 如果您试著去更新它则会出现违背分享(sharing violations)的错误.  因此几个月前我们放弃这份错误百出的资料 (您仍然可在这找到 http://cuiwww.unige.ch/info/pc/remote-boot/win95old/win95old.Html) 然後换到我们这个新的 disk-based 远端启动的概念. 基本上, 这种 Windows 95 安装方法就跟安装 DOS一样容易.  建立一台独立的客户端 在客户端用 DOS 开机, 如果您已经设定好 DOS/Windows 3.1 那就随便由开机选项中选一个, 或者用一个软碟开机 (按 space 键可以跳过 BootPROM). 使用第一种方法的优点是你已经有一台可使用网路的客户端, 并且只需要把 Windows 95 的安装磁片放到您的伺服器上的某个地方.  如果您由软碟开机, 您的第一步是安装作业系统, 方法是格式化您硬碟机的 DOS 分割区并用 /S 的选项. 如果您使用 DOS/Windows 3.1 的组态, 那麽首先您要清除一些您安装 Windows 95 时不需要的档案以及一些在您最後的开机影像中不需要的档案 (例如, WINDOWS 这个目录).  开始安装 Windows 95, 照著步骤把它装在 local . 安装最後, 程式会重新启动您的客户端电脑, 做一些设定并再重新启动一次. 这几次的重新开机, 您必须再您的开机选单选择 Boot from local hard-disk 选项. 等到您设定好您所需要的驱动程式後, 您可以执行 defrag 做完整的硬碟重组 (包含重组未使用得磁碟空间).  您或许也想要使用 BootPROM 所占掉的记忆体, 只要在 config.sys 第一行加上 :  -------------------------------------------------------------------------------- device=\util\bputil.sys -r -------------------------------------------------------------------------------- (bputil 是放在 TCP/IP Bootprom 工具磁片中). 不同於 DOS, 您避需避免在 Windows 95 中使用 EMM386 .  如果您要使用 Windows 95 OSR2 (或叫 MSWIN 4.1, 或者 Windows 95 service pack 1, 或者 Windows 95 with Internet Explorer), 您要在 MSDOS.SYS 中的 [Options] 段加一行 (没错它是文字档):  -------------------------------------------------------------------------------- AUTOSCAN=0 -------------------------------------------------------------------------------- 这样可以使 Windows 知道您开机时不自动启动 ScanDisk .  当所有的软体都放在伺服器时, 如果您要减轻网路及伺服器的负担 (这将增进您的系统效率) , 您可以考虑安装这套相当不错的 Shared LAN Cache,由 Measurement Techniques, Inc 生产的 (参考 http://www.lancache.com). 这套软体在每台客户端电脑执行, 它会对所有从网路上取得的资料放在区域性的硬碟中快取. 即使像 MS-Office 在您第二次执行时也会更快... 您的每台客户端电脑都要有一份版权, 不是它还不是很贵, 这家公司对於大专院校有特惠价格. 更好的是您可以到他们的网页下载免费的评估版.  把设定档移到伺服器 伺服器端, 如果您目前还没有建一个名为 admin 的目录, 那就建一个. 这将放一些系统管理要用的东西. 如果伺服器是 Unix 的机器, 现在把 admin 目录用 softlink 到 /tftpboot 子目录下, 这样您可以由客户端直接把影像档放到这. 在 admin 目录内, 建立一个 /utils 子目录并把下列工具放进去:  mrzip.exe, 一个用来产生您客户端硬碟机压缩影像的程式.  mrunzip.exe, 一个用来把压缩影像档从伺服器回存到您客户端硬碟的程式.  在您的客户端开个 MS-DOS 视窗, 可以把您的 admin 用网路磁碟机挂在 L: 并执行下列的指令 (不一定要使用绝对路径, 多打几个字无害啦 :-)  --------------------------------------------------------------------------------         L:\util\mrzip L:\tftpboot\win95 -------------------------------------------------------------------------------- 这将在伺服器的 /tftpboot 子目录下, 产生两个新档案, 名为 win95.imz, 一个您客户端硬碟机的压缩影像及 win95.chk, 检查用的档案 (其实内容是把开机分割区做些许的变动). 真正的目录, 只要建个名为 win95.P 的符号连结到 bpunzip (或者拷背一份) .  现在您的 Windows 95 远端开机组态就完成啦.  测试远端开机客户端 现在重新启动您的客户端电脑并从开机选单中选择 Windows 95 . bpunzip 程式将给您一些关於它更新影像表的讯息, 并且从网路下载整个开机影像 (如果它是第一次看到这个开机影像). 这大约会花掉两分钟. 接著它将解压缩这个影像档到 DOS 分割区, 并启动它. 就这样, 您的远端开机客户端就序啦! 下一次您重新开机, 它只会解开这个影像档, 大概会花 40 秒.  转换为其它分身的设定 Windows 95 与 Windows 3.1 最大的不同是加入了即插即用的程式码, 即自动侦测您的硬体设备. 它本身无舍坏处, 但问题是出在它太过灵敏, 而且有时後会出□.  如果您试著用同样的开机影像去启动另一台客户端机器, 您将在收到一堆 Windows 侦测到新的硬体设备的讯息: 一片新的音效卡, 一棵新的硬碟机, 一片新的网路卡, 或者一只新的滑鼠... 会这样的原因有二:  这些设备可能使用不同的硬体资源 (比如, 滑鼠不是接在相同的连接埠, 音效卡不是接在同样的扩充槽 - 没错, 这会被侦测到)  这些设备可能通知 Windows 95 它们的序号 (比如, 每台跑 Windows 95 的网路卡, 从最基础的乙太网路位址就每台都不一样了)  事实上 , 如果 Windows 95 的即插即用功能可以正常工作的话, 自动侦测变更的硬体设备并不会出问题, 所以如果即插即用功能失效时, 问题就来了. 例如, Windows 95 对上我们的罗技 PS2 滑鼠时就不能即插即用, 更糟的是滑鼠就消失了. 要解决这类问题方法就是, 尽可能使全部电脑有相同的设备.  您无法避免的问题是每台电脑的网路卡. 很不幸的, 给我们的 SMC EtherEX 使用的即插即用的程式码会使电脑当机. 唯一的解法是使 Windows 95 相信它已经知道有这片网路卡, 且不需触动即插即用机制. 这个技巧就是透过开机自动执行档 autoexec.bat , 自动的把关於这片网路卡的设定值加入 Windows 95 的系统注册资讯. 要注意的是使用 PCI 的网路卡并不需要这个技巧.  到您的客户端电脑, 编辑开机自动执行档 autoexec.bat 并加入下列几行:  -------------------------------------------------------------------------------- rem --- 修正 Windows 系统注册资讯以避免即插即用功能侦测 cls unzipreg c:\lib\smc.reg c:\temp\smc.reg regedit /L:c:\win95\system.dat /R:c:\win95\user.dat c:\temp\smc.reg echo. del c:\temp\smc.reg -------------------------------------------------------------------------------- regedit 是标准 Windows 95 的程式. 如果您在 Windows 95下执行它,它可以帮您流览您的系统登录资讯, 或者如果您在 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"="SMC EtherEZ (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"="SMC EtherEZ (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 -------------------------------------------------------------------------------- 这个档案一开始由 Windows 95 的 regedit 产生. 我们把关於网路卡的设定部份输出成一个档案 ( HKEY_LOCAL_MACHINE/Enum/ISAPNP/SMC8416) 然後用 UNZIPREG:MACID: 记号取代网路卡的硬体位址. 当我们在这档案中执行 unzipreg , 它会自动的以网路卡真实的硬体位址值取代我们所设定的记号. 注意这里有个数字在 MACID 之後的有时是 C0 有时是 C1. 即使放一个不存在的网路卡在这个登录档中不会出□, 我们还是把两项都放进去.  还要一次ㄡ, 这整个技巧对 PCI 网路卡而言并不需要. 顺便一提的是, 我们可以用同样的方法自动的配置主电脑名称, 当 Windows 95 不能透过 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/Windows 3.1 那一段的叙述.  在变更任何客户端机器的设定後, 千万别忘了用 mrzip 重新建立磁碟影像, 否则您所有的设定都会不见.  使用这个系统登录资讯的小技巧, 您的设定资讯将可以正常的转移到所有的机器. 如果您无法避免 Windows 去侦测一些机器上的新硬体, 试著由这台机器重新建立磁碟影像档. 包含针对这台机器所设定的登录资讯也要放入磁碟影像中, 如果顺利的话可以解决这个问题.  当磁碟影像档解压缩时会花一些时间 (通常是 20-30 秒.), 您可以给使用者一些讯息或者就放张漂漂的图给他们看. 这个工作可以很简单的完成 (看看下一篇文件的 BPUNZIP ).  如果您想得到更多设定 Samba 的资讯与工具给远端开机的电脑使用, 我们还写了另一份文件. 可以看看 http://cuiwww.unige.ch/info/pc.  -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 4. TCP/IP Bootprom 相关工具程式 这一段将把我们为 TCP/IP BootPROM 所写的程式作一些说明.  4.1 MENUEDIT  这是在 DOS 下执行的程式, 用来编辑给 TCP/IP Bootprom 的开机选单叙述档. 它很简单, 不过比原厂所提供的开机选单叙述档来的方便. 您可以按 F1 看到一些线上说明. 如果您想要加强他的功能 ( 比如加入剪贴功能), 我会很乐意发表您的新版本.  原始程式为 Pascal 语法可在 这取得.  4.2 BPHDBOOT  此 boot image 将载入硬碟的 master boot record 并执行它.  这个 boot image 对於那些需要重新开机才能完成所有设定的作业系统是相当方便的. 它也可以用在当您要强迫清理硬碟的时候.  原始程式为 Assembler 语法可在 这取得.  4.3 BPCLEAN  此 boot image 将重新写入硬碟的 master boot record, 包含硬碟的分割表. 此外, 它可以快速格式化 DOS (FAT16) 资料分割区 (但无法使它可开机). 因为版权的关系, 我们必须重新规划我们的 master boot record 与 FAT16 开机磁区, 除了一些远端开机的讯息外, 它们与标准的分割区大致上是一样的. 为了使这个程式能工作, 您或许需要关掉 BIOS 对 master boot record 的保护 (因为每次开机都更新一遍).  这个程式下载与这个程式同样主档名的分割表叙述档其副档名为 .tab. 这个档案可以包含空行, 注解由记号开始但不得超过 512 个字元.  前四个不含空白及注解的几行应该包含四个硬碟分割区的叙述. 第五个不含空白及注解的那一行应包含下一个要载入的开机影像档名称.  分割区的叙述行由由空格或 tab 键来分割, 必须如下这三种格式:  -------------------------------------------------------------------------------- type  boot?  1st-cyl  1st-head  1st-sect  last-cyl  last-head  last-sect type  boot?  1st-cyl  1st-head  1st-sect  relative-size type  boot?  relative-size -------------------------------------------------------------------------------- 第一种格式, 给予精确的分割区叙述.  第二种格式, 第一个 sector 位置有定义但分割区的结束位置是依要求的分割区大小自动计算.  第三种格式, 第一个 sector 依照前一个分割区的结束位置自动推算且分割区的结束位置是靠所要求的分割区大小自动计算. 这种格式是完全决定於硬碟的大小.  所有的数字都假设十进制, 除非字首有出现钱字号, 这样才会被设定为十六进制.  分割区的 type DOS 分割区小於 32 Mb 为 4, DOS 分割区在 32Mb 到 500Mb 之间为 6 . 其他的值可以在使用 Linux fdisk help 找到例子.  如果可开机分割区 boot? 这一段应该设定成 Y 而其它分割区设定成 N . 这个旗标是给主要开机纪录 (master boot record) 所使用.  1st-cyl, 1st-head 及 1st-sect 是关系著这个分割区的第一个磁区. 千万别忘记,磁柱及磁头是从 0 开始, 而磁区是从 1 开始.  last-cyl, last-head 及 last-sect 是关系著 这个分割区的最後一个磁区. 分割区通常结束在磁柱的边界.  分割区所占的 大小比例 可以下列的方法表示:  + 10 Mb 是指分割区至少要有 10 Mb (即 2048 磁区);  - 100 Mb 是指分割区必须预留至少 100 Mb (即 20480 磁区) 可用的空间给下一个分割区;  + 30 % 是指分割区必须在目前的位置, 占住至少 30 perceny 的空间;  - 70 % 是指分割区应留下至少 70 percent 的空间在目前的位置给下一个分割区.  以大小比例定义分割区时通常会在磁柱的边界结束, 并且除非第一个分磁区的位置是正确的, 才会从磁头的边界处开始. 以我们所知, 这是为了符合标准的使用.  当一个标签附加在一个分割区叙述句之後, 相对应的分割区会被格式化成 DOS FAT16 的分割区,无论原本是哪种格式. 分割区形式 4 跟 6 是相容的, 而且它在清理学生所使用的电脑时相当有用的. 这种快速格式化只要花几十秒.  预设值, bpclean 是编译成支援 LBA (不超过 1024 个磁柱, 但可达 256 个磁头). 某些奇怪的 BIOS 及某些奇怪的作业系统较喜欢另一种 NORMAL 模式 (可达 4096 个磁柱, 但不能超过 64 个磁头); 如果您需要这种模式, 那麽把 LBA 的定义从原始程式里改成注解然後重新编译一遍.  Assembler 语法的原始程式码在 这.  4.4 MRZIP, MRUNZIP and BPUNZIP  MrZip 是一个在 DOS 下执行的程式, 用来建立压缩的 DOS FAT 16分割区. 第一步, 先分析磁碟机的使用状况, 它然後只对有使用到的资料做压缩, 接著用相当快的 (并不是最有效率的) 统计的压缩演算法则来压缩资料. 已经支援 Windows 95 的长档名, 但是副档名为 .SWP 的档案并不会储存. 在各式不同的档案类型中,已经包含许多 magic numbers, 且已跟原始资料做过检查的 处理. 当档案容量的高位序号数字增大时, 这个检查码储存在档案的容量的低位序号数字中 . 如果您在建立压缩影像档前把您硬碟的序号归零, 则您可以使用这个数字来 追踪您影像档的更新次数.  因为 MrZip 会使用直接磁碟存取, 建议您在执行前先把磁碟机快取区的资料回存. Windows 95 似乎是对做一制性的管理直接磁碟存取□  MrUnzip 是一个在 DOS 下执行的程式,用来解压缩磁碟影像档到硬碟机中, 使用直接磁碟存取. 不要跟任何具有快取功能的程式一起使用, 因为光是这个程式就已经快把 DOS 给折磨死了... 不管怎样, 如果您要恢复一个无法开机的机器那麽它会是将很有用的.  BpUnzip 是一个开机影像用来管理压缩硬碟的影像档. 粗略的来说, 它将由硬碟机的影像来开机并用同样的名称, 副档名为 .imz.  首先, 它会先读取分割区表并检查  第一个 DOS 分割区, 磁碟影像档回存的地方  分割区中最後一个磁柱, 以後将储存压缩硬碟影像.  接著它会读取第一个未用到的磁柱的第一个磁区并检查是否已经有一个影像表. 如果不是这样, 或者影像表内容有点矛盾, 或者两个 shift 键都被按下时 (一种特别的 general-cleaning 信号), 这个影像表将会被清除.  如果影像表还没有包含所需的影像, 它会透过 TFTP 通讯协定载入并加在影像表内. 如果在前面所载入的影像之後, 没有足够的空间来存放旧的影像资料时, 则旧的影像档会被砍掉. 如果影像档已经存在影像表中, 最新的开机影像磁区 (包含检查码) 将会透过 TFTP 通讯协定载入并且与目前得影像档做比较. 如果它们不完全一致, 则压缩影像会再重新载入一次.  这个影像接著会被解压缩, 所有的 magic numbers 都再确认, 并检查解压缩後的资料. 如果解压缩失败, 或者检查结果与最新的开机磁区不吻合, 则影像档将会重新载入并修正一次. 否则, 程式会把控制权交给开机磁区, 作业系统就会启动.  如果 bpunzip 透过副档名 .P 载入 (如 win95.P), 则它会假设 TFTP 伺服器在 port 59 有加强型的介面 (在正规的 port 69 之外所附加的). BpUnzip 将透过它以较大的封包格式载入影像档, 通常是以 1408 bytes 来取代每个封包 512 bytes (这种转换使用大封包的技巧有点像TCP/IP Bootprom所使用的).  同理, 如果 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 语法的原始程式码在 这.  如果使用 Solaris 2.5 当 TFTP server. 在处理超过 16 Megabytes 时, 会有问题. 这是因为它无法处理超过 32768 packets per file 这是一个已知的臭□, 但直到目前 SUN 仍未提供修正. 我们建议您使用更有效率的加强型 extended TFTP server (它也支援其他作业系统, 就在 TCP/IP Bootprom 工具磁片中).  4.5 NOBREAK  Nobreak.sys 相当小 (大概只有 350 bytes ) 的驱动程式, 它将加在您 config.sys 中的开始处. 它的目的是保护开机程序, 直到使用者登入. DOS 为这提供一种设定 (名为 BREAK=OFF), 但它不够暴力, 并且在 autoexec.bat 没舍用. 我们的驱动程式工作原理是当中断要求产生时修改键盘的扫描码, 直接在 BIOS 层工作. 以这方法, 所有的程式在中断未致能前都收不道中断讯息.  这个驱动程式必须放在 config.sys 档中(或者使用 Undocumented DOS 的 devlod 程式). 接著, 可以透过传送 Yes 到 NOBRK 这个虚拟装置, 并且传送 No 而禁能 (事实上, 只需要第一个字元, Y 或 N 才是最重要的).  因为这个驱动程式依靠 BIOS, 所以它只能在 DOS 跟 Windows 3.1.下工作 Windows 95 则有它自己的低阶键盘处理机制.  Assembler 语法的原始程式码在 这.  -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 5. 讨论 我们在这将讨论关於这个架构的相关理论性议题.  5.1 Bootproms 与 硬碟机  Bootproms 已经出现相当久了, 而通常我们只会把它们使用在无磁碟机的电脑. 但我们主张, Bootproms 用在具有硬碟机的电脑将更有趣, 因为我们得到了双面的利益:  一个 Bootprom 可以使得您的架构更加稳定, 因为它可以确定电脑必定会以同一个开机步骤开机, 即使是中了病毒或分割表损毁. 还可以这样作, 也就是我们做过的, 在载入作业系统之前先清理您的硬碟  有硬碟机使得这个组态更加有效率, 因为它可以透过快取而降低网路负载, 并允许更有效率的 swap.  5.2 使用那一种 Bootprom ?  个人电脑可用的 Bootproms 相当多. 我们有许多理由选择 K?ppen EDV GmbH 的 TCP/IP Bootprom :  它是以 BOOTP/DHCP 通讯协定为基础, 这些通讯协定已由 RFCs 公开的定义. 它的定义是当 BOOTP/DHCP 伺服器收到未知的客户端的要求讯号, 将不会有任何回应. 这是用来防止有多台伺服器时而互相干扰, 当您苦於 MSD 开机伺服器的体验. 而且, 而且 IP 只能在子网路内广播, 这样比起 IPX 会产生较低的杂讯.  它可使用多种作业系统.  技术资料与 API 资料可索取.  可以自己写开机载入程式 (我们试过)  开机的程序可以有更多的变化. 特别是, 它可以允许我们在旧式的 AST 电脑关掉软碟的开机, 这在原机器的 BIOS 不包括这项功能.  提供建立与维护开机选单的工具.
[1] [2] 下一页 

(出处:http://www.sheup.com)


上一页 [1] [2]