这个词好像很多人都没弄明白,包括我,放假没事,整理整理吧。
一:geometry应该翻译为几何数据,其实就是指的CHS(Cylinder、Head、Sector/Track)
。C-Cylinder柱面数表示硬盘每面盘片上有几条磁道,编号从0开始,最大为1023,表示有1024个磁道(用10个二进制位存储);H-
Head磁头数表示硬盘总共有几个磁头,也就是几面盘片,编号从0开始,最大为255,表示有256个磁头(用8个二进制位存储);S-
Sector/Track扇区数表示每条磁道上有几个扇区,编号从1开始,最大为63,表示63个扇区(用6个二进制位存储),每个扇区512字节,它是
硬盘的最小存储单位。我们可以算一下:1024个柱面×63个扇区×256个磁头×512byte=8455716864byte。即通常的8.4GB
(实际上应该是7.8GB左右)限制。实际上磁头数通常只用到255个(由汇编语言的寻址寄存器决定),即使把这3个字节按线性寻址,依然力不从心。当然
现在的硬盘早就超过8.4GB了。
二:除了CHS,我们还需要了解block,因为现在的硬盘早就不以CHS来设定了。不论我们的操作系统用的是哪一种 filesystem
,数据总是需要储存的吧!既然硬盘是用来储存数据的,想当然尔, 数据就必须写入硬盘啦!我们知道硬盘的最小储存单位是 sector
,不过数据所储存的最小单位并不是 sector 喔,因为用 sector 来储存太没有效率了。怎么说呢?因为一个 sector 只有 512
Bytes ,而磁头是一个一个 sector 的读取,也就是说,如果我的档案有 10 MBytes ,那么为了读这个档案,
我的磁头必须要进行读取 (I/O) 20480 次!
为了克服这个效率上的困扰,所以就有逻辑区块( Block )的产生了! 逻辑区块是在 partition 进行 filesystem
的格式化时, 所指定的『最小储存单位』,这个最小储存单位当然是架构在 sector 的大小上面( 因为 sector
为硬盘的最小物理储存单位啊! ),所以啦, Block 的大小为 sector 的 2 的次方倍数。此时,磁头一次可以读取一个 block
,如果假设我们在格式化的时候,指定 Block 为 4 KBytes ( 亦即由连续的八个 sector 所构成一个 block
),那么同样一个 10 MBytes 的档案, 磁头要读取的次数则大幅降为 2560 次,这个时候可就大大的增加档案的读取效能啦!
不过,Block 单位的规划并不是越大越好!怎么说呢?因为一个 Block 最多仅能容纳一个档案 !这有什么问题呢?举例来说好了,假如您的
Block 规划为 4 KBytes ,而您有一个档案大小为 0.1 KBytes ,这个小档案将占用掉一个 Block 的空间,也就是说,该
Block 虽然可以容纳 4 Kbytes 的容量,然而由于档案只占用了 0.1 Kbytes ,所以,实际上剩下的 3.9 KBytes
是不能再被使用了,所以,在考虑 Block 的规划时,需要同时考虑到:
档案读取的效能
档案大小可能造成的硬盘空间浪费
因此,在规划您的磁盘时,需要留意到您主机的用途来进行规划较佳!例如 BBS 主机由于文章较短, 也就是说档案较小,那么 Block 小一点的好;而如果您的主机主要用在储存大容量的档案, 那么考虑到效能,当然 Block 理论上,规划的大一点会比较妥当啦!
三:SCSI 硬盘上的 physical geometry 跟 FreeBSD 上的 disk blocks 是完全无关的。事实上,
就硬盘上扇区密度的变化而言,并没有所谓『physical geometry』这种东西。 硬盘制造商所说的『physical
geometry』通常是指: 硬盘上所使用最小空间来存放数据的设定参数(geometry)。 以 IDE 硬盘而言,FreeBSD
用以存取硬盘设定的方式是 C/H/S , 然而,目前市面上的硬盘早就在内部运作时,就自动转换为 block 方式 了。
真正关键的地方,其实是在于 『logical geometry』─ 这是 BIOS 侦测硬盘时所得到的设定,并且用来决定硬盘存取方式。 由于
FreeBSD 是采用 BIOS 的侦测设定值,所以如何来让 BIOS 侦测到的设定值保持正确,
是十分重要。尤其是同一颗硬盘上有多个操作系统的情况, 它们都必须采用一致的硬盘设定参数(geometry),
否则就会有开机进不去操作系统的严重问题了。
以 SCSI 硬盘而言,硬盘设定参数(geometry)是由 SCSI 卡上的 extended translation(通常指的是有标示
“support >1GB”(支持 1GB 以上容量,或类似名词) 支持与否来作决定。 如果不支持,那就会采用 N cylinders、
64 heads、 32 sectors/track 作为硬盘设定参数(geometry),这里讲的『N』
是指硬盘的容量(单位:MB)。举个例子来说,一颗 2GB 硬盘应该是 2048 cylinders、64 heads、32
sectors/track。
如果该 SCSI 有支持使用 extended translation 的话, (通常这个方式在 MS-DOS
使用上有某些限制),并且硬盘容量大于 1GB, 那硬盘设定参数(geometry)就会使用像是: M cylinders、255
heads、每磁道 63 sectors, 这里讲的『M』是指硬盘的容量(单位:MB)再除以 7.844238
所得出的数值喔!所以,这个例子的话,同样是 2GB 硬盘应该是 261 cylinders、255 heads、每磁道 63 sectors。
若对上面讲的不了解,或是 FreeBSD 在安装时所侦测到的硬盘设定参数(geometry)
有问题的话,最简单的解法通常是在硬盘上建立一块小小的 DOS 分割区(partition)。
这样一来,就可以侦测到正确的硬盘设定参数了,而且, 如果不想继续留着那小块 DOS 分割区的话,可以随时用 partition editor
来拿掉它。或者把它留着当作网络卡驱动程序使用,或随你高兴怎么用它。
此外呢,有个免费好用的工具程序叫做『pfdisk.exe』, 这个程序放在各 FreeBSD FTP 站或光盘的 tools 目录下,
它可以用来找出硬盘上其它操作系统所使用的硬盘设定参数, 然后就可以在 partition editor 内输入刚刚找到的那些设定参数就可以了。
四:分割磁盘驱动器时有任何限制吗﹖
有,你必须确认你的 root 分割区是在 1024 cylinders 之内,让 BIOS 可以从其中启动核心。(注意:这是 PC 的 BIOS 功能限制,而不是 FreeBSD 的)。
以 SCSI 硬盘而言,通常是把 root (/) 分割区放到硬盘最前面的 1024MB (如果有支持 extended
translation 的话, 那么是最前面的 4096MB)。而 IDE 硬盘的话,相对应的则是
504MB(1024个柱面×63个扇区×16个磁头×512byte=504MB)。
GRUB支持逻辑块寻址(LBA)方式。LBA将用于寻找驱动器上文件的地址转换工作置于驱动器的硬件中,它被用在许多IDE和所有的SCSI硬盘中。在
使用LBA之前,硬盘驱动器遇到一个1024柱面的限制,即BIOS不能找到在1024柱面后的文件(比如一个引导装载程序或是内核文件)。只要系统
BIOS能支持LBA模式(大多数都支持),那么LBA就允许GRUB超越1024柱面的限制,引导操作系统。
五:可以使用哪些磁盘管理程序(disk managers)呢?
FreeBSD 可以用 Ontrack Disk Manager 并且运作正常, 至于其它的 disk manager 则不在正式支持之列。
若整颗硬盘只装 FreeBSD ,那就不用再装 disk manager 了。 只要把硬盘设定为 BIOS 所能抓到的最大空间,FreeBSD
就可算出实际上可使用的空间了。 如果,正在使用的是古老的 MFM 控制卡的旧式硬盘, 那就需要在 FreeBSD内作 cylinders
相关设定了。
如果想在磁盘上使用 FreeBSD 和另外的操作系统,也可以不装 disk manager, 只要确定 FreeBSD
的启动分割区跟其它操作系统的 slice 都位于开始的 1024 cylinders 内就可以了。如果你相当地高明的话,一个 20MB
的启动分割区应该就够用了。
六:FreeBSD 安装完毕后重开机,但是计算机却说 “Missing Operating System”这是怎么了?
通常原因出在 FreeBSD 及 DOS 或其它操作系统在硬盘的设定参数(geometry)上的规划有相冲。解法是重装。
七:为什么机器上多重开机管理员(boot manager)出现了 F? 这个选单画面, 但却不会自动跳过而继续开机呢?
原因在于 BIOS 上跟 FreeBSD 上面两边的硬盘的设定参数(geometry) 并不一致。 若你硬盘或 BIOS 支持
cylinder translation (通常会被标为 “support >1GB(支持 1 GB以上容量)”的话,
试试看更改相关设定,并重装 FreeBSD。
八:为什么在 BIOS 画面之后,FreeBSD 的 boot loader 显示 “Read error” 然后就停止不动了?
这是因为FreeBSD 的 boot loader 无法正确的找出硬盘的 geometry。这样的话,就需要在用 fdisk 分割或是修改 FreeBSD 的 slice 时,手动将正确的值输入进去了。
正确的硬盘 geometry 值在 BIOS 里面可以查的到。注意该硬盘的 cylinders,heads 以及 sectors 这些数值。
在执行 sysinstall(
的 fdisk 时,按下 G 以便手动设定硬盘的 geometry。这时会有一个对话框跳出来,询问您有关 cylinders,heads 以及 sectors 这些东西的值。请将刚刚在 BIOS 查到的数字,以 / 作分隔输 入进去。
举例来说,如果是 5000 cylinders,250 sectors 和 60 sectors 就输入 5000/250/60。输入完后请按 enter 键确认,最后按下 W 键把 新的分割区表写入硬盘当中。
九:在安装NB的时候安装程序会提示两种类型的硬盘几何数据;应该了解它们的意思:
真实几何数据(real geometry)
BIOS几何数据(BIOS geometry)
真实几何数据是硬盘真实的几何数据,由系统检测。BIOS几何数据是BIOS使用的几何数据而它可以不同于真实的几何数据(例如,BIOS可以使用LBA来重新设定硬盘)。
下例中使用的磁盘是一个具有如下几何数据的IDE磁盘:
real: 6232 cyl, 16 heads, 63 sec
BIOS: 779 cyl, 128 heads, 63 sec (LBA)
可以看到BIOS使用LBA重新设定硬盘,有效地缩减了磁柱的数目并增加了磁道的数目(但结果是一样的:6232 * 16 = 779 * 128
= 99712)。一个扇区包含512字节,这就是说硬盘大小为6232 * 16 * 63 * 512 = 3
GB。NetBSD不需要重新设定硬盘的几何数据(事实上也不会如此做)。 如果sysinst出现错误时,在安装时可以手动地更改几何数据。
十:FB下提示
WARNING: A geometry of 77622/16/63 for ad0 is incorrect. Using
a more likely geometry. If this geometry is incorrect or you
are unsure as to whether or not it's correct, please consult
the Hardware Guide in the Documentation submenu or use the
(G)eometry command to change it now.
Remember: you need to enter whatever your BIOS thinks the
geometry is! For IDE, it's what you were told in the BIOS
setup. For SCSI, it's the translation mode your controller is
using. Do NOT use a ''physical geometry''.
一般情况下都是多系统,FB的root(/)放到了1024柱面后面,而又没用GRUB导致的