md 元数据是什么
mdadm 管理的是 Linux 内核 md 软 RAID,它在每块成员盘上写一段元数据(superblock),记录阵列 UUID、RAID 级别、成员序号、设备角色(active/spare/failed)以及事件计数(events)。内核靠这段元数据把一堆裸盘认成同一个阵列:UUID 对不上的盘不会被凑到一起,事件计数偏低的盘会被判定为掉线后重新加入。0.90 系列把元数据放在设备末尾,1.x 系列改到设备头部,位置差异会直接影响救援、系统引导与数据恢复三件事。
基本信息
| 适用平台 | Linux(mdadm 3.x / 4.x,内核 md 模块) |
|---|---|
| 元数据版本 | 0.90、1.0、1.1、1.2(1.2 为当前默认) |
| 查看命令 | mdadm --examine <设备> |
| 创建时指定 | --metadata= |
| 权限要求 | root |
典型使用场景
- 新建阵列时显式声明版本,保证同一台机器上的阵列格式统一
- 救援或重装环境里先 --examine 读元数据,确认盘还能被识别、事件计数是否为最新
- 系统盘做 RAID1 时评估元数据位置,避免干扰引导加载器读取
- 把整组磁盘从旧机器迁到新机器前,确认新系统的 mdadm 能按原版本组装
- 扩容或重加成员盘前核对版本,混版本会被直接拒绝
版本对照
| 版本 | 超级块位置 | 特点 |
|---|---|---|
| 0.90 | 设备末尾 64KB | 老格式,最多 28 个组件设备,成员盘不支持大于 2TB |
| 1.0 | 设备末尾 | 新格式,位置与 0.90 相同,便于兼容旧习惯 |
| 1.1 | 设备头部(0 偏移) | 少见,元数据紧贴设备起始 |
| 1.2 | 头部偏移 4K | 当前默认,避开引导块,引导兼容性最好 |
查看与指定版本
查看与指定版本
mdadm --examine /dev/sdb1 | head -20 # 从单块成员盘读元数据,确认版本与阵列 UUID
mdadm --examine --brief --scan # 汇总扫描结果,救援时用来还原阵列清单
mdadm --detail /dev/md0 | grep -i metadata # 查看已运行阵列使用的元数据版本
mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.2 /dev/sd[b-c]1 # 新建时指定版本
mdadm --zero-superblock /dev/sdb1 # 确认彻底弃用该盘时清除元数据(会抹掉阵列识别依据)救援旧阵列时版本决定超级块位置:1.2 在盘头、0.90 在盘尾,不同 mdadm 版本的扫描行为不一样;先 --examine 记下各盘的 events 再动手,比直接 --assemble --scan 稳得多。
mdadm.conf 里的 ARRAY 行可以固定阵列名与 UUID,配合 initramfs 中的组装配置,能避免开机时因设备顺序变化装错盘。