不幸的是, BIOS INT13 呼叫使用三个位元组的 CHS 编码, 10 个位元作为磁簇号码, 8 个位元作为磁头号码, 及 6 个位元作为磁轨上的磁区号码.可能的磁簇号码是 0-1023, 可能的磁头号码是 0-255, 而磁轨上可能的磁区号码为 1-63(是的, 磁轨上的磁区是由 1 起算, 不是 0).以这 24 位元最多可以定址 8455716864 个位元组(7.875 GB), 这是 1983 年磁碟机的两百倍.
更不幸的是, 标准的 IDE 介面容许 256 个磁区/磁轨, 65536 个磁簇以及 16 个磁头.它自己本身可以存取 2^37 = 137438953472 个位元组(128 GB), 但是加上 BIOS 方面 63 个磁区与 1024 个磁簇的限制後只剩 528482304 个位元组(504 MB)可以定址的到.
这不足以应付现今的磁碟, 人们使用各种硬体或软体上的方法来克服.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
4. 转换与磁碟管理程式
没有人对磁碟的"真实" geometry 有兴趣.磁轨的磁区数通常是变动的 - 接近磁碟外围的磁轨有比较多的磁区 - 所以没有"真实"的每磁轨磁区数.对於使用者而言最好是把磁碟当作编号 0,1,..., 的磁区组合成的线性阵列, 让控制器去找出磁区究竟位於磁碟的那里.
此线性编号一般通称为 LBA.对於 geometry 为 (C,H,S) 的磁碟而言属(c,h,s) 的线性位址为 c*H*S h*S (s-1).所有 SCSI 控制器都使用 LBA, 某些 IDE 控制器也是.
如果 BIOS 把这 24 个位元(c,h,s) 转换成 LBA 并□给懂得 LBA 的控制器, 那麽又可以定址到 7.875 GB .并不足以应付所有的磁碟, 但仍然是个改进.注意此处 BIOS 使用的 CHS, 它不再与"实体"有任何关系.
当控制器不懂何为 LBA 但是 BIOS 知道如何转换时有些类似的方法可行.(在 BIOS 设定中通常称为 "Large".)现在 BIOS 将呈现 geometry 为(C",H",S")给作业系统, 而在与磁碟控制器沟通时则使用(C,H,S).通常 S=S", C"=C/N 而 H"=H*N, 其中 N 是确保 C"<=1024 之 2 的最小次方(所以 C"=C/N 时舍去的数浪费少许容量).再一次, 这允许存取最多达 7.875 GB.
如果 BIOS 不知道 "Large" 或是 "LBA", 那麽还是有软体的解决方案.像是 OnTracker 或 EZ-Drive 这些个磁碟管理程式会以它们自己的函式(routines)替换掉 BIOS 的.通常这是藉由将磁碟管理程式放在 MBR 及其後几个磁区(OnTrack 称这些程式码为 DDO: Dynamic Drive Overlay )来达成的, 所以它会在任何其它作业系统之前被启动.这也就是为什麽在安装磁碟管理程式後从软碟启动可能会出问题.
这影响可能多於或少於 BIOS 转换 - 但特别是在相同的磁碟上跑数种不同的作业系统时, 磁碟管理程式可能引起许多问题.
Linux 从 1.3.14 版开始支援 OnTrack 磁碟管理程式, 从 1.3.29 开始支援 EZ-Drive .下面有些更进一步的资讯.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
5. 核心的 IDE 磁碟转换
如果 Linux 侦测到 IDE 磁碟上有某些磁碟管理程式存在, 它将会试著使用与该磁碟管理程式相同的方式来重新对应磁碟, 所以 Linux 看到与, 例如 DOS 配合 OnTrack 或是 EZ-Drive 相同的磁碟分割.然而, 当你在指令列上指定 geometry 时, 就不会做任何的重新对应 - 所以一行 `hd=cyls,heads,secs" 指令列选项可能取消掉与磁碟管理程式的相容.
推荐阅读
- Linux Quota mini-HOWTO 磁盘空间限制
- ISP-Connectivity-mini-HOWTO
- faxsrv-mini-HOWTO 传真机服务器
- 使用电池供电的 Linux Mini-HOWTO
- Automount mini-Howto 文件系统自动挂载程序
- FreeBSD如何跑diskless
- 制作U盘启动的RAMDISK为根目录的FREEBSD完全版
- FreeBSD如何跑diskless?
- Sun Solaris 不同规格的硬盘用Disksuite做镜像的实现
- DiskSuite做raid 0的一些note
