题 Linux如何告诉LSI Megaraid卡在关机前刷新其缓存?


LSI Megaraid控制器为其写缓存备份电池,在出现意外停电的情况下,它可以保留缓存的尚未写入的数据,因此可以在下次启动服务器时将其写入磁盘起来。在干净关闭的情况下,这种备份可能不是必需的,因为干净关闭的一部分将涉及控制器将缓存的数据写入磁盘。

raid控制器如何获知关闭即将发生?据推测,这种刷新必须是其他OS关闭代码之后发生的最后一件事,这可能涉及将数据或日志写入raid。

是否有一些PCIe级别的信令通知外围设备有待下电? Megaraid_sas内核模块是否通知卡挂起关闭?或者是 MegaCli 刷新缓存的命令需要从init脚本运行才能关闭?

我已经手动将一个Megaraid卡和一组额外的驱动器添加到没有安装的Linux系统中,并且希望确保我不需要手动添加内容以确保缓存在关机时保持一致。


5
2017-10-20 19:33




我只是认为这将是内核的一部分,并且scsi / raid驱动程序会挂钩 同步(2) 功能那个 同步(8) 通常在关机期间运行的二进制文件 - Zoredache
这是有道理的,虽然我无法找到任何文档来验证在同步运行以刷新其内部缓存时调用设备驱动程序。我发现的一切只说它导致linux安排在自己的缓存中写入所有脏数据 - bk.


答案:


在关闭期间,系统将卸载大多数文件系统。那些无法卸载的是只读的。 Umount syscall将通过VFS刷新磁盘高速缓存,使用块设备后面的驱动程序刷新磁盘缓冲区。您的案例中的块设备驱动程序是通用SCSI驱动程序 sg。这将使用设备的特定驱动程序和SCSI刷新命令将数据发送到SCSI设备,以便将数据从内部磁盘高速缓存写入磁盘存储介质。 所有这些都是同步的,直到数据在磁盘上时umount才会返回。 对于重新安装的只读FS,关闭脚本将只运行sync syscall。


6
2017-10-20 22:33