启用磁盘写入缓存时数据损坏

启用磁盘写入缓存时数据损坏

我最近了解到,启用磁盘写入缓存可以显著提高系统性能。但是,我担心如果突然断电,数据可能会损坏或丢失。

以下是有关我的设置的一些背景信息:

操作系统:Windows Server 2012 R2

磁盘类型:SATA 3.0 HDD

目的:我正在考虑在磁盘上启用写入缓存以提高性能。我的理解是,如果发生电源故障,而写入缓存中的数据仍未提交到磁盘,操作系统崩溃,或者访问数据的应用程序崩溃,则可能会发生数据损坏。

在我研究的过程中,我发现了以下细节文章,他们提到“当活动磁盘写入缓存启用且磁盘执行预读 (RLA) 时,数据损坏会在用户不知情的情况下发生,而该操作会过早结束。” 。我无法理解这句话的确切含义。

启用写入缓存后,即使在断电时没有进行数据写入,是否也会出现数据损坏/文件损坏的情况。

答案1

现代文件系统(XFS、ZFS、JFS、ext4、APFS、NTFS 等)都使用日志功能,所以是的,您会丢失一些数据(最新的提交以及尚未提交并存储在缓存中的数据,这是显而易见的),但不会,您不会遇到任何数据损坏。

这里有一些很好的读物,其中包含大量有关 IBM 的 JFS 的图表和详细解释,文章中的所有内容都与其他日志文件系统 100% 相关:

https://www.ibm.com/docs/en/aix/7.2?topic=types-journaled-file-system-jfs

无论如何……您必须进行备份!您应该遵循所谓的“3-2-2 备份规则”。

https://www.starwindsoftware.com/blog/3-2-1-backup-strategy-why-your-data-always-survives

希望这有帮助!

答案2

简洁版本:不,使用现代 SATA 磁盘和日志文件系统,即使启用了磁盘缓存,也不可能损坏已确认(即同步)的写入。另一方面,在断电的情况下,未同步(缓冲)的写入可能会丢失/损坏。但是,您链接的文章是关于特定固件问题并且没有讨论使用磁盘缓存时的一般行为:

在进行扩展磁盘测试练习时,发现了一个潜在的固件问题。

长答案:可以发出两种类型的写入:

  • 同步写入,通过利用 ATA FLUSHe 或 FUA 来保证持久性(和排序);
  • 未同步(缓冲)写入,可以通过磁盘 DRAM 缓存进行缓存、聚合和重新排序。

在处理 HDD 和消费级 SSD 时,同步写入非常慢:刷新任何单个写入的过程意味着每次写入都要付出每个 IO 延迟。因此,同步写入通常保留用于最重要的 IO:日志提交、数据库、电子邮件传递等。所有其他不太重要的写入(即用户文件副本)都作为缓存/缓冲写入发出,如果在正确的时间发生断电(直到原始写入后 30-60 秒),数据就会丢失。

请注意,古老的 PATA 和 SATA 驱动器会欺骗操作系统,假装遵守同步,但实际上却放弃了所需的刷新行为。这导致有人建议完全禁用磁盘 DRAM 缓存(或将其设置为只读模式),以便任何写入的数据实际上都存储在(耐用的)磁盘盘片上。禁用缓存的磁盘会有效地将每次写入视为同步,从而以极大的性能成本提供最大的安全保障。

请注意,这确实不是意味着缓冲写入不会丢失:如果在操作系统刷新其缓冲区之前发生崩溃,所有未同步的数据都将丢失。出于这个原因,考虑到现代(2008 年之后)磁盘遵循 ATA FLUSHe 或(2015 年之后)FUA,当前的常见建议是启用磁盘缓存并依靠操作系统刷新重要写入。

具有断电保护功能的 SSD 和 HW RAID 卡通过使用板载电路进行安全缓存,可以避免这种性能/安全性权衡任何写入(甚至同步写入)。无论如何,当使用 HW RAID 卡时,磁盘缓存的管理方式取决于实现(即:PERC 为 SAS 磁盘禁用它,但不为 SATA 磁盘禁用它)。

相关内容