在 Linux 环境中,想准确查看 RAID 卡的缓存策略,不能只依赖系统通用命令,通常还需要使用硬件厂商提供的专用管理工具。比如 MegaCLI,可以通过 -LDInfo -Lall -aALL 查看 Default/Current Cache Policy,其中会清楚显示 WriteBack/WriteThrough、ReadAhead 等缓存策略,同时还能看到 Disk Cache Policy;如果使用 hpssacli,一般可通过 ld all show 进行确认,重点关注 Cache Acceleration、Drive Write Cache 等字段。还有一个关键点:这些信息不能单独判断,必须结合 BBU 状态一起核对,才能确认当前缓存策略是否真正生效。

在 Linux 下查看磁盘控制器缓存策略时,不能只看 /proc/meminfo 或 free —— 这些反映的是系统页缓存,与 RAID 卡或主机总线适配器(HBA)的硬件缓存没有直接关系。真正需要确认的是控制器本身的写缓存策略(WriteBack / WriteThrough)、读缓存策略(ReadAhead),以及是否启用了磁盘自身缓存(Disk Cache Policy)。这些信息必须通过厂商工具直接与控制器通信后才能准确获取。
用 MegaCLI 查 LSI/A vago/Broadcom RAID 卡缓存策略
这是 Linux 服务器中最常见的查询场景之一。MegaCLI 的 -LDInfo 输出会明确区分三类缓存相关策略:
Default Cache Policy:默认配置值,通常是初始设置或上一次保存的策略Current Cache Policy:当前实际生效的缓存策略,可能会因为 BBU 状态异常而被自动降级(例如 BBU 故障时,WriteBack会自动回退到WriteThrough)Disk Cache Policy:是否允许物理磁盘启用自身内置缓存(一般建议关闭,以避免双重缓存带来的风险或断电数据丢失)
执行命令:sudo /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aAll
重点查看输出中类似下面这一行:
Current Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
其中 WriteBack 表示启用了回写缓存,No Write Cache if Bad BBU 则是非常重要的保护机制——当 BBU(电池备份单元)状态异常或失效时,系统会自动禁用写缓存,以降低断电造成数据丢失的风险。
用 hpssacli 查惠普 Smart Array 控制器缓存设置
对于 Gen9 及以上服务器,通常使用 hpssacli。它不会直接显示“Cache Policy”这样的统一字段,而是将缓存策略拆分到各个逻辑盘属性中:
Cache Acceleration:对应控制器写缓存开关(Enabled/Disabled)Drive Write Cache:对应磁盘自身写缓存状态(Enabled/Disabled)Read Cache:对应预读或读缓存开关(Enabled/Disabled)
命令示例:sudo hpssacli ctrl slot=0 ld all show
输出中查找类似内容:
Cache Acceleration: Enabled
Drive Write Cache: Disabled
Read Cache: Enabled
需要特别注意:Drive Write Cache: Disabled 通常是更安全、也更推荐的配置。如果这里显示为 Enabled,说明磁盘自身缓存没有关闭,在异常断电时存在更高的数据丢失风险,应尽快使用 hpssacli ctrl slot=0 modify dwc=disable 进行关闭。
查不到缓存策略?先确认控制器类型和工具链
很多 Linux 运维人员会先尝试执行 mdadm --detail 或 cat /proc/mdstat,但这类命令只适用于软件 RAID,对硬件 RAID 的缓存策略查询没有帮助——因为硬件 RAID 的缓存控制并不直接暴露在操作系统标准 I/O 栈中。
- 使用
lspci | grep -i raid确认 RAID 控制器型号(例如 “LSI Logic / Symbios Logic MegaRAID SAS-3” 或 “HP Smart Array P440ar”) - 使用
lsmod | grep -E "(mpt|megaraid|hpsa|cciss)"查看内核是否已加载对应驱动模块 - 如果未安装厂商工具,
megacli和hpssacli都不会默认自带,必须手动下载安装对应软件包(MegaCLI 对应MegaCli64,hpssacli 对应ssacli或hpssacli)
另外还需要额外留意:Dell 服务器通常使用的是 perccli,它已经基本取代旧版 megaraid 工具。两者在输出字段命名上会有一些细微差异,比如 Current Cache Policy,有时可能显示为 Current Cache Policy:,后面再跟一组缩写。常见写法包括 WB = WriteBack、WT = WriteThrough、Ra = ReadAhead。
为什么 smartctl 查不了 RAID 卡缓存?
smartctl -a /dev/sda 只能查看单块物理磁盘的 SMART 信息,包括该硬盘自身的 Write Cache 开关状态(WC 字段),但它无法看到 RAID 控制器层面的缓存策略。即使所有物理盘的写缓存都关闭了,只要 RAID 控制器仍设置为 WriteBack,数据依然会先写入控制器缓存,再异步刷入磁盘。
还有一个更隐蔽的问题:某些 RAID 卡,尤其是老型号设备,在 BBU 充电异常或温度过高时,可能会静默降级缓存策略。此时 Current Cache Policy 字段表面上仍可能显示 WriteBack,但实际运行已经退化为 WriteThrough。因此,唯一更可靠的做法是同时检查 BBU 状态:sudo /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aAll | grep -E "(Charger|State|Temperature|Remaining Capacity)"
如果要最终确认 Linux 下 RAID 卡缓存策略是否按预期启用,还应结合 iostat -x 1 观察 await 和 %util 的变化,再对比开启和关闭写缓存前后的随机写吞吐表现——配置参数只是表面结果,真实的 I/O 行为才是验证缓存策略是否生效的最终依据。
