硬盘(英语:Hard Disk Drive,缩写:HDD)
硬盘(英语:Hard Disk Drive,缩写:HDD)是电脑上使用坚硬的旋转盘片为基础的非易失性存储器,它在平整的磁性表面存储和检索数字数据,数据通过离磁性表面很近的磁头由电磁流来改变极性的方式被写入到磁盘上,数据可以通过盘片被读取,原理是磁头经过盘片的上方时盘片本身的磁场导致读取线圈中电气信号改变。硬盘的读写是采用半随机存取的方式,可以以任意顺序读取硬盘中的数据,但读取不同位置的资料速度不相同。硬盘包括一至数片高速转动的盘片以及放在执行器悬臂上的磁头。
早期的硬盘存储介质是可替换的,不过现在硬盘的存储介质一般不能更换,碟片与磁头是一起被密封在硬盘驱动器内。硬盘有一个有着过滤措施的气孔,用来平衡工作时产生的热量导致的硬盘内外的气压差。
总体来说,硬盘结构包括:盘片、读写磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部分。
磁盘结构和工作原理
磁盘结构作用拓扑图
盘片(Platters)
- 盘片是硬盘中承载数据存储的介质。
- 磁盘圆形盘片,一个磁盘内含有多个盘片。
- 每个盘片包含两个面,每个盘面都对应地有一个读/写磁头(Head,简写为H)。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。
- 层叠关系,每个盘片之间不会贴着。
- 盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,也就是第一个盘的正面成为0面,反面为1面。再上一个盘片就编号为2面和3面,以此类推。
- 第一个盘面磁头为0磁头,背面为1磁头…第二个盘正面为2磁头,反面为3磁头,以此类推。
- 一个磁头可以用于读/写数据,盘面数和磁头数是相等的。
- 数据写在每个盘子的两面的相同位置。比如将一个16位的数据写入或从磁盘读出,那么8个磁盘的每一面上都有2位来表示,合在一起表示这个16位数据。
例如,短语“ HARDDISK “可以写在四个磁盘的两面,如下图所示。
作用:
- 盘片主要作用于划分多个扇区用来存放数据。
磁头(head)
- 磁头放置在盘片的上面与下面,磁头不会触碰到盘面本身的,每个盘片会有两个磁头,称为读/写磁头,可以对数据进行读写。磁头是硬盘中对盘片进行读写工作的工具。硬盘在工作时,磁头通过感应旋转的盘片上磁场的变化来读取数据;通过改变盘片上的磁场来写入数据。为避免磁头和盘片的磨损,在工作状态时,磁头悬浮在高速转动的盘片上方,而不与盘片直接接触,只有在电源关闭之后,磁头会自动回到在盘片上的固定位置(称为着陆区,此处盘片并不存储数据,是盘片的起始位置)。
- 磁头沿盘片的半径方向动作,而盘片则按照指定方向高速旋转,这样磁头就可以到达盘片上的任意位置了。
作用:
- 磁头是在盘片中起到读写数据的作用。
扇区(Sector)
- 每个磁道上可以存储数KB的数据,但计算机并不需要一次读写这么多数据。在这一这基础上,又把每个磁道划分成若干弧段, 每段称为一个扇区。磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。
- 扇区是分布在盘面的数据分割区,以扇形区分,一个盘面可分多个扇区,扇区大小可根据系统自定义规划。
- 扇区是硬盘上存储的物理单位,每个扇区可存储128×2的N次方(N=0,1,2,3)字节的数据。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。
- 从DOS时代起,每扇区是128×22=512字节,现在已经成了业界不成文的规定,也没有哪个硬盘厂商试图去改变这种约定。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)
- 即使计算机只需要硬盘上存储的某个字节,也须一次把这个字节所在的扇区中的全部512字节读入内存,再选择所需的那个字节。
- 扇区的编号是从1开始,而不是0
- 为了对扇区进行查找和管理,需要对扇区进行编号,扇区的编号从0磁道开始,起始扇区为1扇区,其后为2扇区、3扇区……,0磁道的扇区编号结束后,1磁道的起始扇区累计编号,直到最后一个磁道的最后一个扇区(n扇区)。例如,某个硬盘有1024个磁道,每个磁道划分为63个扇区,则0磁道的扇区号为1~63,1磁道的起始扇区号为64,最后一个磁道的最后一个扇区号为64512。
作用:
扩展知识
主引导扇区
- 主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。
- 在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA),也成为校验魔数。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。
磁道(Track)
- 每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道每个盘面可以划分多个磁道。
- 在每个盘面的最外圈,离盘心最远的地方是“0”磁道,向盘心方向依次增长为1磁道,2磁道,等等。硬盘数据的存放就是从最外圈开始。
作用:
- 磁道是磁头访问盘面扇区的隧道,磁盘转起后磁头读取扇区内的数据。
柱面(Cylinder)
- 离盘心最远的磁道为0磁道,依此往里为1磁道,2磁道,3磁道…,不同面上相同磁道编号则组成了一个圆柱面,即所称的柱面。
- 硬盘数据的读写是按柱面进行,即磁头读写数据时首先在同一柱面内从0磁头开始进行操作,依次向下在同一柱面的不同盘面( 即磁头上)进行操作,只有在同一柱面所有的磁头全部读写完毕后磁头才转移到下一柱面,因为选取磁头只需通过电子切换即可 ,而选取柱面则必须通过机械切换。电子切换比从在机械上磁头向邻近磁道移动快得多。因此,数据的读写按柱面进行,而不 按盘面进行。 读写数据都是按照这种方式进行,尽可能提高了硬盘读写效率。
簇(Cluster)/ 块(Block)
- 通俗的来讲,在Windows下如NTFS等文件系统中叫做簇;在Linux下如Ext4等文件系统中叫做块(block)。每个簇或者块可以包括2、4、8、16、32、64…2的n次方个扇区。
- 将物理相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇。每个簇只能由一个文件占用,即使这个文件中有几个字节,决不允许两个以上的文件共用一个簇,否则会造成数据的混乱。这种以簇为最小分配单位的机制,使硬盘对数据的管理变得相对容易,但也造成了磁盘空间的浪费。在Windows下,随便找个几字节的文件,在其上面点击鼠标右键选择属性,看看实际大小与占用空间两项内容,如大小:15字节 (15 字节), 占用空间:4.00 KB (4096 字节)。这里的占用空间就是你机器分区的簇大小,因为再小的文件都会占用空 间,逻辑基本单位是4K,所以都会占用4K。簇一般有这几类大小 4K,8K,16K,32K,64K等。簇越大存储性能越好,但空间浪费严重。簇越小性能相对越低,但空间利用率高。NTFS格式的文件系统簇的大小为4K。
- 簇是操作系统中磁盘文件存储管理的单位,可为一个或多个物理扇区组成,由格式化时选定文件系统而定。簇是操作系统所使用的逻辑概念,而非磁盘的物理特性。
- 由于物理硬盘中扇区是磁盘最小的物理存储单元、在硬盘中存在的量很大并且每个扇区都必须有编号,所以操作系统无法对数目众多的扇区进行寻址。因此操作系统将相邻的扇区组合在一起,组成簇这一单位用以高效率地利用资源。文件系统是操作系统与硬盘驱动器之间的接口,当系统请求从硬盘里读取一个文件时,会请求相应的文件系统打开文件,簇包含的扇区数是由文件系统格式与分配单元大小而定。一般每个簇可以包括2、4、8、16、32或64个扇区。
- 逻辑层面: 磁盘块(虚拟出来的)。 块是操作系统中最小的逻辑存储单位。操作系统与磁盘打交道的最小单位是磁盘块。磁盘块是一个虚拟概念。是操作系统自己"杜撰"的,软件的概念,不是真实的。所以大小由操作系统决定,操作系统可以配置一个块多大。一个块大小=一个扇区大小*2的n次方。N是可以修改的。
- 映射磁盘块:磁盘控制器,其作用除了读取数据、控制磁头等作用外,还有的功能就是映射扇区和磁盘块的关系。
硬盘读写数据的过程
有了柱面(cylinder),有了磁头(head),有了扇区(sector),显然可以定位数据了,这就是数据定位(寻址)方式之一,CHS(Cylinder Head Sector),对早期的磁盘非常有效,知道用哪个磁头,读取哪个柱面上的第几扇区就OK了的方式。硬盘读取数据时,读写磁头沿径向移动,移到要读取的扇区所在磁道的上方,这段时间称为寻道时间(seek time)。因读写磁头的起始位置与目标位置之间的距离不同,寻道时间也不同。磁头到达指定磁道后,然后通过盘片的旋转,使得要读取的扇区转到读写磁头的下方,这段时间称 为旋转延迟时间(rotational latencytime)。
- 硬盘的容量计算公式:硬盘容量=柱面数×盘面数×每道扇区数×512字节
假定硬盘有4个盘片,每个盘片有4条磁道,每条磁道有8个扇区,每个扇区就是512字节。所以一条磁道的容量=8x512字节。一个柱面的容量=4x每条磁道的容量=4x8x512字节。一个硬盘的容量=所有柱面容量=4 x 4 x 8 x 512字节=柱面数 × 盘面数 × 每道扇区数 × 512字节。
早期的硬盘每磁道扇区数相同,此时由磁盘基本参数可以计算出硬盘的容量:即上面的公式,硬盘容量=柱面数×盘面数x每道扇区数x每扇区字节数。
- CHS模式支持的硬盘容量有限,用10bit来存储柱面地址,用8bit来存储磁头地址,用6bit来存储扇区地址,而一个扇区共有512Byte,这样使用CHS寻址一块硬盘最大容量为1024 * 256 * 63 * 512B = 8064 MB(大致相当于7G)。
- CHS的BIOS规范只有24位: 磁柱10比特、磁头8位、扇区6比特,定义在BIOS的INT 13H软件中断里。
由于每磁道扇区数相同,外圈磁道半径大,里圈磁道半径小,外圈和里圈扇区面积自然会不一样。同时,为了更好的读取数据,即使外圈扇区面积再大也只能和内圈扇区一样存放相同的字节数(512字节)。这样一来,外圈的记录密度就要比内圈小,会浪费大量的存储空间。
所以现在的硬盘都使用ZBR(Zoned Bit Recording,区位记录)技术来划分。盘片表面由里向外划分为数个区域,不同区域的磁道扇区数目不同,同一区域内各磁道扇区数相同,盘片外圈区域磁道长扇区数目较多,内圈区域磁道短扇区数目较少,大体实现了等密度,从而获得了更多的存储空间。此时,由于每磁道扇区数各不相同,所以传统的容量计算公式就不再适用。
实际上如今的硬盘大多使用LBA(Logical Block Addressing)逻辑块寻址模式,知道LBA后即可计算出硬盘容量。现在很多硬盘采用同密度盘片,意味着内外磁道上的扇区数量不同,扇区数量增加,容量增加,CHS很难定位寻址,所以有了新的寻址模式:LBA(Logical Block Addressing)。在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器再将这种逻辑地址转换为实际硬盘的物理地址。
逻辑扇区号LBA的公式:
- LBA(逻辑扇区号)=磁头数 × 每磁道扇区数 × 当前所在柱面号 + 每磁道扇区数 × 当前所在磁头号 + 当前所在扇区号 – 1
例如:
CHS=0/0/1,则根据公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0,也就是说物理0柱面0磁头1扇区,是逻辑0扇区。
CHS与LBA互换
CHS地址可用以下公式转成LBA
#lba =(#c * H +#h)* S +#s-1
其中
- #c、#h、#s分别是磁柱、磁头、扇区的编号
- #lba是逻辑区块编号
- H=heads per cylinder,每个磁柱的磁头数
- S=sectors per track,每磁道的扇区数
LBA可用以下公式对应到CHS
#c =#lba /(S * H)
#h =(#lba / S)%H
#s =(#lba%S)+1
其中
- / 是整数除法
- % 是取整数除法中的余数
- 请注意,当今的磁盘使用ZBR(Zone Bit Recording, 等密度记录)方式,实际的每轨扇区数得根据它是哪一轨。不过磁盘还是会提供这个参数来符合公式,内部再自动调整。
- ZBR区位记录:在计算机存储中,区域位记录(ZBR)是磁盘驱动器用来优化磁道以增加数据容量的一种方法。它通过在外部磁道上每个区域放置比内部磁道更多的扇区来实现此目的,了解即可。
例如:
CHS总数=[600, 10, 84],求#lba=1234所对应的CHS编号:
1234/84=14 余 58
#s = 1 + 58 = 59
14/10=1 余 4
#c = 1
#h = 4
#chs =(1,4,59)
验算: (1*10+4)*84+59-1=14*84+58=1234
硬盘读写数据的原理
在每个硬盘的中心都有大量高速旋转的磁盘,在每个磁盘的表面都有高速扫过的读写磁头。每个磁盘上都覆盖着一层薄薄的微小的磁化金属粒,数据以一种肉眼无法分辨的形式存在。很多组微小颗粒形成的磁化图案,记录形成了数据。每一组又称为比特(bit),所有微粒都按照自身的磁性排列,形成两种状态之一,对应0或者1。将比特信息通过电磁铁转换成电流,数据就能被读写在硬盘上。这块磁铁会产生一个强大磁场,足以改变金属微粒的磁性。当信息写入磁盘,驱动使用磁读取器将其还原成有意义的形式,类似于留声机针将唱片纹路转化成音乐。
TED的视频用动画的方式演示了硬盘的读写数据的原理,请看 [中字][TED-ED]计算机内部部件是如何工作的
磁盘读写数据所花费的时间
在了解了硬盘的基本原理之后,不难推算出,磁盘完成一个I/O请求(磁盘上数据读取和写入)所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。所花费的时间可以分为三个部分。
- 寻道时间 - Tseek
所谓寻道时间,其实就是磁臂移动到指定磁道所需要的时间,这部分时间又可以分为两部分:
寻道时间=启动磁臂的时间+常数*所需移动的磁道数
其中常数和驱动器的的硬件相关,启动磁臂的时间也和驱动器的硬件相关
- 旋转延迟 - Trotation
旋转延迟指的是把扇区移动到磁头下面的时间。这个时间和驱动器的转数有关。通常用磁盘旋转一周所需时间的1/2表示。大多数硬盘以5400(90赫兹)或7200(120赫兹)rpm(每分钟转数)的速度旋转磁盘。比如:7200rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000rpm的磁盘其平均旋转延迟为2ms。旋转延迟只和硬件有关。
- 传输时间 - Ttransfer
传输时间指的是从磁盘读出或将数据写入磁盘的时间。这个时间等于:所需要读写的字节数/每秒转速*每扇区的字节数
硬盘与软盘的扇区编号
硬盘在进行扇区编号时与软盘有一些区别,在软盘的一个磁道中,扇区号一次编排,即1、2、3…n扇区。由于硬盘的转速较高,磁头在完成某个扇区数据的读写后,必须将数据传输到微机,这需要一个时间,但是这时硬盘在继续高速旋转,当数据传输完成后,磁头读写第二个扇区时,磁盘已经旋转到了另外一个扇区。因此在早期硬盘中,扇区号是按照某个间隔系数跳跃编排的。比 如,2号扇区并不是1号扇区后的按顺序的第一个,而是第八个,3号扇区又是2号扇区后的按顺序的第八个,依此类推,这个“八”称为 交叉因子。
硬盘驱动器如何工作?
交互式3D模型说明硬盘驱动器如何磁性存储信息