📄 remote-boot-4.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
<TITLE>Linux Remote-Boot mini-HOWTO: 使用 Red-Hat Linux, DOS, Windows 3.1 及 Windows 95 设定远端开机工作站: TCP/IP Bootprom 相关工具程式</TITLE>
<LINK HREF="Remote-Boot-5.html" REL=next>
<LINK HREF="Remote-Boot-3.html" REL=previous>
<LINK HREF="Remote-Boot.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="Remote-Boot-5.html">Next</A>
<A HREF="Remote-Boot-3.html">Previous</A>
<A HREF="Remote-Boot.html#toc4">Contents</A>
<HR>
<H2><A NAME="s4">4. TCP/IP Bootprom 相关工具程式</A></H2>
<P>这一段将把我们为 TCP/IP BootPROM 所写的程式作一些说明.
<P>
<H2><A NAME="ss4.1">4.1 MENUEDIT</A>
</H2>
<P>这是在 DOS 下执行的程式, 用来编辑给 TCP/IP Bootprom 的开机选单叙述档. 它很简单, 不过比原厂
所提供的开机选单叙述档来的方便. 您可以按 F1 看到一些线上说明. 如果您想要加强他的功能 ( 比
如加入剪贴功能), 我会很乐意发表您的新版本.
<P>原始程式为 Pascal 语法可在
<A HREF="soft/dos/src/menuedit.pas">这</A>取得.
<P>
<H2><A NAME="ss4.2">4.2 BPHDBOOT</A>
</H2>
<P>此 boot image 将载入硬碟的 master boot record 并执行它.
<P>这个 boot image 对於那些需要重新开机才能完成所有设定的作业系统是相当方便的. 它也可以用在
当您要强迫清理硬碟的时候.
<P>原始程式为 Assembler 语法可在
<A HREF="soft/dos/src/bphdboot.zip">这</A>取得.
<P>
<H2><A NAME="ss4.3">4.3 BPCLEAN</A>
</H2>
<P>此 boot image 将重新写入硬碟的 master boot record, 包含硬碟的分割表. 此外, 它可以快速格式化 DOS
(FAT16) 资料分割区 (但无法使它可开机). 因为版权的关系, 我们必须重新规划我们的 master boot
record 与 FAT16 开机磁区, 除了一些远端开机的讯息外, 它们与标准的分割区大致上是一样的. 为了
使这个程式能工作, 您或许需要关掉 BIOS 对 master boot record 的保护 (因为每次开机都更新一遍).
<P>这个程式下载与这个程式同样主档名的分割表叙述档其副档名为 <CODE>.tab</CODE>. 这个档案可以包含空行, 注解
由记号开始但不得超过 512 个字元.
<P>前四个不含空白及注解的几行应该包含四个硬碟分割区的叙述. 第五个不含空白及注解的那一行应
包含下一个要载入的开机影像档名称.
<P>分割区的叙述行由由空格或 tab 键来分割, 必须如下这三种格式:
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
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
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<UL>
<LI>第一种格式, 给予精确的分割区叙述. </LI>
<LI>第二种格式, 第一个 sector 位置有定义但分割区的结束位置是依要求的分割区大小自动计算. </LI>
<LI>第三种格式, 第一个 sector 依照前一个分割区的结束位置自动推算且分割区的结束位置是靠
所要求的分割区大小自动计算. 这种格式是完全决定於硬碟的大小. </LI>
</UL>
所有的数字都假设十进制, 除非字首有出现钱字号, 这样才会被设定为十六进制.
<UL>
<LI>分割区的 <B>type</B> DOS 分割区小於 32 Mb 为 <CODE>4</CODE>, DOS 分割区在 32Mb 到 500Mb 之间为 <CODE>6</CODE> . 其他的值
可以在使用 Linux <CODE>fdisk</CODE> help 找到例子. </LI>
<LI>如果可开机分割区 <B>boot?</B> 这一段应该设定成 <CODE>Y</CODE> 而其它分割区设定成 <CODE>N</CODE> . 这个旗标是给主要开机纪录 (master boot record) 所使用. </LI>
<LI><B>1st-cyl</B>, <B>1st-head</B> 及 <B>1st-sect</B> 是关系著这个分割区的第一个磁区. 千万别忘记,磁柱及磁头是从 0 开始, 而磁区是从 1 开始. </LI>
<LI><B>last-cyl</B>, <B>last-head</B> 及 <B>last-sect</B> 是关系著 这个分割区的最後一个磁区. 分割区通常结束在磁柱的边界. </LI>
<LI>分割区所占的 <B>大小比例</B> 可以下列的方法表示:
<UL>
<LI><CODE>+ 10 Mb</CODE> 是指分割区至少要有 10 Mb (即 2048 磁区); </LI>
<LI><CODE>- 100 Mb</CODE> 是指分割区必须预留至少 100 Mb (即 20480 磁区) 可用的空间给下一个分割区; </LI>
<LI><CODE>+ 30 %</CODE> 是指分割区必须在目前的位置, 占住至少 30 perceny 的空间; </LI>
<LI><CODE>- 70 %</CODE> 是指分割区应留下至少 70 percent 的空间在目前的位置给下一个分割区. </LI>
</UL>
以大小比例定义分割区时通常会在磁柱的边界结束, 并且除非第一个分磁区的位置是正确的,
才会从磁头的边界处开始. 以我们所知, 这是为了符合标准的使用.
</LI>
</UL>
<P>当一个标签附加在一个分割区叙述句之後, 相对应的分割区会被格式化成 DOS FAT16 的分割区,无
论原本是哪种格式. 分割区形式 4 跟 6 是相容的, 而且它在清理学生所使用的电脑时相当有用的. 这
种快速格式化只要花几十秒.
<P>预设值, <CODE>bpclean</CODE> 是编译成支援 LBA (不超过 1024 个磁柱, 但可达 256 个磁头). 某些奇怪的 BIOS 及某
些奇怪的作业系统较喜欢另一种 <EM>NORMAL</EM> 模式 (可达 4096 个磁柱, 但不能超过 64 个磁头); 如果您
需要这种模式, 那麽把 LBA 的定义从原始程式里改成注解然後重新编译一遍.
<P>Assembler 语法的原始程式码在
<A HREF="soft/dos/src/bpclean.zip">这</A>.
<P>
<H2><A NAME="ss4.4">4.4 MRZIP, MRUNZIP and BPUNZIP</A>
</H2>
<P>
<P>
<P><CODE>MrZip</CODE> 是一个在 DOS 下执行的程式, 用来建立压缩的 DOS FAT 16分割区. 第一步, 先分析磁碟机的使
用状况, 它然後只对有使用到的资料做压缩, 接著用相当快的 (并不是最有效率的) 统计的压缩演算
法则来压缩资料. 已经支援 Windows 95 的长档名, 但是副档名为 <CODE>.SWP</CODE> 的档案并不会储存. 在各式不
同的档案类型中,已经包含许多 magic numbers, 且已跟原始资料做过检查的 处理. 当档案容量的高位
序号数字增大时, 这个检查码储存在档案的容量的低位序号数字中 . 如果您在建立压缩影像档前把
您硬碟的序号归零, 则您可以使用这个数字来 追踪您影像档的更新次数.
<P>因为 <CODE>MrZip</CODE> 会使用直接磁碟存取, 建议您在执行前先把磁碟机快取区的资料回存. Windows 95 似乎是
对做一制性的管理直接磁碟存取□
<P><CODE>MrUnzip</CODE> 是一个在 DOS 下执行的程式,用来解压缩磁碟影像档到硬碟机中, 使用直接磁碟存取. 不要
跟任何具有快取功能的程式一起使用, 因为光是这个程式就已经快把 DOS 给折磨死了... 不管怎样,
如果您要恢复一个无法开机的机器那麽它会是将很有用的.
<P><CODE>BpUnzip</CODE> 是一个开机影像用来管理压缩硬碟的影像档. 粗略的来说, 它将由硬碟机的影像来开机并用
同样的名称, 副档名为 <CODE>.imz</CODE>.
<P>首先, 它会先读取分割区表并检查
<P>
<UL>
<LI>第一个 DOS 分割区, 磁碟影像档回存的地方 </LI>
<LI>分割区中最後一个磁柱, 以後将储存压缩硬碟影像. </LI>
</UL>
接著它会读取第一个未用到的磁柱的第一个磁区并检查是否已经有一个影像表. 如果不是这样, 或
者影像表内容有点矛盾, 或者两个 <SF>shift</SF> 键都被按下时 (一种特别的 <I>general-cleaning</I> 信号), 这个影像表
将会被清除.
<P>如果影像表还没有包含所需的影像, 它会透过 TFTP 通讯协定载入并加在影像表内. 如果在前面所载
入的影像之後, 没有足够的空间来存放旧的影像资料时, 则旧的影像档会被砍掉. 如果影像档已经存
在影像表中, 最新的开机影像磁区 (包含检查码) 将会透过 TFTP 通讯协定载入并且与目前得影像档
做比较. 如果它们不完全一致, 则压缩影像会再重新载入一次.
<P>这个影像接著会被解压缩, 所有的 magic numbers 都再确认, 并检查解压缩後的资料. 如果解压缩失
败, 或者检查结果与最新的开机磁区不吻合, 则影像档将会重新载入并修正一次. 否则, 程式会把控
制权交给开机磁区, 作业系统就会启动.
<P>如果 <CODE>bpunzip</CODE> 透过副档名 <CODE>.P</CODE> 载入 (如 <CODE>win95.P</CODE>), 则它会假设 TFTP 伺服器在 port 59 有加强型的介面 (在正
规的 port 69 之外所附加的). <CODE>BpUnzip</CODE> 将透过它以较大的封包格式载入影像档, 通常是以 1408 bytes 来
取代每个封包 512 bytes (这种转换使用大封包的技巧有点像TCP/IP Bootprom所使用的).
<P>同理, 如果 <CODE>bpunzip</CODE> 是透过副档名 <CODE>.G</CODE> 载入 (如 <CODE>win95.GP</CODE>), 则它将会先下载一个以同样主档名的 GIF 图档 (如
<CODE>win95.gif</CODE>) 并在开机时把它秀在营幕上. 这个程式只能在 800x600, 256 色的模式下工作 (即使 GIF 图档
可以更小或者使用更少的颜色). 如果您想要看看开机的流程记录, 则这个标题可以按 ESC 键移除.
如果您的显示卡不是 VESA 相容型, 则这个功能您不能使用. 另外,还要注意的是这个标记的执行完
成棒是使用调色盘的 最後十六色来显示. 如果不想使用这个功能, 或者希望修正它. 顺便一提, 如果
您不喜欢我们标记的执行完成棒, 您可以自由的改变它 (在 GIFDATA.ASM), 但请保留我们的名字
在可以看得到的地方.
<P>目地分割区不需要完全跟原始的大小相同 ; 它只要有足够的空间来存放分割区中,所有使用到的磁
柱. 如果目地分割区小於原始的分割区, 则 档案对硬表 FAT 将会因此而萎缩 (但磁柱大小则不变).
如果目地分割区大小大於原始分割区, 则 档案对应表 FAT 将会尽可能的扩大. 然而, 如果目地分割
区比原始分割区大更多, 可能 65518 个磁柱就不够覆盖所有的空间 (因为磁柱大小是无法改变的). 像
这种状况, <CODE>bpunzip</CODE> 将会产生警告,告诉使用者有一些空间流失掉了.
<P>预设值, <CODE>bpunzip</CODE> 是编译成支援 LBA (不超过 1024 个磁柱, 但可达 256 个磁头). 某些奇怪的 BIOS 及某
些奇怪的作业系统较喜欢另一种 <EM>NORMAL</EM> 模式 (可达 4096 个磁柱, 但不能超过 64 个磁头); 如果您
需要这种模式, 那麽把 LBA 的定义从原始程式里改成注解然後重新编译一遍.
<P>Assembler 语法的原始程式码在
<A HREF="soft/dos/src/mrzip.zip">这</A>.
<P>如果使用 Solaris 2.5 当 TFTP server. 在处理超过 16 Megabytes 时, 会有问题. 这是因为它无法处理超过
32768 packets per file 这是一个已知的臭□, 但直到目前 SUN 仍未提供修正. 我们建议您使用更有效
率的加强型
<A HREF="soft/solaris/in.tftpd">extended TFTP server</A> (它也支援其他作业系统, 就在 TCP/IP Bootprom 工具磁片中).
<P>
<H2><A NAME="ss4.5">4.5 NOBREAK</A>
</H2>
<P><CODE>Nobreak.sys</CODE> 相当小 (大概只有 350 bytes ) 的驱动程式, 它将加在您 <CODE>config.sys</CODE> 中的开始处. 它的目的是保
护开机程序, 直到使用者登入. DOS 为这提供一种设定 (名为 <CODE>BREAK=OFF</CODE>), 但它不够暴力, 并且在
<CODE>autoexec.bat</CODE> 没舍用. 我们的驱动程式工作原理是当中断要求产生时修改键盘的扫描码, 直接在 BIOS
层工作. 以这方法, 所有的程式在中断未致能前都收不道中断讯息.
<P>这个驱动程式必须放在 <CODE>config.sys</CODE> 档中(或者使用 <EM>Undocumented DOS</EM> 的 <CODE>devlod</CODE> 程式). 接著, 可以透过传
送 <CODE>Yes</CODE> 到 <CODE>NOBRK</CODE> 这个虚拟装置, 并且传送 <CODE>No</CODE> 而禁能 (事实上, 只需要第一个字元, <CODE>Y</CODE> 或 <CODE>N</CODE> 才是最重要
的).
<P>因为这个驱动程式依靠 BIOS, 所以它只能在 DOS 跟 Windows 3.1.下工作 Windows 95 则有它自己的
低阶键盘处理机制.
<P>Assembler 语法的原始程式码在
<A HREF="soft/dos/src/nobreak.zip">这</A>.
<P>
<HR>
<A HREF="Remote-Boot-5.html">Next</A>
<A HREF="Remote-Boot-3.html">Previous</A>
<A HREF="Remote-Boot.html#toc4">Contents</A>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -