【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, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b0304

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048   125829119    62401536   8e  Linux LVM

磁盘 /dev/mapper/centos-root:40.1 GB, 40093351936 字节,78307328 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:4160 MB, 4160749568 字节,8126464 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-home:19.6 GB, 19574816768 字节,38232064 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

     硬盘中的磁头和盘片是硬盘最重要的核心,数据的存储的关键部件。盘片是存储数据的(数据的载体),磁头是读取数据的。磁头主要是由读写磁头,传动手臂,传动轴组成,采用非接触式头,加电后在高速旋转的磁盘表面移动读取数据。磁头与盘片其实不直接接触的,不过间隙很小只有0.1-0.3微米,利用特定磁离子极性转换成电信号来读取存储数据,这样既可以读取较大的高信躁比新号,也保证数据传输的可靠性。如下图。

 

硬盘中也有个高速缓存,是可以协调硬盘与主机在处理数据上的速度差异,提高传输读取效率,也可以预读取 、对写入动作进行缓存、临时存储最近访问过的数据。


一般来说一块硬盘有一个到多个盘片不等,其中每个有效盘面对应一个读写磁头,从上往下从0开始依次编号,不同的硬盘盘面在逻辑上被划分为磁道,柱面以及扇区,一般在出厂的时候就设定好了。



 

 硬盘的每个盘片的每个有效盘面都有一个读写磁头,磁头数=盘片个数 * 2。磁盘盘面区域划分如下图所示:

                

                         旋转中的磁盘区域情况                                                                        静止时磁盘盘面区域划分情况

 

    硬盘静止时,磁头停放在靠近主轴接触盘的表面,即盘面的最里侧,是一个不存放任何数据的区域,称为启停区或者着落区(上图红色的那圈,里面就是主轴),启停区的外面是存放数据的区域(上图绿色的区域)。

 磁头配合着盘片的旋转运动通过磁头手臂在数据区的盘面上向外向里来回位移运动,磁头可以读取磁盘上所以的数据。

 柱面离盘心最远的磁道为0磁道,依此往里为1磁道,2磁道,3磁道。

     硬盘扇区是硬盘的内部圆形金属盘片被磁道划分成若干个扇形区域,这就是硬盘扇区。若干个扇区就组成整个盘片,硬盘的读写以扇区为基本单位。这种以簇为最小分配单位的机制,使硬盘对数据的管理变得相对容易。

 

     在磁盘最外圈,离主轴最远的磁道称为0磁道,硬盘的数据的存放就是从最外圈开始0磁道开始的。磁头是如何找到0磁道的位置呢?是因为硬盘有一个用来完成硬盘初始定位的0磁道检测构件,这个构件就是完成0磁道的定位的,0磁道非常重要,我们知道系统的引导程序就是在0磁道的第一扇区,如果0磁道坏了,系统就启动不了了。

     早期的硬盘在每次关机前需要运行一段Panking程序,作用是让磁头回到启停区。现代的硬盘设计已经放弃了这种缺陷,硬盘不工作时,磁头会自动停留在启停区,当需要从磁盘读取数据时,磁盘开始高速旋转达到额定的速度是,磁头就会因盘片旋转产生的气流而抬起,这时候磁头才向盘片存放数据的区域移动并读取数据。

    磁头里盘片距离很近,下面是磁头与盘片距离的示意图,这距离仅有头发丝直径的千分之一。

 

      磁头高度示意图(图片来源于网络)

   

