手机闪存也有寿命:eMMC / UFS 健康检测实战


📝 本文由 DeepSeek(AI) 根据博主本人的项目/设备检测记录整理总结,部分表述可能与实际略有出入,仅供学习参考。

手机里的存储芯片(eMMC / UFS)和 SSD 一样,闪存颗粒是有**擦写寿命(P/E 循环)**的。用了几年之后,寿命可能悄悄耗尽——但系统平时根本看不出来,直到某天突然开始掉盘、文件损坏、变只读。

这篇记录一下怎么给手机做”存储寿命体检”,包括 eMMC 和 UFS 两种方案的寄存器读取方法。

先分清 eMMC 和 UFS

项目 eMMC UFS
常见于 老机型、入门机 近几年的中高端机
接口速度 相对慢(如 HS400 ~400MB/s) 快很多
寿命寄存器 ext_csd UFS Health Descriptor
读取难度 需 root 无 root 也能读(走 bugreport)

两者都有”寿命寄存器”,厂商在生产时就把消耗值写进去,我们只需把它读出来。

eMMC:读 ext_csd

eMMC 的寿命信息在 ext_csd(Extended Card Specific Data) 寄存器里,需要 root 权限读取:

adb shell "su -c 'cat /sys/kernel/debug/mmc0/mmc0:0001/ext_csd'"

重点看三个字段:

字段 偏移 含义
PRE_EOL_INFO 0x10B 备用块消耗比例(预判寿命终点)
DEVICE_LIFE_TIME_EST_TYP_A 0x10C MLC/TLC 用户区擦写寿命
DEVICE_LIFE_TIME_EST_TYP_B 0x10D SLC 缓存区擦写寿命

取值范围速查:

  • 0x00 未定义;0x01 消耗 0%10%;0x02 10%20% …… 0x0A 90%~100%
  • 0x0B = 超出最大寿命,芯片按标称已”死透”,只剩控制器用备用块硬撑

PRE_EOL_INFO 只有三个值:0x00 正常、0x01 警告(备用块消耗 80%~100%,进入寿命末期)、0x02 危急(备用块耗尽,新坏块直接丢数据)。

用 Python 快速解析(把 cat ext_csd 输出的 hex 存下来):

hex_data = '...'  # 从 cat ext_csd 获取的 512 字节 hex
data = bytes.fromhex(hex_data)

print(f"PRE_EOL_INFO:  0x{data[267]:02X}")
print(f"LIFE_TIME_A:   0x{data[268]:02X}")
print(f"LIFE_TIME_B:   0x{data[269]:02X}")

注意:ext_csd 是整块 512 字节的 hex 字符串,偏移 0x10B 对应列表下标 267,以此类推。

UFS:读 Health Descriptor

UFS 的寿命信息叫 UFS Health Descriptor,可惜没有 root 基本没法直接从命令行读 sysfs。小米手机有个便捷办法:

  1. 拨号盘输入 *#*#284#*#* 生成 bugreport
  2. 解压 zip,找 bugreport-*.txt 主文件
  3. 搜索 UFS health desc 区块
Select-String -Path "bugreport-*.txt" -Pattern "UFS health desc|bDeviceLifeTimeEst|bPreEOLInfo" -Context 0,3

重点字段:

字段 偏移 含义
bPreEOLInfo 0x2 备用块状态:0x01 正常,0x02 警告,0x03 危急
bDeviceLifeTimeEstA 0x3 SLC 区擦写寿命
bDeviceLifeTimeEstB 0x4 MLC/TLC 区擦写寿命

注意 UFS 和 eMMC 的取值含义不同:UFS 的 0x01 表示”几乎全新(0%~10%)”,而 eMMC 里 0x01 同样是正常但含义语境不同,别混着看。

实战案例

老机(约 7 年):三星 eMCP 颗粒,TYP_A 和 TYP_B 都是 0x0B,寿命寄存器显示已超出最大寿命;PRE_EOL_INFO 为 0x01(备用块还剩一点)。但 dmesg 里坏块、I/O 错误全部为 0,文件系统检查也通过——典型的”静默老化”:底层 NAND 早已过保,控制器还在用备用块掩盖错误,随时可能滑向 0x02

新机:SK 海力士 UFS uMCP,bPreEOLInfo / bDeviceLifeTimeEstA / B 全为 0x01,接近全新。

同一个”寿命”话题,两种截然不同的状态。

结论与建议

  • 闪存寿命耗尽不等于立刻报废,但数据安全性直线下降
  • 老设备如果寿命寄存器已经 0x0B / 0x02,请把重要数据及时转移、定期备份,别只存那一台
  • 新设备也别掉以轻心:经常刷机、大量写入、长期高温都会加速寿命消耗
  • eMCP / uMCP 是闪存与内存合封的芯片,坏了只能换主板,基本没有单换闪存的可能

建议每半年到一年给自己手机做一次”体检”,提前知道寿命状态,比出事后再救数据安心得多。


  目录