详细分析磁盘物理结构和各种常用的接口SATA SAS eSATA等

一张包含Linux 企鹅图标的图片

一、linux 磁盘存储设备

1.1 磁盘存储的物理结构

为什么我们要了解磁盘存储结构,现在的HDD和SSD在Linux 上的显示,依旧是以一种原始结构展示出来。因此,我们依旧需要了解什么扇区/柱面/磁头/磁道等概念。

sudo fdisk -l # 比如查看基本的磁盘分区参数
Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

1.2 HDD物理结构

注意:SSD物理结构尽管完全不同,但是依旧保持了这种的表达形式。这就是为什么物理磁盘没有柱面等结构依旧有这样的表达。

这里回答了为什么我们使用的SSD磁盘在一些系统中依旧有柱面相关HDD等概念。

一张HDD磁盘结构的说明截图

机械结构主要包括:主轴马达/机械臂/磁头/碟片

一张关于磁盘的逻辑结构图


扇区(Sector):磁盘上最小的物理存储单位

磁道(track):同一个同心圆的扇区组成的圆

柱面(cylinder):一个磁盘里有多个碟片,所有的磁碟上的同一个同心圆磁道就组成了一个柱面。

1.2.1 实例解读

Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

GB吉比字节是数字信息的单位字节(B)的倍数。二进制前缀gibi(Gi)表示2的30次方,因此1 gibibyte等于1073741824 bytes = 1024 mebibyte(MiB)。吉比字节由符号GiB表示。

1048576000 sectors :表示总共有1048576000 个扇区

Units: sectors of 1 * 512 = 512 bytes表示每个扇区的大小单位,某些情况下展示cylinder 的大小(这是为了兼容性)

Sector size (logical/physical): 512 bytes / 512 bytes 表示逻辑扇区和物理扇区的大小

物理扇区和逻辑扇区

逻辑扇区大小:这表示操作系统在阅读或写入数据时与之交互的扇区大小。

物理扇区大小:这表示磁盘本身物理扇区的实际大小。在这种情况下,它也被称为512字节。现代硬盘驱动器和SSD通常具有物理扇区空间。

如果这些值相同(逻辑扇区大小和物理扇区大小均为512字节),则表明磁盘使用一致的扇区大小

目前的扇区的大小是:512B,随着数据量的扩大有的是4KB的大小。

补充:设备的字节单位问题GB =?GiB 问题

fdisk 更多的输出结果,请直接参考的fdisk 的参考手册:https://man7.org/linux/man-pages/man8/fdisk.8.html

二、磁盘分区

为了适应高数据量4KB扇区的扇区。有了新的分区方式GPT模式。

  • MBR分区(MS-DOS兼容模式)
  • 新方式GPT模式

2.1 常见磁盘传输接口类型

2.1.1 接口概述

  • SATA (主流接口,包括 SATA1.0/2.0/3.0)
  • SAS(主流接口,高端设备口 1.0/2.0/3.0)
  • IDE (淘汰)
  • SCSI(淘汰)
  • USB(USB盘)
  • eSATA(SATA扩展)
  • m.2(专为笔记本口)

2.1.2 SATA

SATA(Serial Advanced Technology Attachment)是一种用于连接计算机内部硬盘驱动器、固态硬盘以及光驱等存储设备的接口标准。它是一种串行数据传输接口,取代了早期的并行ATA(IDE)接口,为数据传输提供了更高的速度和性能。

固态硬盘(SSD)和机械硬盘(HDD)支持: SATA接口广泛用于连接各种类型的硬盘驱动器,包括传统的机械硬盘和更快速、耐用的固态硬盘。

总结,SATA作为主流接口,优点很多,发展很快包括:1.0/2.0/3.0/等。

个人电脑上一般会有接口

识别样式

一张SATA硬盘的接口图片

2.1.3 SAS接口

SAS是一种功能强大、用途广泛的存储接口,非常适合要求高性能、可扩展性和可靠性的苛刻应用。虽然其较高的成本和复杂性可能不适合所有情况,但它仍然是数据中心和其他数据为王的关键任务环境的首选

一个个人电脑上并不配置此接口。SAS 发展到1.0/2.0/3.0 速度更快,当然也更加昂贵。

2.1.4 IDE 接口

IDE已经被SATA替代了,这里并不做讨论,因为一般也见不到了。

IDE(Integrated Drive Electronics)接口,也称为PATA(Parallel ATA),曾经是连接计算机主板和硬盘驱动器之间的标准接口。然而,随着技术的发展和性能需求的提升,IDE接口已经逐渐被更先进的接口标准所取代,特别是SATA和SAS接口。

