磁盘的内部结构及原理(详细)

一:机械硬盘的结构

机械硬盘(HDD,Hard Disk Drive)是一种数据存储设备,采用机械运动来读取和写入数据。它由一个或多个盘片组成,每个盘片正反面都有磁头负责读写数据。机械硬盘通常通过磁头臂移动到不同的磁道位置来访问数据,而盘片则通过主轴电机旋转以实现数据读写。但是机械硬盘的具体工作原理需要进一步了解,才能更好地理解机械硬盘的内部结构。

推荐先观看如下视频: 视频1视频2视频3视频4 <math xmlns="http://www.w3.org/1998/Math/MathML"> 注:机械硬盘的外部结构我下文将不再详细阐述 \color{#f00}{注:机械硬盘的外部结构我下文将不再详细阐述} </math>注:机械硬盘的外部结构我下文将不再详细阐述

(一):硬盘的物理和逻辑结构

<math xmlns="http://www.w3.org/1998/Math/MathML"> 机械硬盘( H D D )的盘片、磁道、扇区、簇说明: \color{#00f}{机械硬盘(HDD)的盘片、磁道、扇区、簇说明:} </math>机械硬盘(HDD)的盘片、磁道、扇区、簇说明:

txt 复制代码
盘片(Platters):
    盘片是机械硬盘的核心组件,通常是由金属或玻璃材料制成的圆形碟片,盘片的正反两面会涂有磁性物质。硬盘的每
    一个盘片都有两个盘面(Side),即上下盘面,一般每个盘面都会利用,都可以存储数据,成为有效盘片,也有极个
    别的硬盘盘面数为单数。每一个这样的有效盘面都会有盘面号,按顺序从上至下从"0"开始依次编号。在硬盘系统中,
    盘面号又叫磁头号,因为每一个有效盘面都有一个对应的读写磁头。硬盘的盘片组在2~14片不等,通常有2~4个盘
    片,故盘面号(磁头号)为0~3或0~7。我们的数据会以二进制方式被存储在盘片的上下两面里。
磁道(Tracks):
   磁盘在格式化时被划分成许多同心圆,这些同心圆轨迹叫做磁道(Track)。磁道从外向内从0开始顺序编号。每一
   个盘面有300~1024个磁道,新式大容量硬盘每面的磁道数更多。每个磁道又被划分为若干个扇区,而信息以脉冲
   串的形式记录在这些轨迹中。
扇区(Sectors):
    在磁盘里的磁道上等分出若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节或4KB(通常情况下
    是512字节),磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。通常扇区与扇区之间也有一定间隔(逻辑
    上的间隔,物理上没有任何间隔,但是每个扇区的开头都有一个同步信息,外围电路可以用来判断一个扇区的开始)
簇(Cluster):
    将相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇。
    如在Windows下,随便找个几字节的文件,在其上面点击鼠标右键选择属性,看看实际大小与占用空间两项内容,
    如大小:2字节(2个字母),占用空间:4KB(4096字节)。这里的占用空间就是你机器分区的簇大小,因为再小的文件
    都会占用空间,逻辑基本单位是4K,所以都会占用4K。 簇一般有这几类大小4K,8K,16K,32K,64K等。簇越大
    存储性能越好,但空间浪费严重。簇越小性能相对越低,但空间利用率高。FAT32格式的文件系统簇的大小默认为4K。

<math xmlns="http://www.w3.org/1998/Math/MathML"> 机械硬盘( H D D )的柱面、磁头、磁头臂说明: \color{#00f}{机械硬盘(HDD)的柱面、磁头、磁头臂说明:} </math>机械硬盘(HDD)的柱面、磁头、磁头臂说明:

txt 复制代码
柱面(Cylinder):
    它是指将每个盘片对应的磁道垂直堆叠起来,形成一个虚拟的圆柱体,这个堆叠的圆柱从外向内,分别为0柱面、1柱
    面...N柱面,越往内柱面的同心圆越小。每个圆柱上的磁头由上而下从"0"开始编号。数据的读/写按柱面进行,即磁
    头读/写数据时首先在同一柱面内从"0"磁头开始进行操作,依次向下在同一柱面的不同盘面即磁头上进行操作,只在同
    一柱面所有的磁头全部读/写完毕后磁头才转移到下一柱面,因为选取磁头只需通过电子切换即可,而选取柱面则必须通
    过机械切换。电子切换相当快,比在机械上磁头向邻近的磁道移动快得多,所以数据的读/写按柱面进行,而不按盘面进
    行。也就是说,一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才会机械的将磁头移到下一个
    扇区开始写数据。读数据也按照这种方式进行,这样就提高了硬盘的读/写效率。当计算机需要读取或写入磁盘上的数据
    时,它会根据柱面号、磁头号和扇区号来确定目标数据的位置。通过控制磁头的移动和盘片的旋转,计算机可以准确地定
    位到特定柱面上的特定扇区,进行数据的读写操作。
磁头(Read/Write Head):
    磁头是用于读取和写入数据的装置,一般盘片的上下都有磁头,位于磁头臂上,每个磁头上都有读和写的操作装置。
磁头臂(Actuator Arm):
    磁头臂是支持磁头的可移动臂,通过电动机或电磁力控制,可以使磁头在盘片上移动到不同的磁道位置。

<math xmlns="http://www.w3.org/1998/Math/MathML"> 机械硬盘( H D D )的主轴电机、控制电路说明: \color{#00f}{机械硬盘(HDD)的主轴电机、控制电路说明:} </math>机械硬盘(HDD)的主轴电机、控制电路说明:

txt 复制代码
主轴电机(Spindle Motor):
    主轴电机用于旋转盘片,使其以高速旋转。通常,机械硬盘的转速为5400转/分钟、7200转/分钟或更高。
控制电路(Controller Board):
    控制电路是机械硬盘的核心电子部分,负责管理数据的读取和写入、调整磁头臂的位置、控制盘片旋转等操作。

(二):机械硬盘的两种寻址方式

<math xmlns="http://www.w3.org/1998/Math/MathML"> C H S 寻址方式: \color{#00f}{CHS寻址方式:} </math>CHS寻址方式:

txt 复制代码
在老式磁盘中,硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有
相同的扇区数。由此产生了所谓的CHS 3D参数(Disk Geometry)。即磁头数(Heads),柱面数(Cylinders),
扇区数(Sectors),以及相应CHS寻址方式。
CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。
    磁头(Heads):
        每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据
        在哪个磁面。
    柱面(Cylinder):
        所有磁片中半径相同的同心磁道构成"柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。
        简单地理解,柱面数=磁道数。
    扇区(Sector):
        将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的
        容量为512字节。
CHS寻址的最大容量由三个参数决定:
    磁头数最大为255 (用 8 个二进制位存储)。从0开始编号。
    柱面数最大为1023(用 10 个二进制位存储)。从0开始编号。
    扇区数最大数 63(用 6个二进制位存储)。从1始编号。
所以CHS寻址方式的最大寻址范围为:
    255 * 1023 * 63 * 512 / 1048576 = 7.837 GB ( 1M =1048576 Bytes )
或硬盘厂商常用的单位:
    255 * 1023 * 63 * 512 / 1000000 = 8.414 GB ( 1M =1000000 Bytes )
CHS寻址的缺点:
    由于要求每个磁道的扇区数相等,而外道的周长要大于内道,所以外道的记录密度要远低于内道,不仅造成了硬盘空间的
    浪费,也限制了硬盘的容量。为了解决这一问题,进一步提高硬盘容量,人们改用等密度结构生产硬盘。也就是说,外圈
    磁道的扇区比内圈磁道多,采用这种结构后,硬盘不再具有实际的CHS参数,寻址方式也改为线性寻址,即以扇区为单位
    进行寻址。但一些古老的软件仍然使用CHS寻址方式(如使用BIOSInt13H接口的软件),为了兼容这样的程序,在硬盘控
    制器内部安装了一个地址翻译器,可以通过它将老式CHS参数翻译成新的线性参数。

通过这个图我们可以看出磁道的最外侧和磁道的最内侧划分的扇区是一样的,相比内侧的扇区更拥挤。

<math xmlns="http://www.w3.org/1998/Math/MathML"> L B A 寻址方式: \color{#00f}{LBA寻址方式:} </math>LBA寻址方式:

txt 复制代码
LBA(Logical Block Addressing)逻辑块寻址模式:
    它是一种抽象的、逻辑上的地址,用于指代硬盘上的数据块。每个数据块都被分配了一个唯一的LBA地址,这个地址是一个
    从0开始的连续的数字序列。每个数据块的大小通常是512字节,但随着技术的发展,这个大小也在不断变化,目前已经达
    到了4KB或更大的大小。所以LBA寻址方式不需要考虑硬盘的物理结构,这是与CHS寻址方式最大的不同之处。
LBA寻址方式的最大数据容量:
    这种是由逻辑块数目和每个逻辑块的大小决定。在传统的28位LBA模式下,逻辑块号是一个28位的数字,可以表示2^28个
    不同的逻辑块地址。而每个逻辑块的大小通常为512字节。因此,在这种模式下,LBA寻址方式最多可以寻址的数据容量为
    2^28个逻辑块乘以每个逻辑块的大小,即2^28*512字节。计算得出,传统的28位LBA模式下,最大可寻址的数据容量为
    128GB(2^28 * 512字节 = 128 * 1024 * 1024 * 1024字节)。
    随着技术的发展,现代的硬盘和操作系统已经支持了48位LBA模式,这大大扩展了LBA寻址方式的数据容量上限。在48位
    LBA模式下,逻辑块号是一个48位的数字,可以表示2^48个不同的逻辑块地址。同时,每个逻辑块的大小仍然通常为512
    字节。因此,在48位LBA模式下,最大可寻址的数据容量为2^48个逻辑块乘以每个逻辑块的大小,即2^48*512字节。
    计算得出,48位LBA模式下最大可寻址的数据容量为128PB
    (2^48 * 512字节 = 128 * 1024 * 1024 * 1024 * 1024 * 1024字节)。
    需要注意的是,实际可用的数据容量可能会受到操作系统和硬盘本身的限制以及文件系统的特性等因素的影响。
    此外,随着技术的不断发展,未来可能会有更高位数的LBA模式出现,进一步扩展LBA寻址方式的数据容量上限。

最后我们看看寻址一圈的速度,一般7200(转/每分钟)的硬盘,每旋转一周所需时间为60(秒)×1000(转换毫秒)÷7200(转)=8.33毫秒 ,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋转半圈)。平均寻道时间和平均选装延迟称为平均存取时间。

最后看看硬盘的容量计算公式:硬盘容量= 盘面(磁头)数 × 柱面数 × 扇区数 × 每扇区字节数

二:硬盘的分区模式

其实我们见到的分区有两种,分别是MBR分区表 (Master Boot Record)和GUID分区表(简称GPT,Globally Unique Identifier)。MBR是早期使用的分区方案,而GPT则是较新的分区方案,现已成为了主流。还有就是未初始化的全新硬盘在装使用之前,必须选择一种模式对系统的分区表进行设置。

(一):MBR分区表

早期的Linux系统为了兼容于Windows的磁盘,因此使用的是支持Windows的MBR(Master Boot Record,主引导记录)的方式来处理开机管理程序与分区表!而开机管理程序记录区与分区表则通通放在磁盘的第一个扇区,这个扇区通常是512字节,所以说第一个扇区512字节会有这两个数据:

  • 主要启动记录区(MBR,Master Boot Record):主引导程序是引导操作系统的程序,占446字节大小。
  • 分区表(DPT,Disk Partition Table):记录整颗硬盘分区的状态,有64字节大小。

我们再详细看看MBR分区表的所占空间的图示:

说到这应该还有一个疑点,为什么MBR最大可以存储2T的容量空间呢?

txt 复制代码
小补充 =》 分区表:
    由于分区表只占用64字节大小,所以最多只能容纳四个分区的记录,这四个分区的记录被称为主要(Primary)分区槽。
    但这四个分区最高可存储2T大小的空间容量,这2T具体是如何被计算的呢?咱们一探究竟:
    第一:我们得知道64个字节大小的空间,平分下来最多每个分区占16个字节。
    第二:我们需要解剖每个字节都干了啥:
        第1字节:引导标志。若值为80H表示活动分区,若值为00H表示非活动分区。
        第2~4字节:本分区的起始磁头号、扇区号、柱面号:
                磁头号 => 第2字节;
                扇区号 => 第3字节的低6位;
                柱面号 => 第3字节高2位+第4字节8位。
        第5字节:分区类型符:
                00H => 表示该分区未用(即没有指定);
                06H => FAT16基本分区;
                0BH => FAT32基本分区;
                05H => 扩展分区;
                07H => NTFS分区;
                0FH => (LBA模式)扩展分区(83H为Linux分区等)。
        第6~8字节:本分区的结束磁头号、扇区号、柱面号:
                磁头号 => 第6字节;
                扇区号 => 第7字节的低6位;
                柱面号 => 第7字节的高2位+第8字节。
        第9~12字节:逻辑起始扇区号 ,本分区之前已用了的扇区数。
        第13~16字节:本分区的总扇区数,我们通过这里可以得知为什么MBR分区最高占用2T容量。
    第三:得知13~16字节的4个字节是存放扇区数的,那么是如何计算最大2T容量的?
        一个字节(8位)最大存储整数2^8-1 = 255
        二个字节(16位)最大存储整数2^16-1 = 65535
        三个字节(24位)最大存储整数2^24-1 = 16777215
        四个字节(32位)最大存储整数2^32-1 = 4294967295
        可以得出一共可以存放4294967295个扇区,一个扇区最大可以存放512个字节,那么就容易了
        (2^32-1)*512(扇区大小) ÷ 1024(KB) ÷ 1024(MB) ÷ 1024(GB) ÷ 1024(TB) = 1.999TB

<math xmlns="http://www.w3.org/1998/Math/MathML"> 如何在 M B R 模式下分区: \color{#00f}{如何在MBR模式下分区:} </math>如何在MBR模式下分区:

我们既然知道了在MBR的分区模式下最多只能分四个区,所以分区时,若分区超过4个以上的,那么只能先构建三个主分区,外加一个扩展分区,我们可以在扩展分区内构建许多个逻辑分区。

(二):GUID分区表

在传统的主引导记录(MBR)分区表已经存在多年,它的局限性逐渐显现出来。为了克服这些限制,并提供更大、更灵活和更可靠的磁盘分区方案,GUID分区表(简称GPT)应运而生。它是EFI(可扩展固件接口标准)的一部分,用来替代BIOS中的主引导记录分区表。但因为MBR分区表不支持容量大于2.2TB的分区,所以也有一些BIOS系统为了支持大容量硬盘而用GPT分区表取代MBR分区表。

txt 复制代码
什么是GUID分区表(GPT):
    简介:GUID分区表是一种用于磁盘分区的标准,它采用全球唯一标识符(GUID)来标识分区和磁盘。
    背景:传统的MBR分区表由于其32位的限制,无法支持超过2TB的磁盘容量,且每个磁盘只能有四个主分区。
         GPT被引入以解决这些限制。
GPT的特点和优势:
    支持更大的磁盘容量:
        GPT支持超过2TB的磁盘容量,可以满足现代大容量磁盘的需求。
    更灵活的分区方式:
        GPT支持128个主分区,且不再区分扩展分区和逻辑分区,简化了磁盘布局。
    数据冗余和完整性校验:
        GPT在分区表的末尾存储了备份分区表,以增强数据冗余和完整性校验的能力,提高了数据的安全性。
    兼容性:
        GPT与新一代操作系统(如Windows 10、macOS等)和UEFI(统一固件接口)兼容性良好。
GPT与MBR的对比:
    分区数量和大小限制:
        MBR最多支持四个主分区,或三个主分区和一个扩展分区。GPT支持128个主分区,且没有这样的限制。
    磁盘容量限制:
        MBR最大支持2TB的磁盘容量,而GPT可以支持非常大的磁盘容量。
    启动方式:
        MBR使用主引导记录(Master Boot Record)来引导操作系统,而GPT使用UEFI固件提供的Boot Manager功能。

总结:GUID分区表(GPT)作为新一代磁盘分区方案,克服了传统MBR分区表的许多限制,提供了更大、更灵活和更可靠的磁盘分区方式。它已经被广泛采用,并得到现代操作系统和UEFI固件的支持。通过理解和应用GPT,我们可以更好地管理和利用现代存储设备的潜力。

相关推荐
sun0077007 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
吃肉不能购9 小时前
Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪
运维·yolo·自动化
学Linux的语莫9 小时前
Ansible使用简介和基础使用
linux·运维·服务器·nginx·云计算·ansible
qq_312920119 小时前
docker 部署 kvm 图形化管理工具 WebVirtMgr
运维·docker·容器
学Linux的语莫9 小时前
搭建服务器VPN,Linux客户端连接WireGuard,Windows客户端连接WireGuard
linux·运维·服务器
黑牛先生9 小时前
【Linux】进程-PCB
linux·运维·服务器
Karoku0669 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
安迁岚11 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
打码人的日常分享11 小时前
商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
运维·安全·web安全·系统安全·规格说明书