软件教程 之 磁碟分割区重划分软体说明系统篇 软件篇 技巧篇 Linux man篇

原始文件:FIPS.DOC
档案叙述:磁碟分割区重划分软体说明
文件编号:LRG.LDTP.004
翻译日期:1997/03/26
翻译维护:asdchen@ms1.hinet.net O
----------------------------------------------------X---
O
Fips

Welcome to FIPS
The First nondestructive Interactive Partition Splitting program

 Version 1.5
august 22, 1995

Copyright 1993-95 by Arno Schaefer


0. 使用 FIPS 你还需要些什么
1. 简介
2. FIPS 做些什么
3. 安全
4. 限制
5. 开始之前
6. 用于多工作业系统
7. 使用 FIPS
8. 切割分割区之后
9. 命令列选项
10. 错误排除
11. 版权声明

在 SPECIAL.DOC 档案中:

S1. 配合 Stacker/SuperStor/Doublespace 等使用。
S2. 配合 OS/2 使用
S3. 配合 Ontrack Disk Manager 以及类似的 drivers 使用

FIPS 是用来划分现有 DOS 分割区而不须删除其中资料的一套软体。

FIPS 是免费软体;你可以在自由软体基金会(Free Software Foundation)所公布的 GNU 通用公开授权(General Public License) 规范之下,无论是第二版的授权方式,或是(你选择)任何后继的版本,散播以及/或是修改这个软体。

FIPS 是希望它有用处而发行的,但是没有任何保证;甚至没有隐含行销或符合任何特定目的的保证。细节参阅 GNU 通用公开授权。

你会在 FIPS 里收到一份 GNU 的通用公开授权;参阅 COPYING 档。如果没有,写封信给自由软体基金会,675 Mass Ave, Cambridge, MA 02139, USA.

把困难以及所有问题寄到:schaefer@rbg.informatik.th-darmstadt.de


0. 使用 FIPS 你还需要些什么

你需要一套磁碟重组(defragmentation) 程式以便把所有的资料搬到硬碟前面去。 FIPS 只有在你的分割区末端还有足够空间的时候才会进行划分。DOS 6.0 及以后的版本包含 DEFRAG 程式,它适用于这个场合。其它适用的程式还有 Norton Speedisk(事实上 DEFRAG 本即 speedisk 的简化版,由 Norton 所授权),PCTools 的 Compress, Novell DOS 7 里的 DISKOPT, 或者是 ORG, DOS 或 SAFPAK 这些共享软体(可以藉由匿名档案传输服务从任何 SimTel 镜射节点里的 diskutil 目录取得)。无论如何,我并没有测试过这些软体,所以如果它们不能为你所用也不要怪我。

你也可能想在使用 FIPS 之前及过后使用像是 Norton Disk Doctor (或是 DOS 6.2 里的 scandisk)一类的程式来检查你的硬碟。FIPS 是在 DOS 5.0 下发展的。它应该能在 3.0 以上的任何版本下运作,也许甚至 2.0 。然而它在旧版 DOS 下将没有太大的用处,因为大容量的分割区只有从 DOS 4 开始才支援。

已经有回报表示它可以在 DOS 6.0 以及 DOS 6.2 和 Novell DOS 7 下运作。我也已经接到有关在 Windows95 分割区中成功使用的回报。注意,长档名对 FIPS 不是问题,因为它是在更低的层次,在目录结构根本没关系的地方运作。在这种情形下使用 FIPS 前从 DOS 磁片开机可能比较好(参阅 6.)


1. 简介

这支程式是从 Linux 计划中得到的启示。在原本用于 DOS/Windows 的 PC 上安装 Linux 的时候,许多人想要为他们的 DOS 软体保留一个较小的分割区。然而,因为大部分的硬碟上只有一个大分割区,通常你得做个完整的备份,删除分割区并且建立两个(或更多的)新分割区。然后你得把备份回存到其中的一个新分割区里去。现今系统的硬碟容量通常有 500MB 或更多,没有磁带机这类大容量媒体的话一旦磁碟机存有许多资料时,完整的备份实际上变得不可行。即使许多人只备份他们最有价值的资料(任何情况下我都高度建议的方法),重新安装所有软体的过程得费掉好几个钟头甚至许多天。

 FIPS 是为了改善这个问题而写的。你现在不必损失任何资料就可以划分一个分割区,只要旧分割区末端有足够的空间给新的用即可。


