(raid-controller-)BBU的作用是什么?


13

我想知道BBU的目的是什么。我的第一个理解是,它使高速缓存可以在断电期间将数据写入光盘。但是一些规范说BBU最多可以保留其数据72小时。我希望数据可以在几毫秒内写入光盘(鉴于光盘也仍然有电)。

那么,BBU不仅应该保护高速缓存,还要保护整个光盘几秒钟吗?因为缓存数据被写入磁盘,而不是放在缓存中并再次等待电源,这是否会更加安全?一秒钟左右后,光盘可能会关闭。


尽管RAID电池无法为实际的驱动器供电,但我们的世界中有些东西与您最初的想象相似:某些服务器级SSD具有“超级电容器”,这些超级电容器可提供备用电源,以在电源故障后的几毫秒内提交缓存的写操作。
天鹰

Answers:


17

它不会为磁盘供电,它只会将数据保留在缓存中长达72小时(在这种情况下),直到您使计算机恢复联机为止。备份计算机电源后,它将把高速缓存的内容写回到磁盘上。

它所做的只是防止电源故障。如果(由于某种原因)机器断电而没有将数据干净地刷新到磁盘上,则电池将使缓存内容保持活动状态,直到您可以重新启动机器为止。

它不是磁盘的UPS,因为磁盘可能位于外部磁盘阵列中,甚至位于不同的电源电路中。即使是UPS也可能会失败。


1
因此,与磁盘UPS的不同之处在于,它是专为磁盘不在同一电源电路上的情况而设计的?在所有其他情况下(一个回路中的控制器和磁盘),UPS会更好吗?我仍然希望将最后的命令写入磁盘,而不是在电源故障期间在缓存中等待。
tanascius 2010年

因此,也请为您的服务器购买UPS!BBU没有足够的功率来运行驱动器阵列。它为您提供了足够大的窗口,可让您恢复电源并保存更改。大多数停机时间都很短,大多数人不需要为非关键机器购买UPS的额外费用。
JamesRyan 2010年

1
BBU所做的只是将数据保留在缓存中,直到重新启动计算机为止。控制器知道哪些内容已冲刷到磁盘(磁盘发出信号,表明操作已完成)。在重新启动计算机之前,所有未刷新到磁盘的内容都将保留。
ConcernedOfTunbridgeWells 2010年

13

它是这样的:

大多数操作系统都有一个系统调用,该调用允许进行所谓的“同步写入”。这意味着在写操作期间,如果写已完成,则可以确保已将其提交到磁盘。

因此,同步写是非缓存的。它将阻止应用程序,直到完成。这种操作显然比缓存写入慢,后者将数据保留在OS内存中,直到磁盘足够空闲,然后再写入数据。

某些关键软件(例如数据库软件)对关键数据执行同步写入,因为在断电的情况下进行半写入更新可能会损害数据库的完整性。

众所周知,RAID控制器的RAID-5写入速度很慢,因此如果您的应用程序软件使用大量同步写入,则这将成为一个问题。因此,RAID-5控制器配备了自己的缓存。

RAID控制器执行的操作是将数据写入其缓存,然后将LIES写入操作系统,告诉它已将数据提交到磁盘,而数据实际上仍在RAID缓存中。

但是,如果数据仍在RAID控制器的缓冲区中而断电了怎么办?您的磁盘上将写入一半且可能不一致的数据。

您可能会说这种行为违背了同步写入的目的……如果可以缓存写入,则应用程序软件首先不会要求进行同步写入。

折衷方案是:RAID控制器仍然位于将数据提交到磁盘的OS上,但是为了在电源故障的情况下保护此关键数据,RAID控制器具有一个电池,可以使高速缓存保持活动状态一段时间,直到可以断电为止。恢复。

因此,在电源恢复并且磁盘旋转并初始化之后,由于电池的缘故,控制器仍在缓存中保留该数据,并且可以完成将事务写入磁盘的操作。

