Gemini 解答
在 2000 年代中后期的中文 DOS 与多系统启动环境下,使用 GRUB4DOS 引导集成多种工具的软盘镜像(IMG/IMA)是主流技术方案。该帖中提到的“用 Excel 计算 GRUB 能识别的软盘格式”,其核心技术背景在于软盘几何参数(Geometry)的自动识别机制与 FAT12 文件系统的结构限制。
1. 技术背景:软盘几何参数与 BIOS 中断
在传统的 PC 架构中,操作系统通过 BIOS 中断(INT 13h)访问磁盘。软盘的寻址依赖于磁柱(Cylinder)、磁头(Head)和扇区(Sector)三个参数。
- 标准格式:如 1.44MB(80/2/18)和 2.88MB(80/2/36)。
- 非标格式:为了容纳更多工具(如 MaxDOS 或系统维护工具),技术人员常制作超大容量镜像(如 4MB、8MB 甚至更高)。
2. GRUB4DOS 的镜像映射逻辑
当使用 GRUB4DOS 的
map --mem命令加载软盘镜像时,GRUB 需要为该镜像模拟一个虚拟的 BIOS 设备(通常是(fd0))。
- 自动识别依赖:如果镜像文件的大小不符合预定义的标准尺寸,GRUB 会根据文件总字节数反推 C/H/S 参数。
- 计算公式:
总扇区数 = 磁柱数 × 磁头数 × 每磁道扇区数。- 误判后果:如果镜像的总大小无法被预设的扇区数(通常是 18 或 36)整除,或者反推出的参数与 DOS 启动文件(IO.SYS)及 FAT 分区表中的 BPB(BIOS Parameter Block)信息不一致,就会导致“Disk Error”、“Invalid system disk”或读取文件偏移错误。
3. Excel 工具解决的核心问题
该帖子提供的 Excel 计算工具,实际上是用于反向工程计算出**“合法”的非标镜像大小**。
- 对齐参数:确保 WinImage 在制作“Custom size”镜像时,输入的扇区总数能够精确对应一个逻辑上的 C/H/S 组合。
- 兼容性保障:通过预先计算,确保生成的镜像在被 GRUB 加载后,模拟出的几何结构能被 DOS 内核正确识别。例如,若要制作一个约 4MB 的镜像,必须保证其扇区数能被 2(磁头)和 18 或 36(扇区)整除,从而得到一个整数的磁柱数。
4. 关于 MaxDOS 启动失败的补充解释
跟帖中提到的 MaxDOS 无法启动,通常是因为其使用的镜像超出了 2.88MB 的标准软盘限制。
- BPB 冲突:当镜像大小不规范时,GRUB 模拟出的
(fd0)几何参数与镜像内部 FAT 表记录的物理参数不匹配。- INT 13h 限制:DOS 的 IO.SYS 在启动初期高度依赖 BIOS 报告的扇区数。如果 Excel 计算不准确或 WinImage 没按计算结果设置,IO.SYS 将无法在内存中正确定位数据区,导致启动中断。
5. 现代替代与演进
随着技术发展,此类“几何参数对齐”的需求在后期逐渐被以下方案取代:
- 硬盘镜像模拟:对于大于 2.88MB 的需求,后期倾向于将镜像制作成硬盘格式(带分区表,map 为
(hd0)),因为硬盘模式对几何参数的敏感度低于软盘模式。- --chs 参数强制指定:在 GRUB4DOS 命令中直接使用
--chs-sectors=...手动定义参数,而不依赖镜像大小自动计算。该工具在 2008 年前后是解决“非标超大软盘镜像”启动问题的关键辅助手段,解决了当时 WinImage 自定义尺寸与 GRUB 自动识别算法之间的适配问题。