2. FIPS 做些什么

FIPS 借着修改分割表以及启动磁区的某些数值来缩减分割区的容量。它不会改变分割区的格式,尤其不会去更动磁簇(cluster) 及档案配置表(FAT) 的大小。因此缩减过的分割区它的 FAT 只会用到一部份,但这对 DOS 不构成问题。

从如此所获得的空间, FIPS 建立一个新的主要(primary) 分割区。

如果你想要在不同的作业系统下(e.g. Linux)使用这个新的分割区,那就使用它提供的 fdisk 程式来做任何必要的改变(参考作业系统的手册)。

如果你想要在 DOS/Windows 下使用这个新的分割区,你可以就这么使用(在格式化之后! ),但是要知道下面这件事:

根据官方资料,DOS 只能有一个主要分割区。所有的 DOS 版本(至少从 v5.0 以后)都能愉快地配合多个主要分割区使用,但这是一个‘未公开的特性’。如果你想遵从官方的规则,可以用 fdisk 删除这个新的分割区并且在该空间上建立一个扩充分割区。

有些理由值得拥有多个主要分割区,其中之一是可以藉由使用 fdisk 改变主动(active)分割区以便从不同分割区启动的可能性。

多个主要分割区已知的问题是:

- 如果你不小心用 fdisk 删除了一个主要分割区的话,你没有办法轻易地重建它,因为 fdisk 将会拒绝这么做。也许世界上还有其它的 fdisk 程式,如果所有其它程式都不行那么你可以用 Linux 的启动磁片启动并执行 Linux 的 fdisk 程式,但这总归是件很麻烦的事。

- 有些现存的软体是在分割表上作业而且可能被多个主要分割区所困惑。其中之一是 Peter Gutmann 的 SFS(Secure file system)。
我想 Peter 已经对他的程式做了些修改以便能接受某些不寻常的配置,但是可能还存在其它会出问题的软体。


3. 安全

FIPS 为提供最大限度的安全性而特别设计。起动时它检查分割表,启动磁区以及档案配置表是否有任何不一致。如果它发现任何可疑之处就会告诉你。如果其中存在错误, FIPS 将不会执行。进行之前它能够让你先把你的根磁区以及启动磁区备份到软碟上。如果发生某些错误,你可以用 `restorrb.exe' 程式(参阅第 5节)来回存它们。
我强烈建议使用这个功能。它也使你能够在事后逆转分割区的划分,所以把根/启动磁区存放在一个安全的地方会是个好主意。

FIPS 检查分割区的剩余空间并且将会以此为依据让你选择新的起始磁柱(cylinder)。在计算新的分割表以及启动磁区之后, FIPS 将会再次检查每件事,所以或许能侦测出计算过程的失误。只有在每件事都确认后, FIPS 才会要求允许写入新的根磁区以及启动磁区。


4. 限制

FIPS 将只能在使用 13h 中断进行硬碟低阶存取的 BIOS 上运作。这几乎在全部的 PCs 上都成立。我曾经接到一个回报表示一型旧的 Adaptec SCSI controller 有套在更高阶层运作的驱动程式。这种情况下你只能希望从 Adaptec 取得新的驱动程式。这对于大部分较新的 Adaptecs 不再是个问题(我个人使用一块)。

FIPS 将只能在磁区为 512 bytes 的磁碟机上运作。DOS 似乎已经准备好要处理不同的磁区大小,但是到目前为止我还没看到。

FIPS 将不会划分 12 bit 档案配置表的分割区(你不会想要划分小于 10 MB 的分割区吧,会吗? )。

FIPS 将只能划分 DOS 分割区。分割表以及启动磁区必须符合 DOS 3.0 以上的规则。这是藉由分割表里的系统指示位元所标示,它的值必须是 4(16 bit sector number)或是 6(32 bit sector number)。它尤其不会去划分 Linux 分割区。

FIPS 目前不能在 DOS 扩充分割区上运作。这方面的支援已经计划了好久,但是我不知道它何时能出来。

FIPS 在你已经有四个分割区时将不会运作,因为它需要一个剩余的分割区进入点。

FIPS 将不会把原始分割区缩减到小于 4085 磁簇,因为这意谓着把 16 bit 档案配置表改写为 12 bit 的档案配置表。


5. 开始之前

在你要划分的分割区上执行 CHKDSK 或(在 DOS 6.2 下)SCANDISK。如果你有 Norton Disk Doctor 或类似的东西,你也可以使用它们。确定磁碟机上没有留下‘死掉的’磁簇。在磁碟机 A: 里准备一张可以启动的磁片。在 DOS 下这通常可以藉由下达 `sys a:' 或者是 `format a:/s' 指令来完成。在 Windows NT 或是 OS/2 下也许不太一样,如果你不确定就查阅手册或从一台 DOS PC 的启动磁片启动。