在现代计算机中,IDE接口已经相对较少见,而SATA接口成为连接内部硬盘驱动器的主流标准。SATA接口具有更高的传输速度和更好的性能,同时支持热插拔和更紧凑的数据线,这些特性相比IDE接口更加优越。

另外,固态硬盘(SSD)的普及也加速了IDE接口的淘汰。大多数SSD采用SATA或更先进的接口标准(比如NVMe),因为这些接口能够更好地发挥固态硬盘的性能优势。

2.1.4 SCSI接口

在消费级市场和普通家用计算机中,SCSI接口已经相对较少见。SATA和SAS等接口标准更加普及,因为它们提供了更高的性价比和易用性。

SCSI接口有多种类型,包括并行SCSI(Parallel SCSI)和串行SCSI(Serial SCSI)。串行SCSI又被称为SAS(Serial Attached SCSI),它是SCSI的现代化版本,提供了更高的性能和可靠性。

2.1.5 USB

USB盘就是我们使用接口,这里不再赘述。

2.1.6 eSATA接口

eSATA是一种扩展SATA 接口,实际上就是外置式SATA II规范,是业界标准接口Serial ATA(SATA)的延伸,用来连接外部而不是内部SATA 设备。 简单的说就是通过eSATA 技术,让外部I/O 接口使用SATA2 功能。

eSATA它不牵涉到底层的复杂技术,只需要完善下接口部分而已,最终的应用形式显然是需要把硬盘配置在某种盒状装置内的,虽然SATA硬盘本身支持热插拔。业界对eSATA接口的描述就是,基于标准的SATA线缆和接口,连接处加装了金属弹片来保证物理连接的稳固性,而eSATA线缆能够插拔2000次,这也为eSATA抢班夺权创造了很好的条件。

随着USB 3.0和更高版本的普及,eSATA的使用减少,但对于需要更高速、更可靠的数据传输的场景,eSATA仍然是一种有用的外部存储连接接口。

尽管eSATA只是SATA接口的延伸,而且制造商并不需要对SATA的协议和处理芯片进行任何修改,但要确保将SATA安全地移到机箱外,并通过SATA-IO国际组织的审核,必然有许多地方需要加以改进。

这种接外置接口的东西,现在随着USB发展,速度越来越快,基本上都被淘汰了。

一张eSATA与SATA接口的对比图

2.1.7 M.2接口

M.2原名为NGFF接口,标准名称为PCI Express M.2 Specification。它是为超极本(Ultrabook)量身定做的新一代接口标准,以取代原来基于mini PCIe改良而来的mSATA固态硬盘。无论是更小巧的规格尺寸还是更高的传输性能M.2都远胜于mSATA。

M.2接口支持多种数据传输协议,如SATA、PCIe、USB、HSIC、UART、SMBus等。其中包括SATA(以传统的SATA III速度运行)和PCI Express(PCIe),其中PCIe x2和PCIe x4速度版本较为常见。

M.2接口是为超极本(Ultrabook)量身定做的新一代接口标准,以取代原来的mSATA接口。

一张m.2 NMVe 接口和m.2 SATA接口硬盘图片

M.2 SATA接口 指的是M.2插槽上使用的SATA协议,用于连接SATA SSD。这意味着SSD通过M.2插槽使用SATA接口协议进行通信,这些SSD通常采用SATA III接口标准,传输速度受到SATA III的限制(理论上最高速度为6Gbps)。

2.2 传输接口总结

我们常见的接口有USB优盘/SATA接口(个人笔记本)/SAS 接口(高性能服务器配置)。其他接口基本被淘汰了。

2.3 协议

主流硬盘使用的协议主要包括AHCI、NVMe和SCSI。其中,AHCI是硬盘的主流协议,被广泛用于民用场合。

而NVMe协议则主要应用于超高性能和企业级硬盘场合。

AHCI(Advanced Host Controller Interface)是一种硬盘接口标准,它允许存储驱动程序启用高级串行ATA功能,如本机命令队列和热插拔。AHCI通过包含一个PCI BAR(基址寄存器),来实现原生SATA功能。由于AHCI统一接口的研发成功,使得支持串行ATA产品的开发工作大为简化。

具体来说,AHCI技术规范提供了一种通用的硬盘接口规范,该规范可以让SATA存储设备激活高级SATA功能,例如原生指令队列及热插拔。因此,AHCI协议实际上定义了如何传输SATA协议的数据。

三、参考

[1] https://man7.org/linux/man-pages/man8/fdisk.8.html


原创内容,禁止转载!

发表评论

0 评论