下一页 上一页 目录

8. IDE 磁盘的内核磁盘转换

如果 Linux 内核检测到 IDE 磁盘上存在某些磁盘管理器,它将尝试以磁盘管理器执行的相同方式重新映射磁盘,以便 Linux 看到的磁盘分区与例如使用 OnTrack 或 EZ-Drive 的 DOS 相同。但是,如果在命令行中指定了几何结构,则不会进行重新映射 - 因此 `hd=cyls,heads,secs' 命令行选项很可能会破坏与磁盘管理器的兼容性。

如果您遇到这种情况,并且认识可以为您编译新内核的人,请找到文件 linux/drivers/block/ide.c 并在例程 ide_xlate_1024() 中删除测试 if (drive->forced_geom) { ...; return 0; }

重新映射是通过尝试 4、8、16、32、64、128、255 个磁头(保持 H*C 常数)来完成的,直到 C <= 1024 或 H = 255。

详细信息如下 - 子节标题是出现在相应启动消息中的字符串。本文档以及其他任何地方的分区类型均以十六进制给出。

8.1 EZD

EZ-Drive 的检测方法是第一个主分区类型为 55。几何结构如上所述重新映射,并且扇区 0 的分区表被丢弃 - 而是从扇区 1 读取分区表。磁盘块号未更改,但对扇区 0 的写入被重定向到扇区 1。可以通过在 ide.c 中使用 #define FAKE_FDISK_FOR_EZDRIVE 0 重新编译内核来更改此行为。

8.2 DM6:DDO

OnTrack DiskManager(在第一个磁盘上)的检测方法是第一个主分区类型为 54。几何结构如上所述重新映射,并且整个磁盘移动 63 个扇区(以便旧扇区 63 变为扇区 0)。之后,从新扇区 0 读取新的 MBR(带有分区表)。当然,这种移动是为了给 DDO 腾出空间 - 这就是为什么在其他磁盘上没有移动的原因。

8.3 DM6:AUX

OnTrack DiskManager(在其他磁盘上)的检测方法是第一个主分区类型为 51 或 53。几何结构如上所述重新映射。

8.4 DM6:MBR

较旧版本的 OnTrack DiskManager 不是通过分区类型检测,而是通过签名检测。(测试在 MBR 的字节 2 和 3 中找到的偏移量是否不大于 430,并且在此偏移量处找到的 short 等于 0x55AA,并且后跟一个奇数字节。)同样,几何结构如上所述重新映射。

8.5 PTBL

最后,有一个测试试图从主分区的 startend 值推断出转换:如果某个分区的起始和结束扇区号分别为 1 和 63,并且结束磁头为 31、63、127 或 254,那么,由于习惯上在柱面边界上结束分区,并且由于 IDE 接口最多使用 16 个磁头,因此推测 BIOS 转换处于活动状态,并且几何结构被重新映射为分别使用 32、64、128 或 255 个磁头。但是,当当前几何结构概念已经具有每磁道 63 个扇区且至少具有相同数量的磁头时,则不进行重新映射(因为这可能意味着已经进行了重新映射)。

8.6 移除磁盘管理器

当 Linux 检测到 OnTrack Disk Manager 时,它会将所有磁盘访问移动 63 个扇区。同样,当 Linux 检测到 EZ-Drive 时,它会将扇区 0 的所有访问移动到扇区 1。这意味着可能很难摆脱这些磁盘管理器。大多数磁盘管理器都有卸载选项,但如果您需要删除某些磁盘管理器,通常有效的方法是在命令行上给出显式磁盘几何结构。现在 Linux 跳过 ide_xlate_1024() 例程,并且可以使用磁盘管理器擦除分区表(并且可能失去对所有磁盘数据的访问),使用命令

        dd if=/dev/zero of=/dev/hdx bs=512 count=1
详细信息在一定程度上取决于内核版本。最近的内核(自 2.3.21 起)识别诸如 “hda=remap” 和 “hdb=noremap” 之类的启动参数,因此无论分区表的内容如何,都可以获得或避免 EZD 移动。“hdX=noremap” 启动参数还可以避免 OnTrack Disk Manager 移动。

8.7 自 2.5.70 起:启动参数

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

这也意味着摆脱磁盘管理器不再是一个问题。


下一页 上一页 目录