我想知道 BBU 的用途是什么。我的第一印象是,它使缓存能够在断电期间将数据写入光盘。但有些规范说 BBU 可以保存其数据长达 72 小时。我希望数据能在几毫秒内写入光盘(前提是光盘仍然有电)。
那么 BBU 是否不仅要保护缓存,还要在几秒钟内保护整个磁盘?这样不是更安全吗,因为缓存数据被写入磁盘,而不是留在缓存中等待再次通电?大约一秒钟后,磁盘就可以关闭了。
答案1
它不为磁盘供电,只是将数据保存在缓存中(在这种情况下)最多 72 小时,直到您重新上线机器。当您重新启动机器时,它会将缓存的内容写回到磁盘。
它的作用只是防止断电。如果(出于某种原因)机器断电而没有将数据彻底刷新到磁盘,电池将保持缓存内容有效,直到您可以重新启动机器。
它不是磁盘的 UPS,因为磁盘可能位于外部磁盘阵列中,甚至位于不同的电源电路中。即使是 UPS 也可能出现故障。
答案2
它的工作原理如下:
大多数操作系统都有一个允许所谓“同步写入”的系统调用。这意味着在写入操作期间,如果写入已完成,则可以保证已将其提交到磁盘。
因此,同步写入是非缓存的。它会阻止应用程序,直到完成为止。这种操作显然比缓存写入慢,缓存写入将数据保存在操作系统内存中,直到磁盘足够空闲,然后写入数据。
一些关键软件(例如数据库软件)对关键数据执行同步写入,因为在断电的情况下,半写入的更新可能会损害数据库的完整性。
众所周知,RAID 控制器的 RAID-5 写入速度很慢,因此如果您的应用程序软件使用大量同步写入,这就会成为一个问题。因此,RAID-5 控制器配备了自己的缓存。
RAID 控制器所做的是将数据写入其缓存并向操作系统撒谎,告诉操作系统它已将数据提交到磁盘,而数据实际上仍在 RAID 缓存中。
但是,如果数据仍在 RAID 控制器的缓冲区中时断电会怎样?磁盘上的数据可能只写了一半,而且可能不一致。
您可能会说这种行为违背了同步写入的目的……如果可以进行缓存写入,那么应用软件就不会首先要求同步写入。
妥协是这样的:RAID 控制器仍然向操作系统撒谎,它已将数据提交到磁盘,但为了在电源故障的情况下保护这些关键数据,RAID 控制器有一个电池,可以使缓存保持活动状态一段时间,直到电源恢复。
因此,在电源恢复并且磁盘旋转并初始化后,由于电池的存在,控制器仍然在其缓存中保留该数据,并可以完成将交易写入磁盘的操作。
大家都很开心。
这就是为什么 RAID 控制器通常不允许您启用写入缓存,除非您有一个功能齐全且充电正常的电池组。
答案3
值得一提的是,一些较新的磁盘控制器现在配备了高速闪存缓存,可以保留数据的时间远远超过典型的 72 小时,而且通常也相当大(约 1GB)。如果您需要零件详细信息,请告诉我。
答案4
必须购买价值 100 美元的电池,尤其是在 DB 服务器上,尽管电源故障很少见。即使您已启用交易,并且您的服务器在这些更改离开缓存并提交到磁盘之前断电,那么您将得到不完整的查询或损坏的数据。