【linux】硬盘原理简介和分区
硬盘是计算机重要的一个部件,计算机中的数据都是保存在硬盘中,比如mysql的数据,linux系统日志及其他的应用日志,还有很多视频,音频,图片等文件都是保存在硬盘中,所以硬盘是计算机不可或缺的一个部件。
在linux优化,mysql优化都会涉及到硬盘的知识。所以了解硬盘的工作原理也是十分重要的。
硬盘的历史
从1956年9月,IBM向世界展示了第一台磁盘存储系统IBM35ORAMAC至今,磁盘存储系统已经历了近半个世纪的发展。经历了这45年,磁盘的变化可以说是非常巨大。最早的那台RAMAC容量只有SMB,然而却需要使用50个直径为24英寸的磁盘。但现在一块容量高达 000GB的硬盘只需要3张磁盘片即可。
IBM350R AMAC可以说是硬盘的开山鼻祖,与现代硬盘差别很大。面现代硬盘的真正原形,是1973年IBM公司推出的Winchete(温氏)硬盘,它的特点是: 一工作时,磁头悬浮在高速转动的盘片上方,面不与盘片直接触。使用时,磁头沿高速旋转的量片上做径向移动”,这便是当今所有硬盘的雏形。现在的硬盘容量虽然更大了,但是依然在沿用温彻斯特~的动作模式。
早期的硬盘除了外型略大,读写速度慢,存储密度容量比较小,其外观还是内部结构和现在的硬盘无大的差别。
图片来源于网络
硬盘的内部结构
硬盘主要部件包括以下:
- 磁头
- 盘片
- 盘片主轴
- 磁头控制器
- 数据转换器
- 接口
- 缓存
硬盘所有的盘片都固定在一个旋转轴上,这个轴即盘片主轴。而所有的盘片之间是平行的,在每个盘片(一个盘片两个盘面>的存储面上都有一个碰头,磁头与盘片之间的距离比头发丝的直径还小很多倍。所有的磁头(一个有效盘面就有一个碰头)连在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向动作,而盘片以每分钟数千转的速度在高速旋转,这样碰头就能对盘片上的指定位置进行数据的读写操作。硬盘是精密设备,灰尘是其大敌,所以需要真空密封(我之前笔记本有课硬盘坏了,维修师傅说他修不了,因为里面硬盘不能暴露在空气中,必须返厂在特殊的环境(无尘实验室)下修复)。
linux系统可以查看这些信息
[root@localhost ~]# fdisk -l 磁盘 /dev/sda:64.4 GB, 字节, 个扇区
Units = 扇区 of * = bytes
扇区大小(逻辑/物理): 字节 / 字节
I/O 大小(最小/最佳): 字节 / 字节
磁盘标签类型:dos
磁盘标识符:0x000b0304 设备 Boot Start End Blocks Id System
/dev/sda1 * Linux
/dev/sda2 8e Linux LVM 磁盘 /dev/mapper/centos-root:40.1 GB, 字节, 个扇区
Units = 扇区 of * = bytes
扇区大小(逻辑/物理): 字节 / 字节
I/O 大小(最小/最佳): 字节 / 字节 磁盘 /dev/mapper/centos-swap: MB, 字节, 个扇区
Units = 扇区 of * = bytes
扇区大小(逻辑/物理): 字节 / 字节
I/O 大小(最小/最佳): 字节 / 字节 磁盘 /dev/mapper/centos-home:19.6 GB, 字节, 个扇区
Units = 扇区 of * = bytes
扇区大小(逻辑/物理): 字节 / 字节
I/O 大小(最小/最佳): 字节 / 字节
硬盘中的磁头和盘片是硬盘最重要的核心,数据的存储的关键部件。盘片是存储数据的(数据的载体),磁头是读取数据的。磁头主要是由读写磁头,传动手臂,传动轴组成,采用非接触式头,加电后在高速旋转的磁盘表面移动读取数据。磁头与盘片其实不直接接触的,不过间隙很小只有0.1-0.3微米,利用特定磁离子极性转换成电信号来读取存储数据,这样既可以读取较大的高信躁比新号,也保证数据传输的可靠性。如下图。
硬盘中也有个高速缓存,是可以协调硬盘与主机在处理数据上的速度差异,提高传输读取效率,也可以预读取 、对写入动作进行缓存、临时存储最近访问过的数据。 一般来说一块硬盘有一个到多个盘片不等,其中每个有效盘面对应一个读写磁头,从上往下从0开始依次编号,不同的硬盘盘面在逻辑上被划分为磁道,柱面以及扇区,一般在出厂的时候就设定好了。
硬盘的每个盘片的每个有效盘面都有一个读写磁头,磁头数=盘片个数 * 2。磁盘盘面区域划分如下图所示:
旋转中的磁盘区域情况 静止时磁盘盘面区域划分情况
硬盘静止时,磁头停放在靠近主轴接触盘的表面,即盘面的最里侧,是一个不存放任何数据的区域,称为启停区或者着落区(上图红色的那圈,里面就是主轴),启停区的外面是存放数据的区域(上图绿色的区域)。
磁头配合着盘片的旋转运动通过磁头手臂在数据区的盘面上向外向里来回位移运动,磁头可以读取磁盘上所以的数据。
柱面离盘心最远的磁道为0磁道,依此往里为1磁道,2磁道,3磁道。
硬盘扇区是硬盘的内部圆形金属盘片被磁道划分成若干个扇形区域,这就是硬盘扇区。若干个扇区就组成整个盘片,硬盘的读写以扇区为基本单位。这种以簇为最小分配单位的机制,使硬盘对数据的管理变得相对容易。
在磁盘最外圈,离主轴最远的磁道称为0磁道,硬盘的数据的存放就是从最外圈开始0磁道开始的。磁头是如何找到0磁道的位置呢?是因为硬盘有一个用来完成硬盘初始定位的0磁道检测构件,这个构件就是完成0磁道的定位的,0磁道非常重要,我们知道系统的引导程序就是在0磁道的第一扇区,如果0磁道坏了,系统就启动不了了。
早期的硬盘在每次关机前需要运行一段Panking程序,作用是让磁头回到启停区。现代的硬盘设计已经放弃了这种缺陷,硬盘不工作时,磁头会自动停留在启停区,当需要从磁盘读取数据时,磁盘开始高速旋转达到额定的速度是,磁头就会因盘片旋转产生的气流而抬起,这时候磁头才向盘片存放数据的区域移动并读取数据。
磁头里盘片距离很近,下面是磁头与盘片距离的示意图,这距离仅有头发丝直径的千分之一。
磁头高度示意图(图片来源于网络)
硬盘的第一个扇区被称之为 Boot Sector。由 MBR (MasterBoot Record)、DPT (Disk Partition Table) 和 Boot Record ID 三部分组成。
MBR 又称作主引导记录,占用 Boot Sector 的前 446 个字节(0 ~ 0x1BD)。存放系统主引导程序,负责从活动分区中装载并运行系统引导程序。
DPT 即主分区表,占用 64 个字节 (0x1BE ~ 0x1FD),记录了磁盘的基本分区信息。主分区表分为四个分区项,每项 16 字节,分别记录了每个主分区的信息 (因此最多可以有 4 个主分区)。
Boot Record ID 即引导区标记,占用两个字节 (0x1FE ~ 0x1FF)。对于合法引导区,它等于 0xAA55,这是判别引导区是否合法的标志。
总结:
硬盘最基本的组成部分是由多个坚硬的金属材料制作而成的涂上磁性介质的盘片组成,不同容量的硬盘盘片数量不同。
磁道(heads):每个盘片有两面,都可以记录信息,盘片表面以盘片中心为圆心,不同半径的同心圆称之为磁道。
扇区(Sector):扇区主要是存储数据地点的标识符和数据的数据段。它是盘片由圆心向四周画直线,不同的磁道被直线分成许多扇形的(弧形)区域,每个弧形的区域叫做扇区,每个扇区大小一般为512字节,每一个磁道又按512个字节为单位划分为等分。硬盘的读写以扇区为基本单位。每个扇区除了512k数据还有数十个Bytes信息,包括标识(ID)、校验值和其它信息。4K为最优方案,nysql聚簇索引页的大小就是4k。
扇区的第一个主要部分是标识符,标识符就是扇区头标,包括组成扇区三位地址的三个数字:扇区所在的磁头(或盘面),磁道(或柱面号),扇区所在磁道上的位置及扇区号,(比如0磁头,0磁道,1扇区)。头标还包含一个字段,其中有显示扇区是否能可靠存储数据,或者是否已经发生故障而不能使用的标记。有些硬盘控制器在扇区头标中,还记录有指示字,可在原来扇区出错时指引磁盘转到替换扇区或磁道。最后,扇区头标以循环冗余教研(CRC)的值作为结束,以控制器检验扇区头标的读出情况。
扇区的第二个部分是存储数据 ,可分为数据和保护数据的纠错码(ECC)。在初始准备期间,计算机用512个虚拟信息字节(实际数据存放地)和与这些虚拟信息字节相应的ECC数字填入这个部分。
柱面(Cylinder):硬盘中不同的盘面,相同半径的磁道从上到下组成的圆柱形区域称柱面。一块硬盘的磁道数和柱面数是相等。柱面是一个立体概念,磁道是一个平面概念。
每个盘片由两个面,每个盘面有一个磁头,因此一般习惯于用磁头号来区分盘面。扇区,磁道(或柱面)和磁头构成了硬盘结构的基本参数,通过这些参数可以得到硬盘的容量,计算公式:
存储容量 = 磁头数 * 磁道数 * 每个磁道的扇区数 * 每个扇区的字节数。
硬盘的读写原理
数据的读/写一般是按柱面进行的(效率高),即磁头读存数据时首先在同一柱面内从“0”磁头开始进行操作,依次向下在同一柱面的不同盘面即不同磁头上进行操作,只在同一柱圍所有的磁头全部读/写完毕后,磁头才转移到下一柱面(即寻道),因为切换磁头只需通过电子设备切换即可,面切换柱面则必须通过机械设备切换。电子磁头间的切换比机械磁头向邻近磁道或柱面切换要快得多。所以数据的读/写按柱面进行,而不是按盘面进行。也就是说,一个磁道写满数据后,就在同一柱面的下一个盘面的相同半径磁道来写,一个柱面写满后,才移到下一个柱面开始写数据。读数据也按照这种方式进行,这样就大大提高了硬量的读写效率。
当操作系统将文件存储到硬盘上时,按柱面、磁头、扇区的方式进行,即最先是第1磁道的第一磁头下(也就是第1盘面的第一磁道)的所有扇区,然后,依次是同一柱面的下一磁头(也可以说下一盘面),...一个柱面存储满后就通过步进电机把磁头移动到下一个柱面(及寻道),继续写入数据,直到把文件内容全部写入到磁盘。
系统也可以用相同的顺序读出数据,读出数据时通过告诉磁盘控制器要读出扇区所在的柱面号,磁头号和扇区号(物理地址的三个组成部分)进行。磁头控制器直接使用磁头部件步进到相应的柱面,选择相应的磁头,等到要求的扇区移动到磁头下。在扇区到来时候,磁盘控制器读出每个扇区的头标,把这些头标中的地址信息和期待检查的磁头和柱面号作比较,然后寻找要求的扇区号。待磁盘控制器找到该扇区头标时,根据其任务是写扇区还是读扇区来决定是转换写电路还是读出数据和尾部记录。
从上面可以看出,硬盘的寻道是物理磁盘机械臂操作,相比磁头电子切换非常耗时间,所以尽量减少寻道次数才能加速磁盘读写速度。
硬盘寻址方式
硬盘的参数
转速(Rotational Speed 或Spindle speed),是硬盘内电机主轴的旋转速度,也就是硬盘盘片在一分钟内所能完成的最大转数。转速的快慢是标示硬盘档次的重要参数之一,它是决定硬盘内部传输率的关键因素之一,在很大程度上直接影响到硬盘的速度。硬盘的转速越快,硬盘寻找文件的速度也就越快,相对的硬盘的传输速度也就得到了提高。
硬盘的分类
硬盘三大种类(SSD;HHD;HDD)
混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。
混合硬盘是综合了机械硬盘和固态硬盘的优点总结而成,既有很大的存储空间,又有快速运行而不容易发生错误的能力。
传统硬盘(HDD,Hard Disk Drive的缩写):
也叫机械硬盘。最基本的电脑存储器,我们电脑中常说的电脑硬盘
C盘、D盘为磁盘分区都属于硬盘驱动器。目前硬盘一般常见的磁盘容量为80G、128G、160G、256G、320G、500G、750G、1TB、2TB等等。硬盘按体积大小可分为3.5寸、2.5寸、1.8寸等;按转数可分为5400rpm/7200rpm/10000rpm等;常见的是SATA硬盘,SAS硬盘(通过采用串行技术以获得更高的传输速度,所以读写速度比SATA硬盘块,建议线上应用存储使用这种硬盘,比如图片,数据冷备份,数据库备份等)。
固态硬盘(Solid State Drive):
用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。与传统硬盘最大区别就是没有磁头及高速旋转的传动机构。
SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘是把磁性硬盘和闪存集成到一起的一种硬盘。
优点:
- 启动快:没有电机加速旋转的过程。
- 读写速度快:不需要磁头,可以快速随机读取,读延迟很小。
- 无噪音热量低:没有电机的机械运动,非常安静。
- 低功耗。
- 无机械故障。
- 工作温度范围大。
- 重量轻。
缺点:
- 容量小:目前最大容量小于机械硬盘。
- 成本高。
- 容易受外界影响:如断电,磁场干扰,静电等。
- 写入寿命有限。
- 数据恢复困难。
共同点:都使用SATA接口(Serial Advanced Technology Attachment,一种基于行业标准的串行硬件驱动器接口)。
RAID的优点
1. 传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以运用RAID可以达到单个的磁盘驱动器几倍的速率。因为处理器的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提升,所以需要有一种方案搞定二者之间的矛盾。 2. 更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重问题无法运用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是运用RAID的第二个原因
由于主分区表中只能分四个分区,无法满足需求,因此设计了一种扩展分区格式。
硬盘分区为主分区+扩展分区 所有的逻辑分区都在扩展分区内;swap 肯定是要的分区。
Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
Swap分区,即交换区,系统在物理内存不够时,与Swap进行交换。 其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。
众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。
计算机用户会经常遇这种现象。例如,在使用Windows系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了Swap区中。因此,一旦此程序被放置到前端,它就会从Swap区取回自己的数据,将其放进内存,然后接着运行。
参考来源:
http://cn.linux.vbird.org/linux_basic/0130designlinux_2.php
https://baike.baidu.com/item/%E7%A1%AC%E7%9B%98/159825?fr=aladdin
https://baike.baidu.com/item/Swap%E5%88%86%E5%8C%BA/7613378?fr=aladdin
https://blog.csdn.net/zgs_shmily/article/details/51192308
【linux】硬盘原理简介和分区的更多相关文章
- Linux DNS原理简介及配置
Linux DNS原理简介及配置 DNS简介 DNS原理 域名解析的过程 资源记录 DNS BIND安装配置 一.简介 一般来讲域名比IP地址更加的有含义.也更容易记住,所以通常用户更习惯输入域名来访 ...
- Linux硬盘命名和安装分区
硬盘命名: 硬盘命名基于文件,一般有如下文件方式: /dev/hda1 /dev/sdb3 具体含义如下: /dev:是所有设备文件存放的目录. hd和sd:他们是区别的前两个字母,代表该分区所在的设 ...
- Linux 磁盘原理与管理 (分区 挂载)
目前硬盘与主机系统的联系主要有几种传输介面规格: IDE介面: IDE介面插槽所使用的排线较宽,每条排线上面可以接两个IDE装置,由於可以接两个装置,那为了判别两个装置的主/从架构, ...
- [Linux] 硬盘构造与分区
首先让我们从物理结构上了解一下硬盘的存储原理. 硬盘构造示意图: 1. head:磁头,磁盘盘面上的磁头,有几个磁头,就有几个盘面.从0开始编号,最大255,表示总共256个磁头. 2. cylind ...
- linux硬盘分区与格式化
linux硬盘分区与格式化: 1. 设备管理 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘.光驱等 IDE 或 SCSI 设备也不例外. Linux 把各种 IDE 设备分配了一 ...
- Linux 硬盘分区
Linux系统中的重要概念,一切资源都看做是文件,包括硬件设备. 1. 基本概念 1)MBR:Master Boot Recorder,存放主引导记录,446字节的引导代码. 2)主分区表:存放主分区 ...
- linux硬盘分区格式化及挂载
1.硬盘的接口类型 硬盘的接口一般分为两种,一种是IDE并行接口,一种是SATA串行接口, 在linux上面IDE接口的硬盘被识别为/dev/hd[a-z]这样的设备,其中hdc表示光驱设备,这是因为 ...
- Linux硬盘分区和格式化
分区与格式化 先用fdisk分区,分区完成后再用mkfs格式化并创建文件系统,挂载,磁盘就能使用啦. 分区的原理: MBR:主引导扇区 主分区表:64bytes,最多只能分四个主 ...
- linux硬盘的分区、格式化、挂载以及LVM
linux硬盘的分区.格式化.挂载以及LVM 多块硬盘的组合: 硬盘分两种:ide和scsi. ide硬盘: /dev/hda 第一块IDE硬盘 /dev/hdb 第二块IDE硬盘 ... /de ...
随机推荐
- jQuery EasyUI window窗口使用实例
需求:点击[增加]按钮,弹出窗口,并对所有输入项内容进行校验,校验通过就提交给后台的action处理,没有通过校验就弹窗提示. <!DOCTYPE html> <html> ...
- spring AOP源码分析(一)
对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目标对象配置增强行为以及代理对象的生成 ...
- vue 项目使用 webpack 构建自动获取电脑ip地址
1.开发 H5 时移动端,经常会使用真机进行调试本地环境.webpack 配置服务器好多脚手架写的都是固定的,而在团队开发中需要每人配置自己的本机 ip 进行开发,每次开启开发环境的都需要修改,并且还 ...
- Flutter的输入框TextField
TextFiled组件的API 先来看一下TextFiled的构造方法: const TextField({ Key key, this.controller, this.focusNode, thi ...
- java内部类 和外部类的区别
java 内部类和静态内部类的区别 详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和 ...
- elasticsearch介绍,安装,安装错误解决及相应插件安装
一.elasticsearch介绍 1.简介(使用的是nosql,更新比mongodb慢): ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎, ...
- 在页面中有overflow-y:auto属性的div,当出现滚动条,点击返回顶部按钮,内容回这个div最顶部
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Yii2的使用
yii2的下载安装 使用下载好的文件配置高级模板,在配置文件配置好数据库和gii 在common模板配置db: 在backend模板配置gii: 配置nginx服务器访问backend和fronten ...
- Promise是什么?
一. Promise是什么? Promise是一种异步操作的解决方案,将写法复杂的传统的回调函数和监听事件的异步操作,用同步代码的形式表达出来. 避免了多级异步操作的回调函数嵌套. Promise最早 ...
- CSS 的三种样式 内联 内部 外部
CSS:层叠样式表的缩写 就是 Cascading Style Sheets Cascading Style Sheets : 层叠样式表 优先级问题 :遵守就近原则 内联> 内部>外部 ...