zoukankan      html  css  js  c++  java
  • 硬盘的基本知识

      我们知道信息存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片。假设,你用显微镜把盘片放大,会看见盘片表面凹凸不平,凸起的地方被磁化,凹的地方是没有被磁化;凸起的地方代表数字1(磁化为1),凹的地方代表数字0。因此硬盘可以以二进制来存储表示文字、图片等信息。

    1. 硬盘的组成

    一般说来,机械硬盘,都是由盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部份组成。如下图:

    内部结构图:

    2. 盘面
          硬盘的盘片一般用铝合金材料做基片,高速硬盘也可能用玻璃做基片。硬盘的每一个盘片都有两个盘面(Side),即上、下盘面,一般每个盘面都会利用,都可以存储数据,成为有效盘片,也有极个别的硬盘盘面数为单数。每一个这样的有效盘面都有一个盘面号,按顺序从上至下从“0”开始依次编号。在硬盘系统中,盘面号又叫磁头号,因为每一个有效盘面都有一个对应的读写磁头。硬盘的盘片组在2~14片不等,通常有2~3个盘片,故盘面号(磁头号)为0~3或 0~5。

    3. 磁头

      每张磁片的正反两面各有一个磁头(Heads),一个磁头对应一张磁片的一个面。因此,用第几磁就可以表示数据在哪个盘面。

    4. 磁道
      磁盘在格式化时被划分成许多同心圆,这些同心圆轨迹叫做磁道(Track)。磁道从外向内从0开始顺序编号。硬盘的每一个盘面有300~1024个磁道,大容量硬盘每面的磁道数更多。信息以脉冲串的形式记录在这些轨迹中,这些同心圆不是连续记录数据,而是被划分成一段段的圆弧,这些圆弧的角速度一样。由于径向长度不一样,所以,线速度也不一样,外圈的线速度较内圈的线速度大,即同样的转速下,外圈在同样时间段里,划过的圆弧长度要比内圈 划过的圆弧长度大。一个标准的3.5寸硬盘盘面通常有几百到几千条磁道。磁道是“看”不见的,只是盘面上以特殊形式磁化了的一些磁化区,在磁盘格式化时就已规划完毕。

    5. 扇区

      磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区( Sector ),扇区从“1”开始编号,每个扇区可以存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位,所以扇区是硬盘数据存储的最小单位。

      这里大家应该比较疑惑,外圈周长很明显比内圈要长,怎么可能每个扇区都是512byte? 其实早期硬盘外圈存储比内圈存储密度低一些,所以外圈很长但是仍然只能存储512byte,导致盘片利用率不高,现在的硬盘盘片则采用内外存储密度一致的方式,每个磁道都划分成以512byte大小的弧段,这样也造成了内外磁道上扇区数量会不一样,外圈上的扇区数要多于内圈扇区数。

      扇区的第一个主要部分是标识符。标识符,就是扇区头标,包括组成扇区三维地址的三个数字:扇区所在的磁头(或盘面)、磁道(或柱面号)以及扇区在磁道上的位置即扇区号。头标中还包括一个字段,其中有显示扇区是否能可靠存储数据,或者是否已发现某个故障因而不宜使用的标记。有些硬盘控制器在扇区头标中还记录有指示字,可在原扇区出错时指引磁盘转到替换扇区或磁道。最后,扇区头标以循环冗余校验(CRC)值作为结束,以供控制器检验扇区头标的读出情况,确保准确无误。
      扇区的第二个主要部分是存储数据的数据段,可分为数据和保护数据的纠错码(ECC)。在初始准备期间,计算机用512个虚拟信息字节(实际数据的存放地)和与这些虚拟信息字节相应的ECC数字填入这个部分。

    6. 柱面
      所有盘面上的同一磁道构成一个圆柱,通常称做柱面(Cylinder),每个圆柱上的磁头由上而下从“0”开始编号。数据的读/写按柱面进行,即磁 头读/写数据时首先在同一柱面内从“0”磁头开始进行操作,依次向下在同一柱面的不同盘面即磁头上进行操作,只在同一柱面所有的磁头全部读/写完毕后,磁头才转移到下一柱面(同心圆的再往里的柱面),因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换。电子切换相当快,比在机械上磁头向邻近磁道移动快得多,所以,数据的读/写按柱面进行,而不按盘面进行。也就是说,一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才移到下一个扇区开始写数据。读数据也按照这种方式进行,这样就提高了硬盘的读/写效率。

      一块硬盘驱动器的圆柱数(或每个盘面的磁道数)既取决于每条磁道的宽窄(同样,也与磁头的大小有关),也取决于定位机构所决定的磁道间步距的大小。

    7. 簇

      “簇”是DOS进行分配的最小单位。当创建一个很小的文件时,如是一个字节,则它在磁盘上并不是只占一个字节的空间,而是占有整个一簇,所以说“簇”是DOS进行分配的最小单位。DOS在不同的存储介质(如软盘,硬盘),不同容量的硬盘,簇的大小也不一样。簇的大小可在称为磁盘参数块(BPB)中获取。簇的概念仅适用于数据区。

    8. 寻址方式——CHS

      CHS(Cylinder/Head/Sector)寻址模式也称为3D模式,是硬盘最早采用的寻址模式,它是在硬盘容量较小的前提下产生的。

      硬盘的C/H/S 3D参数既可以计算出硬盘的容量,也可以确定数据所在的具体位置。这是因为扇区的三维物理地址与硬盘上的物理扇区一一对应,即三维物理地址可完全确定硬盘上的物理扇区。三维物理地址通常以C/H/S的次序来书写,如C/H/S为0/1/1,则第一个数字0指0柱面,第二个数字1指1磁头(盘面),第三个数字1指1扇区,表示该数据位于硬盘1盘面上的0磁道1扇区。现在定位已完成,硬盘内部的参数和主板BIOS之间进行协议,正确发出寻址信号,从而正确定位数据位置。

      早期硬盘一个磁道上分63个扇区,物理磁头最多16个(8个盘片,盘片多了硬盘那就真要加厚了)。采用8位寻址方式,8位二进制位的最大值是256(0-255),可以表示磁头数,而扇区只有63个(1-63),只需要其中6个二进制位即可表示,剩下2位拿去表示柱面,柱面数用10(8+2)位来表达,达到1024个柱面(0-1023),因此总扇区数(1024×16×63)。前面说一个扇区大小为512byte,这也就是说,如果以C/H/S寻址模式寻址,则IDE硬盘的最大容量只能为1024×16×63×512B= 500MB左右。

      可以思考下,在8位寻址模式下,其实可以寻址的硬盘最大容量为1024×256×63×512B =8G,那为啥CHS模式硬盘只支持到500MB呢?原因很简单,我们的硬盘盘片不可能让128片盘片重叠起来吧,那会是多厚?如果采用28位寻址方式,那么可以寻址137G,盘片也不可能一直堆叠下去。  

    9. 寻址方式——LBA(Logical Block Addressing)

      经常去买硬盘的人都知道,硬盘经常都说单碟、双碟,其实意思就是说硬盘盘片只有1个或者2个,而且都只是用一面,单碟一个磁头而已,但是硬盘容量确是几百G,而且硬盘柱面往往都大于1024个柱面,CHS是无法寻址利用完这些硬盘容量的。

      另外由于老硬盘的扇区划分方式对硬盘利用率不高,因此出现了现在的等密度盘,外圈的扇区数要比内圈多,原来的3D寻址方式也就不能适应这种方式,因此也就出现了新的寻址方式LBA,这是以扇区为单位进行的线性寻址方式,即从最外圈柱面0开始,依次将扇区号编为0、1….等等,举个例子,假设硬盘有1024个柱面,由于是等密度硬盘,柱面0(最外圈)假设有128个扇区,依次编号为0-127,柱面1有120个扇区,则依次编号为127-246,…..依次最内圈柱面127只有扇区64个,则编号到最后。因此要定位到硬盘某个位置,只需要给出LBA数即可,这个就是逻辑数。

       在 LBA 模式下,为了保留原来CHS时的概念,也可以设置柱面、磁头、扇区等参数,但是他们并不是实际硬盘的物理参数,只是为了计算方便而出的一个概念,1023之前的柱面号都一一物理对应,而1023以后的所有柱面号都记录成1023磁头最大数可以设置为255,而扇区数一般是每磁道63个,硬盘控制器会把由柱面、磁头、扇区等参数确定的地址转换为LBA数。这里我们再此明确两个概念:

      物理扇区号:一般我们称CHS模式下的扇区号为物理扇区号,扇区编号开始位置是1

      逻辑扇区号:LBA下的编号,扇区编号是从0开始。

      

    10. 绝对扇区与DOS扇区

       我们可以用柱面/磁头/扇区来唯一定位磁盘上每一个区域,或是说柱面/磁头/扇区与磁盘上每一个扇区有一一对应关系,通常DOS将 “柱面/磁头/扇区” 这样表示法称为 “绝对扇区” 表示法。但DOS不能直接使用绝对扇区进行磁盘上的信息管理,而是用所谓“相对扇区”或“DOS扇区”。“相对扇区”只是一个数字,如柱面140,磁头3,扇区4对应的相对扇区号为2757。该数字与绝对扇区“柱面/磁头/扇区”具有一一对应关系。当使用相对扇区编号时,DOS是从柱面0,磁头1,扇区1开始(注:柱面0,磁头0,扇区1没有DOS扇区编号,DOS下不能访问,只能调用BIOS访问),第一个DOS扇区编号为0,该磁道上剩余的扇区编号为1到16(假设每磁道17个扇区),然后是磁头号为2,柱面为0的17个扇区,形成的DOS扇区号从17到33。直到该柱面的所有磁头。然后再移到柱面1,磁头1,扇区1继续进行DOS扇区的编号,即按扇区号,磁头号,柱面号(磁道号)增长的顺序连续地分配DOS扇区号。

    11. 硬盘分区

      我们知道,一般使用硬盘,我们首先会对硬盘进行分区,然后对分区使用某个文件系统格式(NTFS、FAT、ext2/ext3)进行分区格式化,然后才能正常使用。那么分区是怎么回事呢?我们常见的windows中说到的c、d、e盘是怎么划分出来的呢?其实,在装windows系统过程中,一般我们只需要填写每个分区的大小,看不出来分区过程的实际工作情况,我们可以从linux系统分区过程反而能反应底层实际分区情况。

    柱面是分区的最小单位,即分区是以某个某个柱面号开始到某个柱面号结束的。

      如图,柱面1~200我们可以分为一个区,柱面201~500再划分为一个区,501~1000再划分为一个区,以此类推。大家可以看到,柱面0没有在任何分区里面,为何?这里说说,前面说到硬盘从外圈(柱面0)到内圈扇区是依次编号,看似各个扇区没有什么区别,但是这里硬盘的柱面0的第一个扇区(逻辑扇区0,CHS表示应该是0/0/1)却是最重要的,因为硬盘的第一个扇区记录了整个硬盘的重要信息,第一个扇区(512个字节)主要记录了两部分:

    ①    MBR(Master Boot Record):主引导程序就放在这里,主引导程序是引导操作系统的一个程序,但是这部分只占446字节。

      我们按下电脑的开机按键,就给主板通上了电,上面的bios程序开始运行,对电脑硬件进行检测,然后就需要我们去选择First boot device,我们可以从U盘启动、从光盘启动,当然也可以从硬盘启动,而且很多时候默认的是从硬盘启动。如果我们选择了从硬盘启动,那么bios程序就会读取该设备的第一个扇区的数据,也就是前面512个字节,如果最后两个字节不是以0x55AA结束,那么表示这个设备不可以用来启动;如果是0x55AA,那么表示该设备可以用来启动,bios程序就会有一个jump的操作,跳转到硬盘这一个扇区的代码,把操作交给硬盘,那么跳转的是哪儿呢?就是我们要说的MBR,主引导记录。

      MBR中包含了整个硬盘的一些参数和一段引导程序,引导程序就会去DPT磁盘分区表里面去找到底从硬盘的哪个分区去启动(具有激活标志的分区),找到后就把控制权交出去,不过这之前会先检查DPT磁盘分区表是否正确。

    ②    DPT(Disk Partition table):硬盘分区表也在这里,分区表就是用来记录硬盘的分区情况的,例如c盘是1~200柱面,d盘是201~500柱面,分区表总共只占64字节,可以看出,分区其实很简单,就是在这个表里面修改一下记录就重新分区了,但是由于只有64字节,而一条记录就要占用16字节,这个分区表最多只能记录4个分区信息。

      磁盘分区表的四个分区表项内容格式一致,我们拿出一个分区表项(16字节)看看都包含了什么。

      第1个字节:如果为0x80,表示是激活分区,那么前面的MBR引导程序就把控制权给这个分区。四个分区只能有一个是激活的。0x00表示非激活的分区。

      第2-4个字节:主分区的第一个扇区的CHS地址,里面有程序代码的。

      第5个字节:主分区的类型。例如01表示FAT32,05表示extended(如果一个分区的主分区id号为05,那么它就是一个扩展分区了)等,具体可参看分区类型标志。

      第6-8个字节:主分区的最后一个扇区的CHS地址,所以我们改改分区表,也可以修改磁盘分区的大小。

      第9-12个字节:该主分区的第一个扇区的逻辑地址LBA。

      第13-16个字节:主分区的扇区总数。

      为了继续分出更多分区来,引入了扩展分区的概念,也就是说,在这4个分区中,可以使用其中一条记录来记录扩展分区的信息,然后在扩展分区中再继续划分逻辑分区,而逻辑分区的分区记录则记录在扩展分区的第一个扇区中,如此则可以像链表一样划分出很多分区来。但是请注意,一个分区表中可以有1~4条主分区,但是最多只能有1个扩展分区。

    举例,主分区可以是P1:1~200,扩展分区P2: 2~1400,扩展分区开始的第一个扇区可以用来记录扩展分区中划分出来的逻辑分区。

    12. 分区链表

           分区表之间是如何关联的,详细讲一下,分区表是一个单向链表,第一个分区表,也就是位于硬盘第一个扇区中的DPT,可以有一项记录扩展分区的起始位置柱面,类似于指针的概念,指向扩展分区(图3中的"第4分区表项"),扩展分区的第一个逻辑分区的第一个扇区,叫做EBR,extended boot record,扩展分区记录或者虚拟分区表,虚拟MBR,类似于整个磁盘的第一个扇区,但是它没有引导程序,只有一个扩展分区表和0x55AA结束标志。其中扩展分区表由四部分组成。里面的第二项可以找到下一个逻辑分区的位置。第三、第四项记录不存任何信息(图4中的“未用”)。

      请看下图,主引导记录/分区表所在的是硬盘第一个分区,基本分区1、基本分2、基本分区3都是主分区、扩展分区内有2个逻辑分区,每个逻辑分区的第一个扇区都是分区表,至于引导扇区(DBR),在系统启动一节中会提及。

    13. 系统启动

    之前提到MBR中安装的引导加载程序,他的作用是什么?

    ① 提供开机菜单选项:可以供用户选择启动哪个操作系统,这是多重引导功能。

    ② 加载操作系统内核:每个操作系统都有自己的内核,需要引导程序来加载

    ③ 转交给其他引导程序:可以将工作移交给其他引导程序来进行上述操作。

       其实引导加载程序除了可以安装在MBR中,还可以直接安装在每个分区的引导扇区(DBR)中,注意下,每个分区(主分区、逻辑分区)都有一个自己的启动扇区,专门用来安装引导加载程序,如上图标3结构图。

    系统启动过程:

    ① 首先,BIOS启动后,读取硬盘第一个扇区MBR中的引导加载程序(可能是windows或者linux的grub)

    ② MBR中的引导程序提供开机菜单,你可以选择

      1)直接加载windows 内核

      2)将工作转交给windows 分区内的引导扇区中的加载程序,让他自己去加载内核

      3)转交给linux分区内引导扇区,让他去加载linux.

    ③ 根据用户选择的选项和引导加载程序中记录的分区,到分区表找对应的分区柱面号等分区信息,启动内核或者分区加载程序。

      Window安装时默认会自动将MBR和windows所在分区的引导扇区都装上引导程序,而不会提供任何选项给用户选择,因此如果之前装过其他操作系统,然后再另外装一个windows时,会把公用的MBR覆盖掉,如此,原来的操作系统就无法启动了。如果先装windows,然后装linux,linux 会覆盖MBR,然后让用户选择是否将windows等其他操作系统的启动项添加进来,如果你选择了添加进来,那么你在开机时就会有两个选项让用户进行选择了。

    注:

      1) 这里讨论的全部是硬盘相关的东西,光盘不在此列,而且光盘的磁道并不是从外圈到内圈编号,而是从内圈开始编号,这点注意。

      2)  硬盘第一个扇区是由MBR和分区表占据,因此0柱面0磁头上剩下的62个扇区一般会空出来保留(这部分保留称为隐藏扇区,因为操作系统读取不到这部分扇区,这部分扇区是提供给BIOS读取的),而系统分区则从0柱面1磁头1扇区开始,折算成LBA=255 × 63 × 0 + 63 × 1 + 1 – 1= 63,即从LBA 63号扇区开始分区。不过查阅有的资料提及到另外一种说法,那就是有的硬盘可能0柱面全部空下来,如果真是这样,那浪费可就真的大了。

      3) 对于扩展分区的分区表我们知道也是由扩展分区的第一个扇区开始写,而且是写到每个逻辑驱动器的第一个扇区,同样,扩展分区内的第一个扇区所在的磁道剩余的扇区也会全部空余出来,这些保留的扇区操作系统也是无法读取的,注意在扩展分区的第一个扇区里面是没有引导加载记录的。引导加载记录都是放在隐藏扇区后面的。可以看图3,图4

    附加知识点:

    1. 磁头

      磁头靠近主轴接触的表面,即线速度最小的地方,是一个特殊的区域,它不存放任何数据,称为启停区或着陆区(LandingZone),启停区外就是数据区。在最外圈,离主轴最远的地方是“0”磁道,硬盘数据的存放就是从最外圈开始的。那么,磁头是如何找到“0”磁道的位置的 呢?在硬盘中还有一个叫“0”磁道检测器的构件,它是用来完成硬盘的初始定位。“0”磁道是如此的重要,以致很多硬盘仅仅因为“0”磁道损坏就报废,这是 非常可惜的。
      早期的硬盘在每次关机之前需要运行一个被称为Parking的程序,其作用是让磁头回到启停区。现代硬盘在设计上已摒弃了这个虽不复杂却很让人不愉快的小缺陷。硬盘不工作时,磁头停留在启停区,当需要从硬盘读写数据时,磁盘开始旋转。旋转速度达到额定的高速时,磁头就会因盘片旋转产生的气流而抬起, 这时磁头才向盘片存放数据的区域移动。
      盘片旋转产生的气流相当强,足以使磁头托起,并与盘面保持一个微小的距离。这个距离越小,磁头读写数据的灵敏度就越高,当然对硬盘各部件的要求也越 高。早期设计的磁盘驱动器使磁头保持在盘面上方几微米处飞行。稍后一些设计使磁头在盘面上的飞行高度降到约0.1μm~0.5μm,现在的水平已经达到 0.005μm~0.01μm,这只是人类头发直径的千分之一。
      气流既能使磁头脱离开盘面,又能使它保持在离盘面足够近的地方,非常紧密地跟随着磁盘表面呈起伏运动,使磁头飞行处于严格受控状态。磁头必须飞行在盘面上方,而不是接触盘面,这种位置可避免擦伤磁性涂层,而更重要的是不让磁性涂层损伤磁头。
      但是,磁头也不能离盘面太远,否则,就不能使盘面达到足够强的磁化,难以读出盘上的磁化翻转(磁极转换形式,是磁盘上实际记录数据的方式)。
      硬盘驱动器磁头的飞行悬浮高度低、速度快,一旦有小的尘埃进入硬盘密封腔内,或者一旦磁头与盘体发生碰撞,就可能造成数据丢失,形成坏块,甚至造成 磁头和盘体的损坏。所以,硬盘系统的密封一定要可靠,在非专业条件下绝对不能开启硬盘密封腔,否则,灰尘进入后会加速硬盘的损坏。另外,硬盘驱动器磁头的寻道伺服电机多采用音圈式旋转或直线运动步进电机,在伺服跟踪的调节下精确地跟踪盘片的磁道,所以,硬盘工作时不要有冲击碰撞,搬动时要小心轻放。

      磁头是硬盘中最昂贵的部件,也是硬盘技术中最重要和最关键的一环。传统的磁头是读写合一的电磁感应式磁头,但是,硬盘的读、写却是两种截然不同的操作,为此,这种二合一磁头在设计时必须要同时兼顾到读/写两种特性,从而造成了硬盘设计上的局限。而MR磁头(Magnetoresistive heads),即磁阻磁头,采用的是分离式的磁头结构:写入磁头仍采用传统的磁感应磁头(MR磁头不能进行写操作),读取磁头则采用新型的MR磁头,即所谓的感应写、磁阻读。这样,在设计时就可以针对两者的不同特性分别进行优化,以得到最好的读/写性能。另外,MR磁头是通过阻值变化而不是电流变化去感应信号幅度,因而对信号变化相当敏感,读取数据的准确性也相应提高。而且由于读取的信号幅度与磁道宽度无关,故磁道可以做得很窄,从而提高了盘片密度,达到200MB/英寸2,而使用传统的磁头只能达到20MB/英寸2,这也是MR磁头被广泛应用的最主要原因。目前,MR磁头已得到广泛应用,而采用多层结构和磁阻效应更好的材料制作的GMR磁头(Giant Magnetoresistive heads)也逐渐普及。

  • 相关阅读:
    python 基础2.5 循环中continue与breake用法
    python 基础 2.4 while 循环
    python 基础 2.3 for 循环
    python 基础 2.2 if流程控制(二)
    python 基础 2.1 if 流程控制(一)
    python 基础 1.6 python 帮助信息及数据类型间相互转换
    python 基础 1.5 python数据类型(四)--字典常用方法示例
    Tornado Web 框架
    LinkCode 第k个排列
    LeetCode 46. Permutations
  • 原文地址:https://www.cnblogs.com/zoneofmine/p/6373468.html
Copyright © 2011-2022 走看看