硬盘为什么要分扇区?是逻辑化数据的需要,能更好的管理硬盘空间。 以盘片中心为圆心,把盘片分成若干个同心圆,那每一个划分圆的“线条”,就称为磁道
硬盘内的盘片有两个面,都可以储存数据,而硬盘内的盘片往往不止一张,常见的有两张,那么,两张盘片中相同位置的磁道,就组成一个“柱面”,盘片中有多少个磁道,就有多少个柱面。盘片两面都能存数据,要读取它,必须有磁头,所以,每一个面,都有一个磁头,一张盘片就有两个磁头。以上就是硬盘的专业术语:扇区、磁道、柱面、磁头的通俗解释。硬盘的存储容量=磁头数×磁道(柱面)数×每道扇区数×每道扇区字节数。
磁道从外向内自0开始顺序进行编号,各个磁道上的扇区数是在硬盘格式化时确定的,并且,从图中可以看出,内圈磁道上的扇区数等于外圈磁道上的扇区数。
,同一区域内各磁道扇区数相同,盘片外圈区域磁道长扇区数目较多,内圈区域磁道短扇区数目较少,大体实现了等密度,从而获得了更多的存储空间。大多数产品划分了16个区域,最外圈的每磁道扇区数正好是最内圈的二倍(373~746正是啦)。这样的话,当磁盘主轴马达按一定转速(N转每秒)旋转的时候,越往外,线速度越大,单位时间内扫过的扇区数就越多,读写速度就越高。(这就是通常把系统盘数据放在磁盘最外圈的原因了~~)
 

硬盘的第一个扇区被称之为 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),是硬盘电机主轴的旋转速度,也就是硬盘盘片在一分钟内所能完成的最大转数。转速的快慢是标示硬盘档次的重要参数之一,它是决定硬盘内部传输率的关键因素之一,在很大程度上直接影响到硬盘的速度。硬盘的转速越快,硬盘寻找文件的速度也就越快,相对的硬盘的传输速度也就得到了提高。

 

平均访问时间(Average Access Time)是指磁头从起始位置到到达目标磁道位置,并且从目标磁道上找到要读写的数据扇区所需的时间。
平均访问时间体现了硬盘的读写速度,它包括了硬盘的寻道时间和等待时间,即:平均访问时间=平均寻道时间+平均等待时间
硬盘的平均寻道时间(Average Seek Time)是指硬盘的磁头移动到盘面指定磁道所需的时间。这个时间当然越小越好,硬盘的平均寻道时间通常在8ms到12ms之间,而SCSI硬盘则应小于或等于8ms。
硬盘的等待时间,又叫潜伏期(Latency),是指磁头已处于要访问的磁道,等待所要访问的扇区旋转至磁头下方的时间。平均等待时间为盘片旋转一周所需的时间的一半,一般应在4ms以下。
 
 
传输速率(Data Transfer Rate)硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s)。硬盘数据传输率又包括了内部数据传输率外部数据传输率
内部传输率(Internal Transfer Rate) 也称为持续传输率(Sustained Transfer Rate),它反映了硬盘缓冲区未用时的性能。内部传输率主要依赖于硬盘的旋转速度。
外部传输率(External Transfer Rate)也称为突发数据传输率(Burst Data Transfer Rate)或接口传输率,它标称的是系统总线硬盘缓冲区之间的数据传输率,外部数据传输率与硬盘接口类型硬盘缓存的大小有关。
 
 
缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。
 
 

 

 硬盘的分类


 

硬盘三大种类(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采用磁性碟片来存储混合硬盘是把磁性硬盘和闪存集成到一起的一种硬盘。

优点:

  1.    启动快:没有电机加速旋转的过程。
  2.    读写速度快:不需要磁头,可以快速随机读取,读延迟很小。
  3.    无噪音热量低:没有电机的机械运动,非常安静。
  4.    低功耗。
  5.    无机械故障。
  6.   工作温度范围大。
  7.   重量轻。

缺点:

  1.  容量小:目前最大容量小于机械硬盘。
  2.  成本高。
  3.  容易受外界影响:如断电,磁场干扰,静电等。
  4.  写入寿命有限。
  5.  数据恢复困难。

共同点:都使用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

 

posted @ 2018-05-31 16:20  songguojun  阅读(1917)  评论(0编辑  收藏  举报