下一页 上一页 目录

7. 转换和磁盘管理器

磁盘几何结构(包括磁头、柱面和磁道)是 MFM 和 RLL 时代的产物。在那个时代,它对应着物理现实。如今,使用 IDE 或 SCSI,没有人对磁盘的“真实”几何结构感兴趣。实际上,每磁道扇区数是可变的——靠近磁盘外缘的磁道扇区数更多——因此不存在“真实”的每磁道扇区数。恰恰相反:IDE 命令 INITIALIZE DRIVE PARAMETERS (91h) 用于告诉磁盘今天应该有多少磁头和每磁道扇区数。看到一个拥有 2 个磁头的大型现代磁盘向 BIOS 报告 15 或 16 个磁头,而 BIOS 又可能向用户软件报告 255 个磁头,这是很正常的。

对于用户来说,最好将磁盘视为一个扇区的线性数组,编号为 0, 1, ...,并让固件找出给定扇区在磁盘上的位置。这种线性编号称为 LBA。

所以现在的概念图景如下。DOS 或某些引导加载程序使用 (c,h,s) 符号与 BIOS 通信。BIOS 使用用户正在使用的虚假几何结构将 (c,h,s) 转换为 LBA 符号。如果磁盘接受 LBA,则此值用于磁盘 I/O。否则,它会使用磁盘当前使用的几何结构转换回 (c',h',s'),并用于磁盘 I/O。

请注意,在“LBA”一词的使用中存在一些混淆:作为描述磁盘功能的术语,它表示“线性块寻址”(与 CHS 寻址相对)。作为 BIOS 设置中的术语,它描述了一种有时称为“辅助 LBA”的转换方案——请参见上面“8.4 GB 限制”下的内容。

当固件不支持 LBA 但 BIOS 知道转换时,也会发生类似的情况。(在设置中,这通常表示为“Large”。)现在,BIOS 将向操作系统呈现几何结构 (C,H,S),并在与磁盘控制器通信时使用 (C',H',S')。通常 S = S',C = C'/N 和 H = H'*N,其中 N 是确保 C' <= 1024 的最小 2 的幂(这样通过 C' = C/N 中的向下舍入浪费的容量最少)。同样,这允许访问高达 8.4 GB (7.8 GiB) 的容量。

(第三个设置选项通常是“Normal”,其中不涉及转换。)

如果 BIOS 不知道“Large”或“LBA”,则有一些软件解决方案。像 OnTrack 或 EZ-Drive 这样的磁盘管理器用它们自己的程序替换 BIOS 磁盘处理例程。通常,这是通过将磁盘管理器代码放在 MBR 和后续扇区(OnTrack 将此代码称为 DDO:动态驱动器覆盖)中来实现的,以便在任何其他操作系统之前启动它。这就是为什么当安装了磁盘管理器时,从软盘启动可能会遇到问题的原因。

效果与使用转换 BIOS 大致相同——但是,尤其是在同一磁盘上运行多个不同的操作系统时,磁盘管理器可能会引起很多麻烦。

Linux 从 1.3.14 版本开始支持 OnTrack Disk Manager,从 1.3.29 版本开始支持 EZ-Drive。更多详细信息将在下一节中给出。

在 2.5.70 版本中,自动磁盘管理器支持被移除。取而代之的是,添加了两个启动选项:“hda=remap”用于执行 EZ-Drive 将扇区 0 重新映射到扇区 1,以及“hda=remap63”用于执行 OnTrack Disk Manager 偏移 63 个扇区。


下一页 上一页 目录