「Software RAID」- 缓存设置

问题描述

在磁盘中,通常内置缓存模块,用于提高磁盘性能。写入磁盘的数据,可能并没有直接写入磁盘,而是写入该缓存中,以提高性能。

但是在电源故障时,缓存数据将会丢失。如果该缓存中包含为写入文件系统的元数据,在意外断电后,可能会导致文件系统的损坏。

本文将介绍如何配置磁盘缓存,以防止出现在电源故障时出现数据损坏的问题。

影响数据访问的缓存

在计算机中,有以下几种类型的缓存。

操作系统缓存

在现代操作系统中,使用“页缓存”。数据将首先写入该缓存,然后定期写入底层内存系统(可能是RAID控制器,或者直接写入磁盘)。

使用free命令,可以查看页缓存的内存大小(查看“buff/cache”列)。

如果出现电源故障,在页缓存中的数据将会丢失。

控制器(RAID Controller)缓存

这里“控制器”指“RAID控制器”。控制器缓存同样用于提高性能,但是在电源故障时,依旧会导致缓存数据丢失。除非在控制器中具有BBU或ZMCP特性。

BBU(BARTTERY BACKUP UNIT,备用电池单元),用于保护控制器缓存。在电源故障时,电池会持续供电,大约72小时,以防止缓存数据丢失。如果服务器在这期间启动,便可恢复缓存数据。另外,由于电池寿命有限,要注意电池的更换。

ZMCP(ZERO MAINTENANCE CACHE PROTECTION,零维护缓存保护),也用于保护缓存。它会将缓存数据写入闪存,以保护缓存数据。

磁盘缓存

磁盘通常也内置缓存,但是该缓存没有任何保护(某些磁盘可能有保护)。在电源故障时,将会出现数据丢失的情况。

在电源故障时,由缓存数据丢失带来的风险

最坏的情况:控制器电源保护模块故障,在电源故障时,数据将会丢失。

另外,我们组建软件磁盘阵列,没有缓存保护模块,在电源故障时,数据将会丢失。对于我们来说,没有太多选择,只能禁用磁盘缓存,但是这会降低磁盘性能。

下面我们将讨论避免风险的方法。

降低由缓存丢失带来的风险

在使用RAID Controller缓存时

如果使用BBU进行缓存保护,要注意电池的寿命,根据官方建议及时更换电池。并且要留意电池供电时长,如果超过该时长,数据依旧会丢失。

如果使用ZMCP进行缓存保护,缓存会被“永久”存储,通常不需要过度担心。

在使用磁盘缓存时

如果使用磁盘缓存(像我们的软件磁盘阵列),只能禁用磁盘缓存(毕竟缓存没有任何保)。虽然会带来性能损失,但是为了数据安全,这是值得的。

关于磁盘缓存设置,这里不再展开,可以参考 磁盘缓存 相关的内容。

参考文献

RAID Controller and Hard Disk Cache Settings