Linux系统磁盘原理渗透解析
了解服务器硬盘的组件以及其工作原理对DBA来说是非常有用的,对已有的系统瓶颈分析等非常有利,下面就来对磁盘进行一系列深入的解析:
当前主流的硬盘接口
个人用:IDE串口化以后形成了SATA/SATA2/SATA3、SATA、SATA2、SATA3
企业用:SCSI串口化以后形成了SAS、SAS、FC
硬盘的主要组件:
1.数据接口:数据与主板以及主板上各部件之间进行数据交换的纽带
2.电路板:包含主芯片,缓存,电机驱动芯片,电路板固化的ROM芯片可以对硬盘进行初始化,加电初始寻道,定位及故障检测。
3.磁头:硬盘中最昂贵的部件,也是硬盘技术中最重要和关键的一环,负责读取盘片上的数据。(注意:磁头不能和盘片接触)
4.盘片:存储数据
4.1 盘片发展历史:塑料盘基 》 金属盘基 》 玻璃盘基 》 铝材料盘基 》 固态硬盘
5.传动臂 :移动磁头,定位磁道
硬盘基本参数:
1.磁面:盘片上用来存储数据的有效面。每个磁面按照从上至下的顺序从0开始进行编号。磁面号=磁头号(0磁头,1磁头,2磁头…..),读写磁头每个磁面一个
2.磁道:盘片转动时,磁头保持在一个位置,磁头沿盘片转过一周的圆形轨迹,叫做一条磁道。磁道由外向内编号,由0开始增加。目前磁盘磁道都有万道以上。相邻磁道之间并不是紧挨着,因磁化单元相隔太近,会影响磁头读写。
3.柱面:每张盘片的上下磁面都会划分数据相等的磁道,相同位置的磁道组成的类似圆柱的表面,叫做柱面。硬盘柱面数=盘片一个磁面上的磁道数。由外向内从0开始编号
4.扇区:
早期扇区:从硬盘圆心引出多条射线,将每个磁道等分成若干个扇环形,每一个扇环形对应的区域叫做一个扇区。
目前扇区:摒弃由圆心引出的射线等分,而是由每个磁道单独划分。
每个扇区存放512字节的信息
硬盘驱动器向硬盘读写数据时,以扇区为单位
硬盘寻址模式:
1.CHS(Cylinder/Head/Sector):
三维地址模式使用类型:小容量硬盘支持硬盘容量:单磁面524M以下
扇区的三维地址与物理扇区一一对应
CHS(0/1/1)–0柱面1磁头(磁面)1扇区
2.LBA(Logical Block Addressing)
线性寻址模式使用类型:大容量硬盘
外磁道扇区总数> 内磁道扇区总数
一个序号对应唯一一个物理扇区,即逻辑地址
硬盘容量=标示LBA最大值* 521B
影响硬盘性能指标:
1.转速
2.单碟容量
3.数据传输率
4.寻道时间
5.主轴的转速与缓存
硬盘读写速率测试(使用dd命令):
测试机型号:DELL R510
测试机系统:ubuntu10.04
测试机用途:CACHE机
硬盘转速:15000rpm
RAID状态:RAID阵列卡组建RAID5
读测试:
测试命令:time dd if=/dev/sdb1 of=/dev/null bs=8k count=8388608
测试命令说明:因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令相当于测试磁盘的读能力。
测试结果:
写测试:
测试命令:time dd if=/dev/zero of=/srv/iotest bs=8k count=8388608
测试命令说明:
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
测试结果:
硬盘SMART技术:
SMART : “Self-Monitoring,AnalysisandReportingTechnology”自我分析检测技术
硬盘运行时,会将自身的若干参数记录下来,参数包括型号、容量、温度、密度、坏扇区、寻道时间、传输、误码率等
硬盘运行了几千小时后,很多内在的物理参数都会发生变化,某一参数超过报警阈值,则说明硬盘接近损坏,需要修复。
磁盘IO性能系统级别调优:
1、磁盘IO调度器:
四种IO调度模式
一.CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq)
二.Deadline (elevator=deadline):保证对既定的IO请求以最小的延迟时间
三.NOOP (elevator=noop):
四.Anticipatory (elevator=as)
查看系统IO调度模式
命令:cat /sys/block/sd*/queue/scheduler
2、调节配置文件中的读写buffer
例如数据库
3、调节IO内核参数
–调节磁盘请求队列长度
/sys/block/sda/queue/nr_requests默认为128
提高此参数的值会更加占用内存,但能更加多的合并读写操作,速度变慢,但能读写更加多的量。
–对读优化的建议
调节IO预先读请求的大小
/sys/block/sda/queue/read_ahead_kb默认128kb