0%

深入理解磁盘IO

一、硬盘的物理结构

一块硬盘在物理上被划分为:
盘片
1个硬盘有多个盘片,1个盘片有2个面,称之为盘面,盘片被固定在主轴上。
盘片最里面靠近主轴处(磁头靠近主轴接触的表面),即线速度最小的地方,是一个特殊的空白区域,它不存放任何数据,称为启停区或着陆区。硬盘不工作时,磁头就悬停在这里。

主轴
主轴被固定在硬盘底部的马达上,相当于发动机,马达高速转动,带动主轴转动,主轴带着盘片转动。

磁头
读写数据的关键部件,被固定在传动手臂上,磁头有自己的编号,从0开始编号,读写数据时,盘片高速转动,0号磁头写完数据,1号磁头接着写,2号磁头接着写…… 依次进行,直到这个柱面被存满,这样保证文件连续存储在一个柱面上,再向内移动传动手臂,开始写下一个柱面,依次进行,读数据时也跟写数据类似。
从正上方向下看,所有磁头任何时候都是重叠的(不过目前已经有多磁头独立技术,可不受此限制)
磁头被传动手臂带动,沿盘片的半径方向运动(实际是斜切向运动)

传动手臂
一个传动手臂上,有上下2个磁头,这样可以同时读写2个盘面,运动方向是径向运动,即沿盘片的半径方向运动(从外圆垂直往内圆运动)

存取装置

二、硬盘的逻辑结构

一块硬盘在逻辑上被划分为:
磁道
一块新硬盘上,啥也没有,磁道、扇区都没有,格式化的工作,就是将盘面划分成N个磁道和扇区。
一个圆(圈)就是一个磁道,硬盘存放数据就是从最外面的圆开始的,最外面的圆也称为0磁道,即半径最大的那个圆,0磁道很重要,如果坏了,硬盘基本上就报废了。
硬盘会有一个专门定位0磁道的装置,它是用来完成硬盘的初始定位的。

柱面
柱面是分区的最小单位。
因为硬盘有多个盘片,都是绝对平行被固定在主轴上的,从第1个盘片的某1个磁道垂直下去,与所有盘片上的这个同心圆形成一个面,称之为柱面,即一个圆柱桶的形状。
数据的读/写按柱面进行,而不按盘面进行。也就是说,一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才移到下一个扇区开始写数据。读数据也按照这种方式进行,这样就提高了硬盘的读/写效率。

扇区
扇区是最小的物理存储单位,每个扇区512Byte。

三、硬盘读写数据时的顺序

从盘面的上到下,然后从外磁道到内磁道,数据的读/写按柱面进行,而不按盘面进行。

一次访盘请求(读/写)完成过程由三个动作组成:
1)寻道(时间):先将磁头移动定位到指定磁道
2)旋转延迟(时间):等待指定扇区从磁头下旋转经过
3)数据传输(时间):数据在磁盘与内存之间的实际传输

因此在磁盘上读取扇区数据(一块数据)所需要的时间为:

1
Ti/o = tseek + tla + n * twm

其中:
tseek 为寻道时间
tla为旋转时间
twm 为传输时间

四、硬盘容量计算

整个硬盘体积换算公式是:
磁面个数 * 扇区个数 * 每个扇区的大小512 * 柱面个数 = 硬盘体积 (单位bytes)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~]# fdisk -l
Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x774648f6

设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 41943039 39843840 19G 8e Linux LVM


Disk /dev/mapper/cl-root:17 GiB,18253611008 字节,35651584 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


Disk /dev/mapper/cl-swap:2 GiB,2143289344 字节,4186112 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

五、磁盘阵列

磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组。
独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地)的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。

RAID技术主要有以下三个基本功能:
(1)通过对磁盘上的数据进行条带化,实现对数据成块存取,减少磁盘的机械寻道时间,提高了数据存取速度。
(2)通过对一个阵列中的几块磁盘同时读取,减少了磁盘的机械寻道时间,提高数据存取速度。
(3)通过镜像或者存储奇偶校验信息的方式,实现了对数据的冗余保护。

优点
1)提高传输速率。
2)通过数据校验提供容错功能。

缺点
RAID0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
RAID1磁盘的利用率最高只能达到50%(使用两块盘的情况下),是所有RAID级别中最低的。
RAID0+1以理解为是RAID 0和RAID 1的折中方案。RAID 0+1可以为系统提供数据安全保障,但保障程度要比 Mirror低而磁盘空间利用率要比Mirror高。

参考:
https://blog.csdn.net/hguisu/article/details/7408047