把 FIPS 的 RESTORRB.EXE,FIPS.EXE 以及 ERRORS.TXT 拷贝到这张磁片上。

试着从这张准备好的磁片开机。如果你无法从软碟开机或是启动之后无法存取你的硬碟(藉由下达 `dir c:' 指令,你应该看得到硬碟的根目录)请参阅你的手册或询问附近的高手。如果所有其它尝试都失败的话,试着从硬碟正常启动后执行 FIPS (更危险一点,但有时是最后的手段)。

当你启动 FIPS 的时候(稍等! ),你将有机会把根磁区及启动磁区的备份写到 A: 磁碟机一个称为 ROOTBOOT.00x (其中的 x 代表一个范围从 0 到 9 的数字)的档案里。如果在使用 FIPS 时发生任何错误,你可以从软碟开机并执行 RESTORRB 来回存原先的配置。请注意:如果你不只一次地使用 FIPS 的话(这一般是不必要的,但是可能发生),会把一个以上的 ROOTBOOT 档案写到软碟上。RESTORRB 让你选择要回存哪个配置档。 RESTORRB.000 这个档案包含你原先的配置。试着别混淆版本。

如果稍后想复原分割区的划分将会需要这个备份档(ROOTBOOT.00x)。

但是在启动 FIPS 前你_必须_现在重组你的硬碟。所有将用于新分割区的空间必须是空白的。须留意大部分的重组程式不会移动 Windows 的置换档。你必须反安装它(在控制台的 386 增强模式里)并且在使用 FIPS 之后重新安装。如果你有使用 IMAGE 或是 MIRROR 的话,硬碟最后面的磁区会有个隐藏档含有指向你的 mirror 档案之指标。使用 FIPS 之前你_必须_删除这个档案(下次你执行 mirror 的时候会重建它)。在根目录下执行 `attrib -r -s -h image.idx' 或 `attrib -r -s -h mirorsav.fil',然后删除该档。如果 FIPS 无法提供你希望的磁碟空间来建立新的分割区,这可能表示

a. 在余留的分割区上仍然有太多的资料。考虑建立比较小的新分割区或是删除某些资料。

b. 新分割区的空间里留有重组程式没有搬移的隐藏档。你可以藉由输入 `dir /a:h /s' 这个指令(以及 `dir /a:s /s' 这个用于系统档案的指令)找出磁碟机里的隐藏档。确认该档案的归属。如果档案是某些程式(e.g. NDOS) 的置换档那么它可能可以安全地删除之(并且会在稍后有需要时自动重建)。细节参阅你的手册。

如果该档案属于某种拷贝保护的话,你必须反安装其所属的程式并且在重新划分分割区之后再次安装它。

对此我无法给你更多帮助 - 如果你真的不知道该怎么做,直接跟我联络。

注意! _不要_试图搬移 DOS 的系统隐藏档(ibmbios.com&ibmdos or something similar)。结果可能是不再能够启动的硬碟。因为这些档案已经在分割区最前面的磁区里,没有必要去搬移它们。在 DOS 5.0 及后继的版本中,系统档案至少有一个_可以_搬移,但不要去动它们永远是个好主意。

当你执行过 FIPS 之后必须重新启动,所以要确定取消 config.sys 以及 autoexec.bat 里任何会写入磁碟的程式,尤其是 mirror 以及 image 。考虑暂时改掉这些档案的名称。

使用 FIPS 之后要留心 DOS 分割区在分割表中的位置可能会改变。如果你在 DOS 下使用这个新分割区_而且_你有个扩充分割区以及/或是两个磁碟机,这表示分割区的名称可能会改变(例如从 D: 变成 E:)。我已经小心地让 C: 永远保持为 C: ,所以你仍将能启动。

同理,如果你有光碟机,在大部分的情况下它也将改变其磁碟机代号。如果你在 autoexec.bat 档里使用 /L 这个选项呼叫 MSCDEX 明确指定磁碟机代号的话,你可能必须视情况来改变它。如果你并没有使用 /L 选项, MSCDEX 将会自动选择第一个尚未使用的代号,所以你不必改变任何设定。

适当的磁碟机代号: DOS 使用下列的顺序来指派它们:
1. 每个磁碟上的第一个主要分割区
2. 在所有磁碟之扩充分割区里的逻辑磁碟
3. 在所有磁碟上剩余的主要分割区

范例:

C: 第一颗硬碟上的第一个主要分割区
D: 第二颗硬碟上的第一个主要分割区
E: 第一颗硬碟上之扩充分割区的第一个逻辑碟
F: 第一颗硬碟上之扩充分割区的第二个逻辑碟
G: 第二颗硬碟上之扩充分割区的第一个逻辑碟
H: 第二颗硬碟上的第二个主要分割区
I: 光碟机

我不知道任何可以简单地改变这个模式的方法。特别是你不能够任意地指定一个磁碟机代号。无论如何你可以藉由把主要分割区改成扩充分割区来影响这个顺序。

给 Linux 的使用者:
DOS 分割区在分割表中的位置会改变的可能性也表示在 Linux 下的 DOS 分割区其设备号码有可能会改变(例如 /dev/hda3 可能会变成 /dev/hda1) 。任何现存的 Linux 分割区将不会改变,所以你不会有启动上的问题。如果你有在开机时挂上你的 DOS 分割区,那么你也只需编辑你的 /etc/fstab 档案。


6. 用于多工作业系统

你不应该在像是 OS/2, Desqview, Windows, Novell Task Manager 或是 Linux DOS Emulator 一类的多工作业环境下使用 FIPS 。这些系统可能在 FIPS 已经改变硬碟的结构之后仍然对磁碟写入,这可能导致磁碟的损毁。虽然不一定会这样,我想无论如何在大部分的情况下都仍然可用。但是因为安全是我对 FIPS 的首要考量,我得建议从 DOS 启动磁片开机然后执行 FIPS ,这应该是安全的。

在 1.0 版中我加入一些 Dave McCaldon 的程式码来侦测 Windows 及 Desqview (谢啦 Dave! )。 OS/2 以及 Novell Task Manager 还无法侦测到。我必须移除侦测 Linux DOS emulator 的程式码因为它会使许多机器当掉。


7. 使用 FIPS

如果你已经准备好一张如第五节所描述的启动磁片,现在用它开机。

重要! 要确定没有执行像是 Smartdrive 一类的磁碟快取程式。已经有回报表示在某些案例中 FIPS 所作的改变只有一部份被写入磁碟,这稍后可能造成硬碟的毁损。我想这可能是使用 Smartdrive 所引起的,它预设的配置会延迟磁碟的写入几秒钟。如果你太快重新启动,某些改变可能会漏失。

在 DOS 提示符号下键入 FIPS 跟着按 <ENTER> 来起动 FIPS 。你可以在任何时候按下 <CTRL-C> 跳出这个程式。

首先 FIPS 将会尝试侦测是在何种作业系统下执行。如果是 Windows 或 Desqview 的话,它会抱怨一番并且告诉你从磁片开机。无论如何你可以继续进行,但是你要自己承担这个风险(参阅第八节)。

然后 FIPS 将会侦测你的硬碟,如果你有一个以上的话,它将会问你要对哪一个做处理。在前几版中, FIPS 在某些 BIOSes 下(尤其是 Gateway 的 Pentium 机器)不能正确地侦测出硬碟的数目。我希望这个问题已经获得修正。如果 FIPS 不能侦测出正确的硬碟数目,请告诉我。在过渡期间你可以使用 `-n' 选项手动选择磁碟(参阅下面的章节)。

接着 FIPS 读取硬碟的根磁区并显示分割表。

范例:

| | Start | | End | Start |Number of|
Part.|bootable|Head Cyl. Sector|System|Head Cyl. Sector| Sector |Sectors | MB
-----+--------+----------------+------+----------------+--------+---------+----
1 | yes | 0 148 1| 83h| 15 295 63| 149184| 149184| 72
2 | no | 1 0 1| 06h| 15 139 63| 63| 141057| 68
3 | no | 0 140 1| 06h| 15 147 63| 141120| 8064| 3
4 | no | 0 0 0| 00h| 0 0 0| 0| 0| 0

如果你不知道这要怎么动手,不必太担心。你可以从 Megabytes 的数量指认你的分割区。

然后检查根磁区是否有误。

如果该磁碟有一个以上的分割区,那么将会询问你要划分哪一个。

读取所选之分割区的启动磁区并显示一些讯息。

范例:

Bytes per sector: 512
Sectors per cluster: 8
Reserved sectors: 1
Number of FATs: 2
Number of rootdirectory entries: 512
Number of sectors (short): 0
Media descriptor byte: f8h
Sectors per FAT: 145
Sectors per track: 63
Drive heads: 16
Hidden sectors: 63
Number of sectors (long): 141057
Physical drive number: 80h
Signature: 29h

FIPS 检查这些资讯是否与分割表相符并且尝试侦测其它的错误。

然后它检验两份 FAT 是否完全一致,如果不是, FIPS 将会显示错误讯息并跳出。

如果每件事都检查通过,现在 FIPS 会寻找分割区末端的剩余空间。新的分割区至少必须有一个磁柱,所以如果最后一个磁柱并非空白,你没有机会划分这个分割区: FIPS 将会显示错误讯息并跳出。也许是你忘记移走某个 mirror 或 image 档案(参阅上述)。

你现在必需输入新分割区应该从哪个磁柱开始。使用左/右方向键来递增或递减磁柱的计数。剩下的分割区以及新分割区的大小会在程序中显示,所以选择正确的磁柱不会造成你的问题。你可以使用上/下方向键一次递增十个磁柱。准备好后,按下 Enter 继续。

FIPS 将会再次检查新分割区所需要的空间是否为空白 - 这是额外的安全诊测而且应该不会显示任何错误,因为所需的空间在之前已经决定。

在此之后, FIPS 将会计算根磁区的改变,检查这些改变并显示新的分割表。你现在可以选择重新编辑分割表(这会把你带回选择分割区的地方)或是继续。如果你键入 `c' ,则 FIPS 将会计算改变过的启动磁区,再检查一次并提示你是否要进行。如果你键入 `y' 那么, FIPS 将会把这些改变写入磁碟并结束。


8. 切割分割区之后

确定这些改变已经被写入磁碟。如果你使用类似 Smartdrive 的某种磁碟快取程式(不顾我之前明确地说明不要使用它们的建议:-),等个几秒钟以便快取程式更新磁碟。

在你重新启动之后新的分割区将会被 DOS 承认。重新启动之前不要写入任何东西到磁碟机里去。在重新启动之后,使用 CHKDSK 或者是 Norton Disk Doctor 确定你旧的(现在比较小)分割区没有问题。

曾经有这样的案例, FIPS 所作的改变没有正确地写入。为了确定你不是这种情况,重新启动后以 -t (test mode) 选项再次执行 FIPS。选择你划分的磁碟机与分割区。如果 FIPS 没有显示错误一直到选择磁柱的对话,这就没有问题而且你可以 CTRL-C 停止这个程式。否则你应该使用 `restorrb' 回复这些改变并藉由电子邮件与我联络。

如果你没有发现任何错误,那么现在可以使用正常的 config.sys 以及 autoexec.bat 重新启动。执行一些程式并确定你仍然可以读取你的资料。

如果你想在 DOS 下使用你的新分割区,你必须先格式化。如果你有多个分割区,要确定 format 正确的那一个,磁碟机的名称可能已经改变!

如果你想在 Linux 下使用这个分割区,你现在可以使用 Linux 的 fdisk 来改变系统指示位元,然后使用 MKFS 。

如果你想把新分割区再次划分成两个比较小的,首先必须在 DOS 下先格式化,否则 FIPS 会抱怨。


9. 命令列选项

这是 FIPS 命令列选项的解释。如果你喜欢 DOS 形式,你可以使用 `/' 代替 `-' 作为选项字元。选项可以任意组合。键入 `FIPS -help' 以取得一份选项列表。这里的是更为详尽的解释:

-t or -test : 测试模式(不写入磁碟)

这不需要太多解释。

-d or -debug : 侦错模式

在此模式中,你整个过程的副本以及一些额外的资讯会被写入一个在现行目录里的 FIPSINFO.DBG 档案。发生问题的情况下(参见下述)你可以把这个档案寄给我。

-h or -help or -? : 辅助页

一份简短的选项摘要

-n<num> : 选择磁碟机 <num>

以此选项预选磁碟机。合法的数值从 128 到 255 。这也可以用来盖过磁碟机自动侦测 - 如果因为任何原因磁碟机没被 FIPS 找到,你可以试试这个选项。


10. 错误排除

FIPS 仍然还带有实验性质,虽然已经有许多人成功地使用它而没有遇到严重的问题。当有所怀疑时我经常决定保持安全状态而且当遇到可疑的配置时显示错误讯息。某些比较小的错误可能被忽略。

请务必小心仔细地阅读这份文件及涵盖许多常见问答的 FIPS.FAQ 档案。

如果你无法自己解决某个问题,或者是有某种 FIPS 不支援的配置,或是怀疑 FIPS 有某只虫,使用 -d 选项制作一份你整个过程的副本并且把整个 FIPSINFO.DBG 档案以及简短的注释寄到 schaefer@rbg.informatik.th-darmstadt.de 。也许你的问题早已被解决。


11. 版权声明

FIPS 是以 Drew Eckhardt 在 Linux digest132 里所描述的程序为基础。大部分我所知道有关硬碟结构的知识是来自 Claus Brod 以及 Anton Stepper 所写很棒的 `Scheibenkleister' 这本德文书。这是一本 Atari ST 的书但是大部分内容也适用于 PCs 。关于硬碟中断的资讯是从 Ralf Brown 的 Interrupt List 抽出来的。一些有用的资讯要感谢 Hamish Coleman 以及 Paul Smith 的一些好建议。 Gunnar Hilmarsson 建议 stacked drives 程序, Miguel Alvared 帮我改进分割区顺序。Chetan Patil, Rand Phares 以及 Eric Jung 指出我在程式以及文件中的错误。Stefan Andersen 提供有关 OS/2 的重要资讯。Keith Crews 建议附加一些启动磁片以及 DOS 6.x 新特色到文件里。Dave McCaldon 撰写侦测 FIPS 在何种 OS 下执行的程式码。Scott Ellentuch 以及 Billy Patton 提供关于 OnTrack Disk Manager 的资讯。在 EIDE 的驱动以及定址上非常有价值的资讯是 Patrick LoPresti 所写的 Linux EIDE-Mini-HOWTO。感谢所有其他寄给我回应与建议的人。没有这些我所接到无法数计的电子邮件 FIPS 不会是现在这个样子。

附:用FIPS为Linux分区

Copyright © 1999 《Best Linux》. All rights reserved. Revised: 99-11-28.