大家都开心

这就是为什么RAID控制器通常不允许您启用写缓存的原因,除非您具有正常运行且已充电的电池单元。


我想问一下控制器的位置。它是主板的一部分还是内置在硬盘驱动器中?
Valentin Tihomirov

另外,我想知道proper shutdown如果发出刷新请求时RAID对它说谎,操作系统如何发送请求?
Valentin Tihomirov'2

@ValentinTihomirov没有诸如此类的东西properimproper关机。在关闭电源后,操作系统会发出掉电信号,PSU会发出该信号。关闭电源后,易失性存储器及其所有内容也会丢失!
PF4Public,

4

值得一提的是,一些较新的磁盘控制器现在带有高速闪存缓存,可将数据保留的时间远远超过典型的72小时,而且通常也要大得多(〜1GB)。如果您需要零件详细信息,请告诉我。


感谢您提供信息,但是我不是Sysadmin,并且可能永远不会设计专业的RAID ...我只是对BBU感到好奇:)
tanascius 2010年

3

可以将BBU高速缓存视为与日记文件系统提供的保护级别相似的保护级别。此处是为了允许事务(在这种情况下为简单写入)在电源中断的情况下完成。一旦掉电,控制器将无法继续写入,因为这将导致完全不可预测的结果。取而代之的是,它会尽可能长时间地保存数据,并且如果/当电源恢复时,将完成写入操作。它不做的是像驱动器的UPS。


但是,当我为驱动器和控制器安装UPS时-我需要BBU做什么?也仅针对UPS发生故障的场景?
tanascius 2010年

好问题。如果您知道服务器将始终正常关闭,那么我也不相信需要BBU。
约翰·加迪尼尔

2
BBU通常通常用于回写配置。如果没有BBU,某些RAID控制器将无法启用回写功能。但是,我认为假定您的服务器将始终被正确关闭可能是一个坏主意。
ConcernedOfTunbridgeWells,2010年

2

即使电源故障很少见,也必须获得100美元的电池,尤其是在数据库服务器上。即使您启用了事务,并且服务器在这些更改离开缓存并提交到磁盘之前就断电了,您仍将获得不完整的查询或损坏的数据。


1

如果您的服务器崩溃,挂起或有人拉扯电源线,则BBU将保护您免受损坏或丢失的数据(如果您正在使用写缓存)。使用USV仅能保护您免受电源故障的影响。

如果您不想使用写缓存,则不需要BBU。


1

RAID卡可以具有1 GB的缓存;即使通常不会全部将其用于写缓存,也可以假定它将存储相当长的未写数据队列。

文件系统和数据库假定即使在电源故障的情况下,其同步写入也不会重新排序。通常,同步写入仅在数据存储在磁盘上之后才返回,但这相对较慢。RAID卡通过将较小的写入分组并重新排序以减少随机性来提高性能。

如果没有BBU,则负载下的电源故障将造成灾难性的结果,并且RAID卡已承诺会丢失(例如,在使用文件系统的情况下,您可能引用了新文件或目录,但缺​​少)文件或目录,即使文件系统在引用任何文件之前专门创建了新文件(以避免这种情况),也要求您从备份中还原,或者只是希望您的数据不会被严重弄乱。更糟的是,如果有人删除了一个秘密文件,而其他人创建了一个世界可读文件,则可能会在世界可读文件中找到该秘密文件的某些内容。一旦打破了建立文件系统的假设,一切皆有可能。

假设UPS确保不间断电源是幼稚的;如果机器崩溃并且您需要拉电源线或有人绊倒怎么办?

消费者SATA磁盘(和SSD)有时也缓存同步写入,但是它们的缓存要小得多,消费者使用的要求也较低,因此通常可以避免这种情况。

现代RAID控制器还具有闪存,如果发生电源故障,它们会将写缓存的内容复制到闪存中,因此电池的使用时间不必超过几秒钟。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.