Large Disk mini-HOWTO 大硬盘( 五 )



依预设, H=64, S=32.


aha1740, dtc, g_NCR5380, t128, wd7000:
H=64, S=32.


aha152x, pas16, ppa, qlogicfas, qlogicisp:
H=64, S=32 除非 C > 1024, 此情况下 H=255, S=63, C = min(1023, M/(H*S)). (故 C 被截断, 且 H*S*C 不是磁碟容量的近似值. 这将会混摇淆大部份版本的 fdisk.) ppa.c 程式码使用 M 1 取代 M 并认为这是因为在 sd.c 里的一只臭□使 M 的值少一.


advansys:
H=64, S=32 除非 C > 1024 而且还开启 BIOS 中的 `> 1 GB" 选项, 此情况下 H=255, S=63.


aha1542:
询问控制器使用两种可能的 schemes 中的那一种, 并且使用 H=255, S=63 或 H=64, S=32. 前者有个启动讯息 "aha1542.c: Using extended bios translation".


aic7xxx:
H=64, S=32 除非 C > 1024, 而且还给了 "extended" 启动参数, 或在 SEEPROM 或 BIOS 设了 `extended" 位元, 此情况下 H=255, S=63.


buslogic:
H=64, S=32 除非 C >= 1024, 而且还启动控制器的扩充转换, 此情况下若 M < 2^22 则 H=128, S=32; 否则 H=255, S=63. 然而, 选择 (C,H,S) 之後, 读入分割表, 若三种可能的 (H,S) = (64,32), (128,32), (255,63) 中 endH=H-1 的值看来可行则使用该对 (H,S) , 并印出启动讯息 "Adopting Geometry from Partition Table".


fdomain:
从 BIOS Drive Parameter Table 找出 geometry 资讯, 或从分割表读取并使用 H=endH 1, S=endS 给第一个分割区, 若非空, 或使用 H=64, S=32 for M < 2^21 (1 GB), H=128, S=63 for M < 63*2^17 (3.9 GB) and H=255, S=63 otherwise.


in2000:
使用 (H,S) = (64,32), (64,63), (128,63), (255,63) 中第一个让 C <= 1024 的. 此情况下, 在 1023 截掉 C .


seagate:
从磁碟读取 C,H,S. (真诚实!) 如果 C 或 S 太大, 放入 S=17, H=2 并倍增 H 直到 C <= 1024. 这表示 H 将为 0 如果 M > 128*1024*17 (1.1 GB). 这是只臭□.


ultrastor and u14_34f:
三种对应之一 ((H,S) = (16,63), (64,32), (64,63)) 根据控制器的对应模式而定.


如果驱动程式没有指定 geometry , 我们就回到使用分割表或磁碟总容量来推断猜测.
仔细看看分割表.因为依惯例分割区在磁簇边界结束, 我们可以为任何分割区定 end=(endC,endH,ednS) , 只要放入 H = endH 1 及 S = endS. (记得磁区由 1 起算.)更明确地的说.如果有个不是空的分割区, 则以最大的 beginC 计.对於此分割区, 看看 end 1, 计算加上 start 以及 length 并且假设此分割区在某磁簇边界结束.如果两个值都相符, 或 endC = 1023 且 start length 是 (endH 1)*endS 的倍数, 那麽假定此分割区真的是在磁簇边界, 并放入 H = endH 1 以及 S = endS.如果不对, 不是因为没有分割区, 就是因为它们的大小很奇怪, 那麽只看磁碟容量 M.演算法: 放入 H = M/(62*1024)(无条件进位),S = M/(1024*H)(无条件进位), C = M/(H*S)(无条件舍去).这能产生一 (C,H,S) 其中 C 最大 1024 而 S 最大 62.



--------------------------------------------------------------------------------

推荐阅读