当前位置:首页>Linux>Linux存储--硬盘数据读取方式

Linux存储--硬盘数据读取方式

  • 2026-10-11 08:03:41
Linux存储--硬盘数据读取方式

    上一篇文章《Linux存储-硬盘的类型和命名规则》描述了硬盘的类型按材质可以分为机械硬盘和固态硬盘。那么Linux操作系统是以什么方式对硬盘进行读写的呢?先说结论:以扇区为单位对硬盘进行读写数据。

什么是扇区

    扇区既有硬件物理概念,也有逻辑概念,也就是说物理扇区是硬件参数,逻辑扇区是协议参数。从操作系统角度来看,固态硬盘和机械硬盘一样都是块设备,都按 512B 或者4KB逻辑扇区寻址。

  • 物理扇区

   传统机械硬盘才是真实物理扇区。机械硬盘主要由磁头、盘片、柱面、磁道等组成,采用CHS(柱面号(Cylinder) +磁头号(Header) + 扇区号(Sector) 寻址方式定位一个物理扇区,通常是512B。

  • 逻辑扇区

    固态硬盘没有磁头、盘片、柱面这些概念,而是由页(最小读取单位,通常是4kB-16kB)、块(由多个页组成)、平面或者晶片(多个块组成)组成,但硬盘接口与协议仍沿用扇区逻辑,采用LBA一位逻辑编号标识。操作系统下发LBA编号后,固态硬盘里的控制器会通过(FTL文件转换层)进行转换。

什么是LBA

     LBA是逻辑块寻址(Logical Block Address),操作系统把整块硬盘从头到尾按扇区依次编号,从 0 开始,以LBA0、LBA1、LBA2数字类推。每个编号就是一个 LBA 地址,一个LBA默认对应1个扇区(常见512 字节/ 4KB)。LBA0就是整块硬盘的第1个逻辑扇区,硬盘最开头的第一个512 字节,不管是机械盘还是固态硬盘,LBA0 永远是硬盘的最开头。

    通常如果采用MBR分区表则LBA0整个就是主引导记录MBR(引导代码+分区表+55AA标志)。如果采用GPT分区表则LBA0依然保留一个保护性MBR,防止使用旧的分区工具时误删GPT分区表,真正的GPT表头从LBA1开始。

     也就是说硬盘主控组件内部会做自动转换,操作系统下发LBA地址→硬盘主控自动翻译成物理CHS或者闪存物理单元→完成读写,操作系统永远只用LBA,不用关心硬盘物理结构是怎么样的。

操作系统对硬盘的读写流程

  • 机械硬盘读写流程:

1.操作系统下发LBA地址

2.硬盘控制器将LBA转换为CHS 物理地址

3.磁头臂移动到目标柱面、磁道

4.盘片旋转等待目标扇区转到磁头下

5.磁头感应将磁信号转为电信号

6.ECC校验纠错并将数据传回操作系统

  • 固态硬盘读写流程:

1.操作系统下发LBA 地址(和机械硬盘完全一样)

2.固态硬盘主控器通过FTL映射表将LBA转换对应物理块、页、晶片

3.电路直接选中目标闪存页

4.读取晶体管电荷状态解析为0/1信号

5.ECC纠错、缓存调度传回操作系统

  • 固态硬盘和机械硬盘读写区别:

名称

机械硬盘

固态硬盘

LBA

LBA->CHS->物理

LBA->FTL->物理

时延

毫秒级

微妙级

读取方式

机械运动,电磁感应

电路读取

物理地址

CHS(柱面、磁头、扇区)

晶片、块、页

寻址单元

扇区512B或者4kB

页,4kB-16KB

存储介质

盘片

NAND闪存

Linux查看扇区大小的方法

# Linux查看逻辑扇区大小 cat/sys/block/sda/queue/physical_block_size (sda根据实际)# Linux查看物理扇区大小 cat/sys/block/sda/queue/logical_block_size(sda根据实际)

核心点

  • 传统机械硬盘以512B为扇区,现代新硬盘尤其是固态硬盘大多是4KB为扇区。

  • 系统对硬盘读写必须按整扇区操作,哪怕只改1个字节数据,系统也会读整个扇区,修改,整个扇区写回。

  • 操作系统、分区表、磁盘坏道、dd读写、磁盘寻址都是按LBA编号定位扇区。

  • 不管是机械硬盘还是固态硬盘,只要使用MBR分区表,LBA0都是第一个扇区存MBR。

  • 操作系统、BIOS/UEFI不感知硬盘的结构是固态盘还是机械盘。

最新文章

随机文章