LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 987|回复: 5

freeBSD创建分区疑问?

[复制链接]
发表于 2004-5-31 23:05:05 | 显示全部楼层 |阅读模式
用"disklabel"命令创建分区时,cylinders和sectors/unit的值是怎么计算出来的?
例如2G的:
type: unknown
disk: amnesiac
label:
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 4160
sectors/unit: 4194225
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # milliseconds
track-to-track seek: 0 # milliseconds
drivedata: 0

8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: 4194225 0 unused 0 0 # (Cyl. 0 - 4160*)

其中,cylinders: 4160和sectors/unit: 4194225中的4160和4194225是怎么算出来的?
 楼主| 发表于 2004-6-1 08:31:42 | 显示全部楼层
自己顶
发表于 2004-6-1 10:21:27 | 显示全部楼层

回复: freeBSD创建分区疑问?

bytes/sector: 512 //每扇区为512bytes
sectors/track: 63 //每磁道有63个扇区
tracks/cylinder: 16 //每磁柱面有16条磁道
sectors/cylinder: 1008 //所以每磁柱面共有扇区63x16=1008个扇区
cylinders: 4160 //本slice共有4160个磁柱面
sectors/unit: 4194225 //所以理论上本slice共有4160x1008=4193280个扇区,但实际上为4194225,实际上由(4194225-4193280)/63=15可以看出正好多出了一个磁柱面,这个磁柱面是系统用来标记该slice上的子分区、格式等信息的。
 楼主| 发表于 2004-6-2 09:11:27 | 显示全部楼层
谢谢LYOO!
bytes/sector: 512 //每扇区为512bytes
sectors/track: 63 //每磁道有63个扇区
tracks/cylinder: 16 //每磁柱面有16条磁道
sectors/cylinder: 1008 //所以每磁柱面共有扇区63x16=1008个扇区
cylinders: 4160 //本slice共有4160个磁柱面
sectors/unit: 4194225 //所以理论上本slice共有4160x1008=4193280个扇区,但实际上为4194225,实际上由(4194225-4193280)/63=15可以看出正好多出了一个磁柱面,这个磁柱面是系统用来标记该slice上的子分区、格式等信息的。

如上所示:磁柱面数cylinders:4160 根据容量是怎么算出来的呢?
上面的数字是一个2G的,换算成字节:
512*63*16*4160=2146959360
与2*1024*1024*1024=2147483648怎么不相等,2147483648-2146959360=524288字节的空间到那去了?
发表于 2004-6-2 11:41:05 | 显示全部楼层
最初由 zjj2002 发表
如上所示:磁柱面数cylinders:4160 根据容量是怎么算出来的呢?
上面的数字是一个2G的,换算成字节:
512*63*16*4160=2146959360
与2*1024*1024*1024=2147483648怎么不相等,2147483648-2146959360=524288字节的空间到那去了?


4160不是算出来的,是你在创建该slice时从盘上分配出来的。

524288/1024=512K,正好是一个逻辑扇区,这个扇区用来存放描述slice的信息的(boot1)。
结合FreeBSD的启动过程来看:
boot0(512K)-->boot1(512K)-->boot2-->loader
系统加电启动首先读MBR上的boot0,boot0的任务是找到boot1后将控制权交给它,boot1知道slice中各分区结构、卷标等信息,也就知道了boot2在何处,再将控制权交给boot2,boot2就开始进行初始化工作,初始化工作完成后,将控制权交给loader,loader开始加载内核....系统全面启动起来。

最初由 LYOO 发表
sectors/unit: 4194225 //所以理论上本slice共有4160x1008=4193280个扇区,但实际上为4194225,实际上由(4194225-4193280)/63=15可以看出正好多出了一个磁柱面,这个磁柱面是系统用来标记该slice上的子分区、格式等信息的。

原说法不太准确,这儿多出的1个磁柱面是各个子分区记录自身信息的。

以上是个人学习心德,如有不正确之处欢迎讨论。
 楼主| 发表于 2004-6-2 13:42:31 | 显示全部楼层
对于2G的来说,空间相差正好是一个扇区的大小,但对其它容量的磁盘来说并不是正好一个扇区呢?下面是我统计的一个列表:
磁盘大小        cylinders        字节数        实际字节数        相差字节       
512M        1039        536223744        536870912        647168
1G        2079        1072963584        1073741824        778240
1.5G        3119        1609703424        1610612736        909312
2G        4160        2146959360        2147483648        524288
2.5G        5200        2683699200        2684354560        655360
搞不明白的是slice在分配时,遵循什么样的规则?为什么不同容量的磁盘相差的字节数不一样?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表