磁盘的使用
由于磁盘固件屏蔽了磁盘的复杂的内部结构,当前对磁盘的访问变得极其简单。我们可以将磁盘理解成为一个线性的地址空间,从0开始,最大为可寻址空间为磁盘的实际容量,单位是一个扇区(512B)。因此我们对磁盘的访问其实就变成了对磁盘的某个偏移的一段长度的访问,比如要读取偏移为15,长度为2扇区的数据,示例如下图:
图1 磁盘线性地址读取示例
Linux有一些工具可以直接访问磁盘,例如dd等。我们可以借助该工具实现对磁盘的读写访问。
磁盘的内部结构
磁盘内部相对比较复杂,但核心部件包括两个主要的移动部件;一个是磁盘组合(disk assembly) ,另一个是磁头组合(head assembly)。磁盘组合由一个或多个圆盘(platter)组成,它们围绕着一根中心主轴旋转。圆盘的上表面和下表面涂覆了一薄层磁性材料,二进制位被存储在这些磁性材料上。其中,0和1在磁材料中表现为不同的模式。盘片的直径一般是3.5英寸,尽管直径从一英寸到几英尺的磁盘都已经制造出来。磁头组合承载着磁头。每一个盘面有一个磁头,它极其贴近地悬浮在盘面上,但是绝对不与盘面接触(否则就要发生“头损毁”,盘片被破坏)。磁头读出经过 它下面的盘面的磁方向,也能改变其磁方向,以便在磁盘上写信息。每个磁头被固定在一个磁头臂上,所有盘面的磁头随着磁头臂一同移进移出,磁头臂是固定的磁 头组合的一部分。为了清楚的了解磁盘的两个核心组件,本文先给出一个实际机械磁盘的内部实物图,如下:
图2 磁盘内部结构实图
本文放大一下磁盘的磁头组合,如下图所示。可以看出磁头组合由一组摆臂组成,每个摆臂上都有磁头。
图3 磁臂放大图
磁盘的数据存储是由一个个盘片组成的,我们先从个盘片结构讲起。如图4所示,图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。
图4 盘片逻辑结构
图5展示了由一个个盘片组成的磁盘立体结构,一个盘片上下两面都是可读写的,图中蓝色部分叫柱面(cylinder)。
图5 磁盘盘片立体结构
简简单介绍了磁盘结构后,下面我们将对磁盘的参数进行讲解。磁盘的常见参数如下:
- 磁头(head)
- 磁道(track)
- 柱面(cylinder)
- 扇区(sector)
- 圆盘(platter)
图5中磁盘是一个 3个圆盘6个磁头,7个柱面(每个盘片7个磁道) 的磁盘,图4中每条磁道有12个扇区,所以此磁盘的容量为6*7*12*512字节。
即:
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
下面讲一下现代磁盘,在老式磁盘中,尽管磁道周长不同,但每个磁道上的扇区数是相等的,越往圆心扇区弧段越短,但其存储密度越高。不过这种方式显然比较浪费空间,因此现代磁盘则改为等密度结构,这意味着外围磁道上的扇区数量要大于内圈的磁道,寻址方式也改为以扇区为单位的线性寻址。为了兼容老式的3D寻址方式,现代磁盘控制器中都有一个地址翻译器将3D寻址参数翻译为线性参数。
那么如何查询磁盘的参数信息呢?以Linux操作系统为例,可以通过fdisk -l命令查看磁盘的详细信息。如图6所示,显示的磁盘的详细信息。
图6 Linux系统磁盘信息
本文只是简单的介绍了一下磁盘的内部结构,其实还有很多内容,后面会慢慢介绍。