跳转到内容

RAID 降级 ​

适用范围 ​

  • 存储器 → RAID 管理(Storage → Multiple Device)里,阵列的状态带有 degraded。
  • 收到 mdadm 的告警邮件,主题里有 DegradedArray、Fail 之类的事件。
  • cat /proc/mdstat 里出现 [U_]、[UU_] 这样的状态,其中 _ 表示缺了一块成员盘。

这一页只讲 OMV 的软件 RAID(md 插件)。几点说明:

  • RAID 0(Stripe)没有冗余:掉一块盘,整个阵列就失效了,不会显示「降级」。
  • ZFS 池降级、Btrfs 缺盘、SnapRAID、mergerfs 各有自己的工具,见ZFS 插件、Btrfs 维护:scrub、balance 与换盘。
  • 阵列整个不见了(/proc/mdstat 里没有它),不属于降级,直接看第 6 节。

开始排查前 ​

先备份,再谈重建

影响范围:降级意味着冗余已经部分丧失。RAID 1 和 RAID 5 在这个状态下再坏一块盘,阵列里的数据就可能全部丢失。重建要把剩余的磁盘从头到尾读一遍,正是旧盘最容易暴露隐患的时刻。

前置条件:先把重要数据复制到阵列之外的独立位置。降级的阵列仍然可读可写。冗余不是备份,没有独立备份的话,现在就是补的时候。

不要做的事:在没搞清状况之前,不要执行 mdadm --create、mdadm --assemble --force、mdadm --zero-superblock,也不要擦除成员盘,更不要在降级时点界面上的修复(Repair)。这些操作会改写 RAID 元数据或覆盖数据,可能让数据再也找不回来。

回退办法:重建一旦开始,无法撤销。你的退路是事先复制出来的那份数据。

排查步骤 ​

1. 看清楚状态 ​

在 存储器 → RAID 管理 里选中阵列,点显示详情(Show details),或者在 shell 里查看:

sh
# 在 OMV 的 shell 里执行(只读);<阵列设备> 例如 /dev/md0
cat /proc/mdstat
mdadm --detail /dev/<阵列设备>

怎么读:

  • [UU_]:U 是在线的成员,_ 是缺失的成员。
  • 成员盘名字后面带 (F):这块盘已被标记为故障。
  • recovery = 12.3% 或 resync = ...:正在重建或同步,进度在后面。
  • mdadm --detail 里的 State 是 clean, degraded,下面的设备列表会列出每个成员的状态(active sync、faulty、removed)。

2. 确认是哪一块盘 ​

/dev/sdX 这样的名字会随重启或插拔而变化,不能凭它换盘。用序列号确认:

sh
# 在 OMV 的 shell 里执行(只读);<磁盘> 例如 sdb
lsblk -o NAME,SIZE,MODEL,SERIAL
smartctl -i /dev/<磁盘>

再对照机箱里每块盘标签上的序列号,确认物理上是哪一块。参考磁盘管理:识别、擦除与电源设置。

3. 判断是盘坏了,还是线或电源的问题 ​

sh
# 在 OMV 的 shell 里执行(只读)
smartctl -H -A /dev/<磁盘>
journalctl -k -b --no-pager | grep -iE 'I/O error|ata[0-9]+.*(error|reset|link)'
  • SMART 的 5(重新分配扇区)、197(待处理扇区)、198(无法修正扇区)在增长,或 SMART 整体判定为失败:盘坏了,需要换。
  • SMART 正常,但日志里有链路复位、link is slow:多半是数据线、接口或电源的问题。关机重新插拔或换线之后,盘可能就恢复了;把它加回阵列通常会触发一次重建,见第 5 节。
  • 内核报 I/O error, dev sdX, sector ...:底层出了问题。OMV 8.5.10 起,这类错误会发告警邮件,前提是邮件通知可用,并且「杂项」通知项开着。

4. 先排除误报 ​

Debian 13 的 mdadm 有一个上游回归,会在每天的监控里触发错误的 DeviceDisappeared 和 NewArray 告警。OMV 8.5.9 加了一条 udev 规则来绕开它。收到这类告警,先看 /proc/mdstat,确认阵列是不是真的降级,再决定要不要动手。 版本低于 8.5.9 的,先更新。

没有配置邮件通知的话,mdadm 的事件会写进系统日志,用这条命令查看:

sh
# 在 OMV 的 shell 里执行(只读)
journalctl -t mdmonitor --no-pager | tail -n 30

按 OMV 的配置,mdadm 的监控守护进程会持续运行(/etc/default/mdadm 里 START_DAEMON=true),每天还有一次 mdadm --monitor --scan --oneshot 的扫描。邮件能不能发出,取决于邮件通知和相应的通知项有没有配好。判断阵列状态,直接看界面和 /proc/mdstat,不要只等邮件。

5. 决定怎么处理 ​

情况处理
确认盘坏了买一块容量不小于原成员盘的新盘,先核对序列号再换下坏盘,然后在 RAID 管理 里选中阵列,用恢复(Recover)把新盘加进去,重建随后自动开始。完整步骤见软件 RAID 维护:换盘、扩容与重建。按界面的按钮条件,新增(Add)和移除(Remove)只在阵列状态是 clean 或 active 时才能点,降级的阵列上它们可能是灰的,这是预期现象,恢复不受这个限制,以你界面上的显示为准
盘没坏,只是掉线先处理线缆、接口,再把盘加回阵列,通常要完整重建一次
有热备盘看一下重建有没有自动开始
RAID 5 同时缺了两块,或 RAID 1 两块都缺阵列很可能已无法组装。立即停手,不要尝试强制组装,见第 6 节

界面里恢复页面的提示:向降级的阵列加入磁盘会开始重建,内核会自动同步数据,这可能花很长时间,期间不要关机或重启。重建期间可以随时用 cat /proc/mdstat 看进度。

新加入的盘如果以前用过,先在 存储器 → 磁盘(Storage → Disks)里确认它上面没有你需要的数据,再按需擦除,擦除前按型号和序列号核对,见磁盘管理:识别、擦除与电源设置。

6. 阵列整个不见了,或者无法组装 ​

只读地看一下成员盘上的 RAID 元数据:

sh
# 在 OMV 的 shell 里执行(只读);<成员盘分区> 例如 /dev/sdb1
mdadm --examine /dev/<成员盘分区>

然后停手,不要强制组装,不要重新创建阵列。把输出保存下来,用救援系统先只读地检查,并带着输出去求助,见如何有效求助。

确认恢复 ​

  1. cat /proc/mdstat 显示 [UU](成员数全部在线),没有 recovery 或 resync。
  2. mdadm --detail /dev/<阵列设备> 里 State 是 clean,所有成员都是 active sync。
  3. 存储器 → 文件系统(Storage → File Systems)里阵列上的文件系统已挂载,抽样打开几个文件。
  4. 新换的盘做一次 SMART 长测,见S.M.A.R.T.:监控硬盘健康。
  5. 重新做一次备份,并抽样恢复验证,见恢复演练。

仍未解决 ​

附上:cat /proc/mdstat、mdadm --detail /dev/<阵列设备> 和 mdadm --examine 的输出,每块成员盘的 smartctl -a(序列号分享前遮盖),内核日志里相关的行,以及最近做过的操作(换盘、断电、更新)。读如何有效求助。

omv-extras 的文档提醒:向社区求助存储问题时,有经验的成员默认你已有完整备份,他们给出的修复建议可能导致数据丢失。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。