概述与定义

SPI Flash

接口协议(芯片与主机的通信方式)

NOR Flash

NOR Flash是一种非易失性存储器,采用"或非门"(NOR)架构。它的特点是支持随机访问,可以直接在芯片上执行代码(XIP),常用于存储启动代码、固件等对可靠性要求较高的应用。

NAND Flash

NAND Flash同样是非易失性存储器,采用"与非门"(NAND)架构。它以页为单位进行读写操作,以块为单位进行擦除,具有高密度、低成本的特点,主要用于大容量数据存储。

架构与原理对比

NOR Flash

NOR 和 NAND 最核心的区别

对比项NOR FlashNAND Flash
典型产品W25Q256JV、GD25Q256eMMC 内部 NAND、SPI NAND、Raw NAND
读取方式类似内存,可随机读取通常按 Page 读取
写入方式Page ProgramPage Program
擦除方式Sector / BlockBlock
随机读性能好相对差
顺序读写一般好
XIP 直接运行代码支持,常见通常不直接支持
坏块出厂通常不允许坏块/使用上简单允许存在坏块
ECC通常控制器负担较小通常必须有 ECC
软件管理简单复杂
容量小到中等很大
单位容量价格贵便宜
常见用途Bootloader、Kernel、固件、配置大容量数据、录像、文件系统

硬盘

硬盘的层次关系是:

硬盘(/dev/sda) ↓ 分区表(MBR/GPT) ↓ 分区(/dev/sda1 /dev/sda2 …) ↓ 文件系统(ext4/FAT32/DVRFS…) ↓ 文件(SQLite数据库、录像文件…)

​ 磁盘分区表常见有两种格式:MBR(Master Boot Record) 和 GPT(GUID Partition Table)。它们主要在 容量支持、分区数量、启动方式、可靠性 等方面有明显区别。

分区表

MBR

MBR 是传统的分区表格式,如果存在MBR的话,那么它占用第一个扇区的512个字节,前446个字节为MBR启动代码(这里不关心),接下来16*4个字节为磁盘分区表,每个分区的信息要占16个字节,所以,MBR 主分区表只有 4 个条目;其中一个可作为扩展分区,再通过 EBR 链描述多个逻辑分区,最后两个字节是结束标识0x55AA

特点

  • 使用 512 字节逻辑扇区时,32 位 LBA 带来的常见容量边界约为 2 TiB;不能脱离逻辑扇区大小把它当作固定上限

  • 只能保存4个主分区

文件系统

FAT32

错误

硬盘坏道

ata1.00: exception Emask 0x0 SAct 0x800 SErr 0x0 action 0x0
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/01:58:fb:02:71/00:00:2f:00:00/40 tag 11 ncq dma 512 in
         res 41/40:01:fb:02:71/00:00:2f:00:00/00 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
sd 0:0:0:0: [sda] tag#11 Sense Key : 0x3 [current]
sd 0:0:0:0: [sda] tag#11 ASC=0x11 ASCQ=0x4   ← UNRECOVERED READ ERROR, AUTO REALLOCATE FAILED
blk_update_request: I/O error, dev sda, sector 795935483
ata1: EH complete                          ← 本段日志未显示 hard reset,不能据此证明链路正常
  1. 当前错误主要指向不可纠正的介质读取错误;不能据此排除线缆、供电或背板问题。

UNC 和上述 sense 信息支持“本次读取无法纠正”的判断;SErr 0x0 只表示该次记录未报告相应 SATA 链路错误。需结合完整日志、SMART 与交叉替换测试定位,不能凭这一段日志证明链路绝对健康。

U盘

可以通过 cat /sys/block/sdb/removable 初步判断,removable表示内核认为这个该块设备的存储介质是否可移除。

  • 1 :存储介质被标记为可移除
  • 0:存储介质被标记为不可移除
设备类型removable是否 USB
普通 U 盘通常为 1,也可能为 0是
USB 移动硬盘通常为 0是
USB 读卡器通常为 1是
SATA 硬盘通常为 0否
SD 卡设备通常为 1不一定

参考:libATA 错误处理。