我想知道BBU的目的是什么。我的第一个理解是,它使缓存能够在电源故障期间将数据写入磁盘。但是一些规范说 BBU 可以保存其数据长达 72 小时。我希望数据能在几毫秒内写入磁盘(假设磁盘仍然有电)。
那么 BBU 是否应该不仅保护缓存,还保护整个磁盘几秒钟?这不是更安全吗,因为缓存数据被写入磁盘而不是在缓存中并再次等待电源?大约一秒钟后,光盘可以关闭。
我想知道BBU的目的是什么。我的第一个理解是,它使缓存能够在电源故障期间将数据写入磁盘。但是一些规范说 BBU 可以保存其数据长达 72 小时。我希望数据能在几毫秒内写入磁盘(假设磁盘仍然有电)。
那么 BBU 是否应该不仅保护缓存,还保护整个磁盘几秒钟?这不是更安全吗,因为缓存数据被写入磁盘而不是在缓存中并再次等待电源?大约一秒钟后,光盘可以关闭。
它不为磁盘供电,它只是将数据在缓存中保存(在这种情况下)长达 72 小时,直到您使机器重新上线。当您重新启动机器时,它会将缓存的内容写回磁盘。
它所做的只是防止电源故障。如果(由于某种原因)机器在没有将数据干净地刷新到磁盘的情况下断电,电池会保持缓存内容处于活动状态,直到您可以重新启动机器。
它不是用于磁盘的 UPS,因为磁盘可能位于外部磁盘阵列中,甚至位于不同的电源电路中。即使是 UPS 也可能发生故障。
它是这样工作的:
大多数操作系统都有一个允许所谓的“同步写入”的系统调用。这意味着在写入操作期间,如果写入已完成,则可以保证它已提交到磁盘。
因此,同步写入是非缓存的。它会阻止应用程序,直到它完成。这种操作显然比缓存写入慢,后者将数据保存在操作系统内存中,直到磁盘足够空闲,然后再写入数据。
一些关键软件(例如数据库软件)对关键数据执行同步写入,因为在断电的情况下进行半写入更新可能会损害数据库完整性。
众所周知,RAID 控制器的 RAID-5 写入速度很慢,因此如果您的应用程序软件使用大量同步写入,这将成为一个问题。出于这个原因,RAID-5 控制器配备了自己的缓存。
RAID 控制器所做的是将数据写入其缓存而不是向操作系统说谎,告诉它它已将数据提交到磁盘,而数据实际上仍在 RAID 缓存中。
但是,如果数据仍在 RAID 控制器的缓冲区中时断电怎么办?您的磁盘上将有一半写入且可能不一致的数据。
您可能会说这种行为违背了同步写入的目的……如果可以进行缓存写入,那么应用软件一开始就不会要求同步写入。
折衷方案是这样的:RAID 控制器仍然向操作系统谎称它已将数据提交到磁盘,但为了在电源故障的情况下保护这些关键数据,RAID 控制器有一个电池,可以让缓存保持活动一段时间,直到可以供电恢复。
因此,在电源恢复并且磁盘启动并初始化后,由于电池,控制器仍然在其缓存中保留了该数据,并且可以完成将您的事务写入磁盘。
每个人都很高兴。
这就是为什么 RAID 控制器通常不会让您启用写入缓存,除非您有一个功能正常且已充电的电池单元。
值得一提的是,一些较新的磁盘控制器现在配备了高速闪存缓存,可以将数据保留的时间远远超过典型的 72 小时,它通常也大得多(~1GB)。如果您需要零件详细信息,请告诉我。
将 BBU 缓存视为添加了与日志文件系统提供的类似级别的保护。它的存在是为了允许事务(在这种情况下为简单的写入)在电源故障中断时完成。一旦断电,控制器就无法继续写入,因为这将导致完全不可预测的结果。相反,它会尽可能长时间地保存数据,并在电源恢复时完成写入。它不做的是充当驱动器的 UPS。
获得 100 美元的电池是必须的,尤其是在数据库服务器上,即使电源故障很少见。即使您启用了事务,并且您的服务器在这些更改离开缓存并提交到磁盘之前断电,您也会留下不完整的查询或损坏的数据。
如果您的服务器崩溃、挂起或有人拔掉电源线,如果您使用的是写入缓存,BBU 将保护您免受损坏或丢失的数据。使用 USV 只能保护您免受电源故障的影响。
如果您不想使用 write-cache,则不需要 BBU。
一张 RAID 卡可以有 1 GB 的缓存;尽管它通常不会全部用于写入缓存,但您可以假设它会存储相当长的未写入数据队列。
文件系统和数据库假定它们的同步写入即使在电源故障的情况下也不会重新排序。通常同步写入只有在数据到磁盘后才会返回,但这相对较慢。RAID 卡通过将较小的写入分组在一起并将它们重新排序以减少随机性来提高性能。
如果没有 BBU,负载下的电源故障将产生灾难性的后果,RAID 卡承诺的写入会丢失(例如在文件系统的情况下,您可能会引用新文件或目录,但缺少说文件或目录,即使文件系统在对它的任何引用之前专门创建了新文件以避免这种情况),要求您从备份中恢复或只是希望您的数据不会太糟糕。更糟糕的是,如果有人删除了一个秘密文件,而另一个人创建了一个世界可读文件,则可能会发生秘密文件的某些内容在世界可读文件中找到的情况。一旦你打破了构建文件系统的假设,一切皆有可能。
假设 UPS 保证不间断电源是幼稚的;如果机器崩溃并且您需要拉电源线,或者有人绊倒它怎么办?
消费级 SATA 磁盘(和 SSD)有时也会缓存同步写入,但它们的缓存要小得多,而且消费者的使用要求不高,因此他们通常可以侥幸逃脱。
现代 RAID 控制器还具有闪存,它们在发生电源故障时会将写入缓存的内容复制到闪存中,因此电池的使用时间不会超过几秒钟。