回到Linux基础系列文章大纲
回到Shell系列文章大纲


Linux管理文件系统(1):了解机械硬盘和硬盘容量计算

了解机械硬盘

机械硬盘由多块盘片组成,它们都绕着主轴旋转。每块盘片上下方都有读写磁头悬浮在盘片上下方,它们与盘片的距离极小。在每次读写数据时盘片旋转,读写磁头被磁臂控制着不断的移动来读取其中的数据。

所有的盘片都是同时同步转动,所有的磁头也是同步移动。

磁盘在物理上划分了扇区、磁道和柱面。如果划分了分区,则分区是逻辑上柱面的分隔边界。

读写磁头在停止状态下,在盘片旋转时磁头扫过的一圈轨迹称为磁道,所有的磁道都是同心圆。从盘片外圈开始向内数,磁道号从0开始逐数增加。

每个磁道以512字节等分为多个弧段,每个弧段就是一个扇区。但是需要说明的是,扇区的大小并非一定是512字节。所以外圈磁道的扇区数较多,内圈磁道的扇区数较少,有些硬盘参数上写的磁道扇区数通常用一个范围来标识,如373-768表示最外圈磁道有768个扇区,最内圈有373个扇区,这就可以计算出每个磁道的字节数。

扇区上记录了物理数据、扇区号、磁头号(或者盘片号)及磁道号。

旧式磁盘的结构不分区(without zones),每个磁道扇区数相同,但是每个扇区仍然是512字节,也就是说磁性材料记录的0和1的数量是相同的。这种结构的缺点是外圈磁道的面积大,存储的数据分布宽松,内圈磁道面积小,存储的数据分布密集,这样就导致盘片外圈面积浪费。

新式磁盘结构进行了分区,将每个磁道等面积划分512字节的空间作为一个扇区,所以不同磁道扇区数不同。

现在的磁盘都是新式扇区划分结构。

将所有盘片相同磁道数的磁道划分为柱面。和磁道号的标记方式一样,从外向内从0开始逐数增加。

之所以划分柱面,是因为所有磁盘同步旋转,所有磁头同步移动,所有的磁头在任意一个时刻总是会出在同一个磁道同一个扇区上。读写数据时,任意一段数据总是按柱面来读写的。所以盘片数越多,读写所扫的扇区数就越少,所需的时间相对就越少,性能就越好。

向磁盘写数据是从外圈柱面向内圈柱面写的,只有写完一个柱面才写下一个柱面。

了解磁盘和分区的容量计算

虽然现在的磁盘都是新式结构(每磁道扇区数不同),但是在磁盘信息上还是根据旧式结构来计算的,也就是说每个磁道扇区数相同,【扇区/磁道】的值说明每个磁道上有多少个扇区,也可以将其认为是新式结构下的平均值。

磁盘相关英文:

disk 磁盘
heads 磁头。Linux系统中查看到的heads一般包括很多虚拟磁头,实际的物理磁盘的一块盘片上下两面一面一磁头,即2个磁头。
sectors 扇区。一磁道上划分多个扇形区域,一般默认一扇区512字节。
track 磁道。盘片上一圈算一磁道。
cylinders 柱面。所有盘片的同一半径的磁道组成一柱面。柱面数=盘片数*盘片上的磁道数。
units 单元块。大小等于一个柱面大小。

磁盘或分区大小计算方法:

1
2
磁盘大小=units×柱面数(cylinders)
磁盘大小=磁头数(heads)×每磁道上的扇区数(sectors)×512×柱面数(cylinders)

例如:查看/dev/sda3。

1
2
3
4
5
6
7
[root@xuexi tmp]# fdisk -l /dev/sda3
Disk /dev/sda3: 19.1 GB, 19116589056 bytes # 总大小19G
255 heads, 63 sectors/track, 2324 cylinders # 磁头255 柱面2324 每磁道扇区数63(这是平均数)
Units = cylinders of 16065 * 512 = 8225280 bytes # 单元块大小
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

计算方式:

1
2
Units=255×63×512=16065×512=8225280
磁盘大小=255*63*2324*512=19115550720= 19.11555072GB,不用1024算,用1000算。