带有屏障的SATA驱动器上的写缓存的安全性


13

最近,我一直在阅读有关SATA驱动器的写缓存,NCQ,固件错误,障碍等信息,但我不确定在电源故障的情况下哪种最佳设置可以确保数据安全。

据我了解,NCQ允许驱动器对写入进行重新排序以优化性能,同时让内核了解已物理写入了哪些请求。

写入缓存使驱动器更快地处理请求,因为它不等待将数据写入物理磁盘。

我不确定这里的NCQ和Write缓存如何混合使用...

文件系统,特别是日记系统,需要确定何时记录了特定请求。同样,用户空间进程使用fsync()强制刷新特定文件。在文件系统确定数据已写入磁盘之前,对fsync()的调用不应返回。

有一个功能(FUA,强制单位访问),我仅在SAS驱动器上看到过,该功能强制驱动器绕过缓存并直接写入磁盘。对于其他所有方面,都有写障碍,这是内核提供的一种机制,可以触发驱动器上的缓存刷新。这将强制记录所有缓存,而不仅仅是关键数据,从而在滥用时减慢了整个系统的速度,例如使用fsync()。

然后,存在带有固件错误的驱动器,或者故意谎称何时物理写入数据。

话虽这么说..有几种方法可以设置驱动器/文件系统:A)禁用NCQ和写入缓存B)启用NCQ仅C)启用写入缓存D)启用NCQ和写入缓存

我正在假设启用了障碍。顺便说一句,如何检查它们是否真正启用?

如果断电,则在主动写入磁盘时,我的猜测是,对于文件系统日志和数据,选项B(NCQ,无高速缓存)都是安全的。可能会有性能损失。

如果使用障碍或FUA,则选项D(NCQ + cache)对于使用fsync()的文件系统日志和应用程序将是安全的。这对于在缓存中等待的数据将是不好的,并且要由文件系统来检测它(校验和),并且至少文件系统不会(希望)处于不稳定状态。性能方面,它应该更好。

但是,我的问题仍然存在……我是否想念任何东西?还有其他变量要考虑吗?是否有任何工具可以确认这一点,并且我的驱动器运行正常?


您的情况是什么应用?您忽略了RAID控制器及其缓存对设置的影响。您还关注什么操作系统?您正在考虑使用哪个文件系统?
ewwhite 2012年

没有具体的应用。我使用raid1软件已有多年,但从未研究过写入缓存所代表的问题。此外,研究了btrfs(尚无可靠的fsck)后,我质疑如果可以使用该工具,该如何防止腐败。
julianjm 2012年

1
在Linux上改用ZFS,并与专用的ZIL设备结合使用。我将DDRDrive用于ZFS系统:)
ewwhite

您是否将ZFS与FUSE一起使用?
julianjm 2012年

2
确保获得一台UPS。
迈克尔·汉普顿

Answers:


11

对于直接的Enterprise系统,还有一层存储适配器(几乎始终是RAID卡)形式的附加层,其上还有另一层缓存。如今,存储堆栈中有很多抽象,我在“ 了解您的I / O”博客系列中对此进行了详细介绍。

RAID卡可以绕过磁盘缓存,其中一些甚至允许在RAID BIOS中切换此功能。这是Enterprise 磁盘成为Enterprise 磁盘的原因之一,其固件允许消费者驱动器(尤其是 “绿色”驱动器)不允许这样做。此功能直接解决您所关注的情况:断电和未提交的写入。RAID卡高速缓存应该是电池供电的,也可以是闪存备份的,将保留直到电源恢复并且可以重新执行这些写操作为止。

某些企业级固态硬盘包括一个板载电容器,其容量足够大,可以在完全断电之前提交板载缓存。

如果您正在使用将磁盘直接连接到主板的系统,则无法保证。除非磁盘本身具有提交写缓存的能力,否则电源故障确实会造成损失。由于文件系统无法在这种故障模式下生存,因此赢得了声誉。它旨在在具有工程设计的存储生存能力的完整企业系统上运行。

但是,时间已经过去,XFS经过了精心设计,可以幸免。其他主要的Linux文件系统(以及Windows上的)已经进行了工程设计,可以承受这种故障模式。应该如何工作是,丢失的写入将不会出现在FS日志中,并且它将知道它们没有被卷入,因此可以安全地检测到并解决损坏。

您确实在这里指出了一个问题:磁盘固件所在。在这种情况下,FS杂志将做出错误的假设,而事实却是现实,并且可能在一段时间内未发现腐败。奇偶校验RAID和镜像RAID可以解决此问题,因为应该有另一个复制副本。但是单个磁盘设置不会进行交叉检查,因此实际上会出错。

您可以通过使用企业级驱动器来解决固件风险,该企业级驱动器将获得更多的验证(并相对于假定的工作负载模式进行了测试),并设计了存储系统,以使其能够经受住这种不真实的情况。


我了解在硬件RAID下,取决于控制器来进行缓存(希望由电池供电),并且建议禁用实际的磁盘缓存。就我而言(未提及),我正在使用软件突袭。似乎不建议使用写缓存,因为它会导致数据丢失。也许不是灾难性的(文件系统损坏),但无论如何都会丢失数据。我暂时不要将我的softraid1 + ext4迁移到btrfs + raid1。:)
julianjm 2012年

RAID对此无济于事,因为数据可以像在一个驱动器中一样容易地位于两个驱动器中写入缓存。
psusi

@psusi并非100%缓解,但确实提供了额外的保护。这是一个时间问题。各个RAID实现不同。
sysadmin1138

这根本不是缓解措施。辅助驱动器根本没有关系,因为在发生崩溃时,主驱动器将被复制回辅助驱动器以进行恢复。因此,您将回到写入是否写入(第一个)驱动器中。
psusi

3

假设没有驱动器写入缓存,则文件系统日志最初会在对元数据执行写操作之前等待对日志的写操作。启用驱动器写缓存后,此假设将被破坏,并可能导致数据丢失。因此,创建了障碍。使用障碍,日志可以确保在写入元数据之前完成对日志的写操作,即使磁盘正在使用写缓存。在磁盘驱动器层,当驱动器报告其具有写缓存并已启用它时,屏障会强制在下一个后续IO发送之前刷新磁盘缓存。否则,则不需要这样做,因此屏障仅阻止在驱动器上一个IO完成之前发出后续的IO。NCQ只是意味着它可能必须等待一个以上的待处理请求完成才能发出更多请求。


我认为障碍可以保护您免受日记损坏(如果文件系统要求),但是我不确定文件上的实际数据...每次写入后发出缓存刷新将使写入缓存无用,不是吗? ?
julianjm 2012年

@julianjm,当然...无论是否发生NCQ或驱动器写入缓存,崩溃时缓存的文件数据总是会丢失。
psusi 2012年
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.