LSI Megaraid 控制器的写入缓存配有备用电池,这样,在发生意外断电时,可以保留缓存的、尚未写入的数据,以便在下次启动服务器时将其写入磁盘。如果是干净关机,则可能不需要此备份,因为干净关机的一部分将涉及控制器将缓存的数据写入磁盘。
RAID 控制器如何获知即将关闭?据推测,此刷新必须是其他 OS 关闭代码之后发生的最后一件事,这可能涉及将数据或日志写入 RAID。
是否有一些 PCIe 级信号通知外围设备即将关闭?Megaraid_sas 内核模块是否会通知卡即将关闭?或者是否MegaCli
需要从关闭的初始化脚本运行刷新缓存的命令?
我手动将 Megaraid 卡和一组附加驱动器添加到了没有安装该卡的 Linux 系统中,并且想确保我不需要手动添加某些内容来保证关机时缓存的一致性。
答案1
在关机期间,系统将卸载大多数文件系统。无法卸载的文件系统将以只读方式重新挂载。umount 系统调用将通过 VFS 刷新磁盘缓存,并使用块设备后面的驱动程序刷新磁盘缓冲区。您使用的块设备驱动程序是通用 SCSI 驱动程序sg
。这将使用设备的特定驱动程序和 SCSI 刷新命令将数据发送到 SCSI 设备,以便将数据从内部磁盘缓存写入磁盘存储介质。所有这些都是同步的,umount 只有在数据写入磁盘后才会返回。对于重新挂载的只读 FS,关机脚本将只运行同步系统调用。
答案2
在 LSI 文档中描述刷新所选控制器上的控制器缓存
MegaCli –AdpCacheFlush -aN|-a0,1,2|-aALL
Storcli /cx flushcache