Linux 版 (精华区)

发信人: clx (楚留香), 信区: Unix
标  题: Linux Remote-Boot mini-HOWTO (05)
发信站: 紫 丁 香 (Sun Jun 28 11:32:11 1998), 转信

Linux Remote-Boot mini-HOWTO: 使用 Red-Hat Linux, DOS,
Windows 3.1 及 Windows 95 设定远端开机工作站 : TCP/IP
Bootprom 相关工具程式
Previous: 如何设定
Next: 讨论 


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 语法的原始程式码在这.


Linux Remote-Boot mini-HOWTO: 使用 Red-Hat Linux, DOS,
Windows 3.1 及 Windows 95 设定远端开机工作站 : TCP/IP
Bootprom 相关工具程式
Previous: 如何设定
Next: 讨论 

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.244.16]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.922毫秒