我在网上找到了很多文章,警告在断电情况下启用写入缓冲区的驱动器存在数据丢失或损坏的风险。然而,我还没有找到任何真正提到规模的风险。
我想在 Windows Server 2016 的存储空间中构建一个镜像文件服务器,用于小型视频编辑办公室。性能非常重要(因此要考虑写入缓冲区),我们的服务器主要处理两种类型的重要写入:上传素材和保存项目或文档文件。
这让我想知道如果发生意外断电,最坏的情况会是什么。
对于上传素材,我预计服务器的任何中断都会导致正在进行的任何文件传输出现明显的网络故障。因此,除非电源故障发生在文件传输的网络部分完成几秒钟后,否则他们会意识到服务器恢复在线后需要重新启动文件传输。由于我会意识到服务器宕机,我可以建议办公室使用同步程序,大概用本地主副本覆盖任何损坏的文件。
至于保存文档和项目文件,大多数文件应该很小,以至于在发生故障时甚至在缓冲区中的风险也最小。如果不是这样,那么在用户的计算机上保留自动保存或打开的版本将给他们第二次机会。我真正能看到的唯一风险是,如果电源故障发生在他们保存的时候和关闭了文件,并且该程序没有存储滚动自动保存。
我的评估准确吗?还是我忽略了什么?在这种情况下,损坏会影响比写入的数据更多的数据吗?
谢谢
编辑:我应该强调的是,我并不是特别想知道在这种情况下我应该做什么。我只是想正确了解各种可能性,以便根据这种风险的现实情况做出明智的决定。
到目前为止,我读过的许多有关该问题的网页都含糊不清,特别是在区分“写缓存”和“写缓存缓冲区刷新”方面。
答案1
你必须区分启用写缓冲区和禁用缓冲区刷新为了充分理解其中的差异,让我们从基础开始。
HDD 和 SSD 几乎普遍都具有专用 DRAM 缓存,用于短暂存储和合并传入的写入,从而大大加快其写入性能。作为参考,请考虑快速 SATA SSD 在启用其缓冲区的情况下以 >500 MB/s 的速度连续写入,而在禁用缓冲区的情况下仅为 ~5 MB/s。HDD 的性能下降程度没有那么严重,但仍然如此。
同时,如果这些私有 DRAM 缓存没有断电保护,则可能会发生严重的数据损坏(甚至丢失整个文件系统)。为了在不完全破坏性能的情况下防止此问题,存在以下可能性:
- 使用具有断电保护写入缓存的驱动器(即企业级 SSD 和一些较新的支持 NV 的机械 HDD)
- 使用具有断电保护缓存的硬件 RAID 控制器,禁用私有磁盘的 DRAM 缓存
- 使用廉价的消费级硬件,启用不受保护的 DRAM 缓存,但定期发布刷新保证文件系统(但不是数据,因为性能影响会非常大)的一致性。
当使用类似软件 RAID 的方法(即 Linux MDRAID、ZFS、存储空间、ecc)时,你应该绝不禁用磁盘缓存,除非您准备付出非常高的性能代价。相反,最好的办法是保持写入缓存启用,让您的操作系统/文件系统随时可以发出 DRAM 同步/刷新命令。通过这种方式,您可以获得启用缓存的性能加速,而不会冒着摧毁整个文件系统的风险。请注意,应用程序数据不会自动受到保护:任何想要确保数据持久性的应用程序必须问题定期自我刷新(数据库就是一个很好的例子)。
另一方面,你应该绝不禁用 DRAM 缓存刷新,除非你200% 确定你的驱动器/RAID 卡有一个受保护的写回缓存。但是,在这种情况下,保持刷新启用不会造成太大损害,因为几乎任何最近的驱动器/卡在其受保护的 DRAM 缓存处于健康状态时都会忽略刷新。
答案2
在这种情况下,损坏是否会影响比正在写入的数据更多的数据?
是的。写入可能会更新文件系统本身。最坏的情况是基本上任何文件的数据丢失。警告并不具体,因为实际上任何东西都可能丢失,而且影响因应用程序而异。
数据丢失事件后花费数小时进行恢复难道不会影响用户的工作效率吗?听取此建议并且不要禁用写入缓存缓冲区刷新。
更好的解决方案:获得更多更快的固态存储,直到获得满意的性能。
编辑:明确地说,我指的是更激进的选项“关闭写入缓存缓冲区刷新”。对于许多类型的内部磁盘,默认启用“启用写入缓存”通常是一个可以接受的折衷方案,因为 Windows 正在尝试刷新缓冲区并强化写入。