磁盘基础知识及读写原理
阅读原文时间:2021年04月20日阅读:1

一,磁盘基础知识

磁盘的基本组件可分为以下几部分:磁头,盘片,盘面,磁道,柱面,扇区等。

1,盘片与盘面

一块硬盘一般有多块盘片,盘片分为上下两面,其中有效面称为盘面(也就是可以存储数据的盘面,一般来说盘片的上下两面都是可以存储数据,当然极少数情况下只有单面可用于存储数据),盘片数一般与磁头数相等,也就是:磁头数 = 盘面数 = 盘片数 * 2。盘面一般的命名规则是从磁盘上而下依次为0 ...... N,磁头的命名规则亦是如此。

2,磁头

一般每个盘面上都配有一个磁头用于读写数据。大概结构如下图所示:

也就是说磁头数一般等于有效盘面数的。这里得说明一下磁头的基本工作原理。磁头切换磁道读写数据是通过机械设备(步进电机)实现的,速度较慢;而磁头切换盘面读写数据是通过电子设备实现的,速度较快,因此磁头一般是先读写完柱面后才开始寻道的,这样磁盘读写效率更快。

3,磁道(track)

如上图所示,磁道就是以中间轴为圆心的圆环,不同的的磁盘磁盘数也是不尽相同的,磁道之间也是有间隙的,磁道也就是磁盘的存储数据的介质。磁道上布有一层磁介质,通过磁头可以使磁介质的极性转换为操作系统的数据信号(即磁盘的读,磁盘的写刚好相反)。

4,柱面(cylinder)

柱面就是由磁盘不同盘面中的半径相等的磁道组成的。也可以这么理解:假设磁道是二维的圆环(当然磁道上的磁介质是有厚度的,只是在人的肉眼看来像是一个平面),那么相应的柱面就是由该磁道拉伸而成的。也是说柱面数 = 某个盘面的磁道数

5,扇区(sector)

单个磁道就是多个弧形扇区组成的,当然某个盘面上的每个磁道所拥有的扇区数量是相等。扇区的划分如下如所示:

扇区是硬盘的最小存储单元,记住是硬盘的也就是磁盘的最小存储单元,并不是文件系统的小存储单元(文件系统的小存储单元是block,可以人为设置)。一般扇区大小为512bytes

下面一我的电脑为例:
查看操作系统

[root@rodbate ~]# cat /etc/issue
CentOS release 6.7 (Final)
Kernel \r on an \m

[root@rodbate ~]# uname -a
Linux rodbate 2.6.32-573.el6.i686 #1 SMP Thu Jul 23 12:37:35 UTC 2015 i686 i686 i386 GNU/Linux

下面的例子均据于以上操作系统。

先用fdisk -l命令查看一下硬盘的基本信息:

[root@rodbate ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
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: 0x0001d8fb

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *       1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2          64        1306     9972736   8e  Linux LVM

根据以上信息可以得出,该硬盘总容量为10.7 GB 。
1,255 heads表示255个磁头(即有效盘面数为255),
2,63 sectors/track表示每个磁道有63个扇区,1305 cylinders表示该磁盘有1305个柱面,即每个磁面有1305个磁道。
3,其中Units = cylinders of 16065 * 512 = 8225280 bytes表示柱面的容量,即柱面容量 = 柱面数(1305) * 磁道容量(磁道容量 = 扇区数[63] * 扇区大小[512bytes]) = 1305 * 63 * 512 = 8225280 bytes
4,Sector size (logical/physical): 512 bytes / 512 bytes 扇区大小物理和逻辑都是512bytes。
5,I/O size (minimum/optimal): 512 bytes / 512 bytes 表示磁盘最小I/O读写大小512bytes。
6,Disk identifier: 0x0001d8fb表示硬盘标识符。
7,磁盘分区其实是通过分磁盘柱面实现的,每个磁盘分区都有起始柱面和结束柱面,而分区的容量也可以通过这个来计算的,上面已经得出了柱面的大小,要得到硬盘分区的容量大小只需: 磁盘分区大小 = 柱面大小 * 分区拥有的柱面数量 即可。