news 2026/6/12 9:51:52

别再只会用fdisk了!Linux下查看eMMC/UFS存储设备分区的5个高级命令与5个系统文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再只会用fdisk了!Linux下查看eMMC/UFS存储设备分区的5个高级命令与5个系统文件

突破传统工具边界:Linux下eMMC/UFS设备深度诊断全攻略

当嵌入式设备或服务器出现存储异常时,大多数工程师的第一反应是打开fdisk或lsblk。但面对复杂的eMMC/UFS存储结构,这些基础工具往往只能展示冰山一角。上周调试一块工控主板时,我发现系统突然无法识别启动分区,而fdisk却显示一切正常——这促使我系统整理了这套深度诊断方法论。

1. 为什么常规工具会失效?

eMMC 5.1标准引入的HPB(Host Performance Booster)特性会在物理存储层创建隐藏缓存区,而UFS 3.1的WriteBooster功能则会动态分配高速缓冲分区。这些高级特性导致传统分区工具可能无法识别完整的存储拓扑结构。

典型误判场景

  • 显示的分区总容量小于芯片标称值
  • 缺失boot0/boot1等关键分区信息
  • 无法识别厂商保留的RPMB(Replay Protected Memory Block)区域
  • 误报未格式化空间实际为Over-Provision预留区

经验提示:当发现设备实际可用空间与规格参数存在10%以上差异时,极可能存在隐藏管理分区

2. 内核级探测五剑客

2.1 /proc/partitions的玄机

这个看似简单的文件实则是块设备信息的原始矿藏。通过分析其输出结构,我们可以获取到传统工具忽略的关键细节:

cat /proc/partitions | grep mmcblk major minor #blocks name 179 0 15388672 mmcblk2 179 1 65536 mmcblk2p1 179 32 4096 mmcblk2boot0

字段解密

  • major: 179表示MMC/SD设备类型
  • minor: 32的步进值暗示存在boot分区
  • #blocks: 实际物理块数量(包括坏块)

2.2 /sys/class/block的拓扑勘探

这个sysfs接口如同存储设备的基因图谱,完整呈现设备间的层级关系:

ls -l /sys/class/block/mmcblk2/ total 0 lrwxrwxrwx 1 root root 0 Jun 1 10:00 device -> ../../../mmc_host/mmc2/mmc2:0001 drwxr-xr-x 2 root root 0 Jun 1 10:00 holders -r--r--r-- 1 root root 4096 Jun 1 10:00 size -r--r--r-- 1 root root 4096 Jun 1 10:00 wb_cache_size

关键子目录解析:

  • device: 指向物理设备在系统中的完整路径
  • holders: 显示正在使用该设备的驱动模块
  • size: 以512字节为单位的原始容量
  • ext_csd: eMMC特有的扩展寄存器内容(需root)

2.3 dmesg的时间旅行术

内核环缓冲区记录着设备从初始化到当前的所有关键事件:

dmesg | grep -i mmc [ 2.381044] mmc2: new HS400 Enhanced strobe MMC card at address 0001 [ 2.382917] mmcblk2: mmc2:0001 AJTD4R 14.7 GiB [ 2.384672] mmcblk2boot0: mmc2:0001 AJTD4R partition 1 4.00 MiB

关键事件线索

  • HS400 Enhanced strobe: 设备支持的传输模式
  • partition 1 4.00 MiB: 系统自动识别的boot分区
  • AJTD4R: 设备内部代号(可用于查询厂商文档)

2.4 /dev/block的符号迷宫

这个目录下的设备节点映射关系能揭示系统识别的真实存储结构:

ls -l /dev/block/by-path/ total 0 lrwxrwxrwx 1 root root 13 Jun 1 10:00 pci-0000:00:1d.0-usb-0:1:1.0-scsi-0:0:0:0 -> ../../sda lrwxrwxrwx 1 root root 15 Jun 1 10:00 platform-soc@0:bus@30800000-mmc2 -> ../../mmcblk2

实用技巧

  • by-path: 显示设备物理连接拓扑
  • by-id: 包含设备唯一序列号
  • by-uuid: 按文件系统UUID索引

2.5 /proc/mounts的隐藏真相

这个实时挂载表会暴露所有已挂载分区,包括临时文件系统:

grep mmc /proc/mounts /dev/mmcblk2p2 / ext4 rw,relatime 0 0 /dev/mmcblk2p6 /cache ext4 rw,nosuid,nodev 0 0

高级分析点

  • 挂载选项反映分区的实际使用场景
  • 缺失的分区可能被initramfs临时挂载
  • 重复挂载提示可能存在文件系统损坏

3. 专业工具三板斧

3.1 hwinfo的硬件侦探

这个全能硬件探测器能提取存储设备的完整参数集:

hwinfo --block Model: "Samsung KLUBG4G1CE-B0B1" Vendor: "Samsung" Size: 32GB Firmware Version: "0x0" Physical Sector Size: 4096 Logical Sector Size: 4096 RPMB Size: 16MB Enhanced Area Size: 512MB

关键参数

  • RPMB Size: 安全存储区域容量
  • Enhanced Area: HPB功能专用缓存区
  • Firmware Version: 与兼容性问题直接相关

3.2 lshw的拓扑图谱

提供设备连接关系的树状视图,特别适合复杂存储架构:

