阵列卡进入只读模式的典型现象是业务写入全部失败但读操作正常,df -h显示空间充足而touch报Read-only file system,dmesg高频出现控制器只读日志;根源是RAID卡检测到严重错误后主动锁死写通道,需用hpacucli或MegaCli查状态、执行一致性检查并恢复写缓存。

阵列卡进入只读模式的典型现象
业务突然全部写入失败,但读操作仍正常;df -h 显示磁盘空间充足,touch testfile 却报 Read-only file system;dmesg 里高频出现 md: md0: readonly 或硬件 RAID 卡日志中反复刷出 Controller entered read-only mode。这不是文件系统挂载参数问题,而是底层阵列控制器主动锁死写通道——常见于 HP Smart Array、Dell PERC、LSI MegaRAID 等企业级卡在检测到严重一致性错误、校验失败或固件异常后触发的保护机制。
确认是否为阵列卡级只读,而非文件系统只读
先排除误操作:检查 mount 输出是否真有 ro 标志;执行 mount -o remount,rw /mnt/data 看是否报错。若仍失败且报错指向设备(如 /dev/cciss/c0d0p1 或 /dev/sda1),就该查阵列层:
- 硬件 RAID:用对应工具查状态,例如
hpacucli ctrl all show config或MegaCli64 -AdpAllInfo -aALL,重点看Controller Status和Array State是否含ReadOnly或Failed - 软件 RAID:
cat /proc/mdstat若显示md0 : inactive或所有设备标为(F),再查mdadm --detail /dev/md0中State字段是否为readonly - 统一验证:
blockdev --getro /dev/sda(把sda换成你的底层设备)返回1表示设备本身被设为只读,根源在阵列卡或内核驱动拦截
恢复写入能力的关键动作顺序
跳过“重启阵列卡”这种无效操作——只读是主动保护态,不是临时故障。必须先确认数据一致性,再解除锁定:
- 硬件 RAID:进卡 BIOS(开机按
F8/Ctrl+R)查看具体告警,如Logical Drive Degraded due to consistency check failure,此时需手动运行一致性检查(Consistency Check)并等待完成;完成后选择Enable Write Cache并Save Configuration - 软件 RAID:若
mdadm --detail显示State : clean, readonly,先确认无failed成员盘,再执行mdadm --readwrite /dev/md0强制切回读写;若失败,说明元数据损坏,需从备份的/etc/mdadm.conf重建阵列(mdadm --stop /dev/md0 && mdadm --assemble --force /dev/md0 /dev/sd[bcde]1) - 无论哪种,解除只读后必须立刻跑
fsck -f /dev/md0(或对应逻辑卷),因为只读期间可能已有元数据不一致
容易被忽略的持久化陷阱
解除只读只是临时恢复,下次重启或阵列事件仍可能复发:
- 硬件 RAID 卡固件老旧是主因,查当前版本(
hpacucli ctrl all show中的Firmware Version),升级到厂商最新稳定版(尤其注意 2025 年后 HP 多款卡修复了因 NVMe 背板通信异常触发只读的 bug) - Linux 内核若加载了错误的 RAID 驱动(如用
megaraid_sas驱动去管 LSI 9361-8i),会导致持续上报虚假校验错误,最终触发只读;确认驱动匹配:lspci -k | grep -A3 -i raid - 阵列卡电池/电容失效(BBU/CACHE)后,写缓存被强制禁用,部分卡会降级为只读策略以保数据安全;用
MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL查Relative State of Charge是否低于 20%
真正棘手的是那些没报错日志、dmesg 安静如鸡,但 blockdev --getro 死活返回 1 的情况——这往往意味着阵列卡已静默进入硬件保护态,必须物理断电重启卡,且不能跳过 BIOS 初始化流程。











