首页/系统/服务器硬件与 RAID 速查/mdadm 元数据版本(superblock)
RAID 级别与计算68 条

mdadm 元数据版本(superblock)

mdadm 在盘上写入元数据来描述阵列结构,版本有 0.90/1.0/1.1/1.2:1.2 把超级块放在设备头部 4K 处(默认),了解位置差异有助于救援与引导问题排查。

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 中的组装配置,能避免开机时因设备顺序变化装错盘。

易错点

  • 把不同元数据版本的盘混加入一个阵列:mdadm 会直接拒绝,容易被误读成盘坏了;建阵列前先统一 --metadata 取值
  • 在系统盘上使用头部版本的元数据:与引导加载器读盘位置冲突,可能出现时好时坏的启动结果,1.2 特意留出 4K 偏移就是为了规避
  • 救援时直接 --assemble --scan 覆盖已有阵列:可能按过期事件计数重新组装出错误结构,应先 --examine 记录各盘 events 再决定组装方式
  • 迁移磁盘前没记录元数据版本:新机器 mdadm 过旧或默认版本不同,组装失败后才发现,恢复窗口被拉长

数据来源与参考

  • man 8 mdadm(--metadata)
  • Linux 内核 md 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