lshw -class disk -businfo Bus info Device Class Description ==================================================== pci@0000:00:1d.0 /dev/sda disk 256GB NVMe SSD platform@30800000 /dev/mmcblk2 disk 32GB eMMC

应用场景

  • 区分内置存储和外接设备
  • 识别PCIe/NVMe与eMMC的混合配置
  • 验证设备是否出现在正确总线

3.3 parted的智能解析

相比fdisk,这个工具对新型存储更友好:

parted /dev/mmcblk2 unit s print Number Start End Size File system Name Flags 1 16384s 147455s 131072s fat32 boot boot, esp 2 1835008s 30777343s 28942336s ext4 rootfs 3 147456s 245759s 98304s recovery

优势特性

  • 支持非512字节扇区设备
  • 准确识别GPT分区表
  • 显示分区命名标签

4. 实战诊断路线图

4.1 容量异常排查流程

当发现可用空间不符预期时,建议按以下步骤排查:

  1. 基础验证

    cat /sys/class/block/mmcblk2/size

    计算:size * 512 / 1024^3获取实际GB数

  2. 保留区检测

    mmc extcsd read /dev/mmcblk2 | grep -E 'ENH_SIZE|RPMB_SIZE'
  3. 坏块检查

    dmesg | grep -i bad

4.2 分区丢失应急方案

当系统无法识别已知分区时,可尝试:

步骤一:强制重扫

echo 1 > /sys/class/block/mmcblk2/device/rescan

步骤二:手动注册

partprobe /dev/mmcblk2

步骤三:内核事件触发

udevadm trigger --action=change

4.3 性能调优参数解析

通过sysfs接口可调整的eMMC/UFS关键参数:

参数路径默认值优化建议风险等级
/sys/class/block/mmcblk2/queue/nr_requests128256(高并发场景)
/sys/class/block/mmcblk2/device/hs400_delay01(长走线板)
/sys/class/block/mmcblk2/device/pwr_clk_scale5075(高性能)

5. 高级技巧与陷阱规避

5.1 安全分区读写操作

访问RPMB等安全区域需要特殊授权:

mmc rpmb read-block /dev/mmcblk2 0x0 1 /tmp/key.bin --key=/etc/rpmb_key

注意事项

  • 必须提供预先烧录的密钥
  • 每次写入需要计数器递增
  • 错误的操作可能导致分区锁定

5.2 芯片寿命监控

通过SMART参数预测剩余寿命:

mmc extcsd read /dev/mmcblk2 | grep LIFE Device life time estimation type A: 0x01 Device life time estimation type B: 0x01

解读指南

  • 0x01=0-10%损耗
  • 0x0A=90-100%损耗
  • Type A/B对应不同工作模式

5.3 固件调试技巧

捕获存储控制器的底层调试信息:

echo 8 > /proc/sys/kernel/printk dmesg -w > mmc_debug.log & mmc test write /dev/mmcblk2

关键日志

  • CMD53/CMD54等SD协议指令
  • CRC校验错误计数
  • 重传请求事件

在最近一次数据中心级SSD故障排查中,正是通过组合分析dmesg的时间戳与mmc test的CRC错误模式,最终定位到主板供电不稳导致的信号完整性问

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 9:49:53

51单片机智能密码锁的‘软’升级:如何用C语言优化你的随机数算法与状态机设计

51单片机智能密码锁的算法优化与状态机重构实战 在嵌入式系统开发中,密码锁是一个经典而实用的项目。许多开发者能够快速实现基础功能,但往往忽视了代码的可维护性和算法的健壮性。本文将深入探讨如何通过优化随机数生成算法和重构状态机设计&#xff0c…

作者头像 李华
网站建设 2026/6/12 9:47:53

大模型 Token 缓存与语义去重:后端成本优化的工程实践

大模型 Token 缓存与语义去重:后端成本优化的工程实践一、Token 消耗的"温水煮青蛙":大模型后端的隐性成本 大模型应用后端面临一个严峻的成本问题:相同或相似的请求被重复发送到 LLM,每次都消耗完整的 Token。用户反复…

作者头像 李华
网站建设 2026/6/12 9:46:01

旋转数组里找数,AI 用二分写了 3 版才写对,差距在哪

读完本文你将了解: 旋转排序数组的二分查找核心思路 | AI 从暴力到最优的 3 版演进 | 面试中的关键边界处理📋 题目 原题: 给定一个经过旋转的升序数组 nums(如 [4,5,6,7,0,1,2])和一个目标值 target,在 O(…

作者头像 李华
网站建设 2026/6/12 9:43:56

X-AnyLabeling一键可用的YOLOX-s轻量ONNX自动标注方案

本文还有配套的精品资源,点击获取 简介:直接放进X-AnyLabeling就能用的YOLOX-s自动标注组合:包含已导出的yolox_s.onnx模型文件和配套yolox_s.yaml配置文件,无需转换、不需编译,复制到软件models目录后,…

作者头像 李华
网站建设 2026/6/12 9:39:52

推荐系统范式迁移:从预测喜欢到支持决策

1. 项目概述:这不是在调参,是在重建推荐系统的底层认知“Reimagining the Recommendation Engine”——这个标题里没有一个技术名词,却比任何“TransformerGraphSAGEMulti-Task Learning”的堆砌更让人脊背一紧。我在电商中台干了七年推荐系统…

作者头像 李华