我最近一直在阅读有关 SATA 驱动器的写入缓存、NCQ、固件错误、障碍等内容,但我不确定在发生电源故障时使我的数据安全的最佳设置是什么。
据我了解,NCQ 允许驱动器重新排序写入以优化性能,同时让内核了解哪些请求已被物理写入。
写入缓存使驱动器更快地处理请求,因为它不会等待数据写入物理磁盘。
我不确定 NCQ 和写入缓存如何在这里混合...
文件系统,特别是日志文件系统,需要确定何时写下特定请求。此外,用户空间进程使用 fsync() 强制刷新特定文件。在文件系统确定数据已写入磁盘之前,对 fsync() 的调用不应返回。
有一个功能(FUA,强制单元访问),我只在 SAS 驱动器上看到过,它强制驱动器绕过缓存并直接写入磁盘。对于其他一切,都有写屏障,这是内核提供的一种机制,可以触发驱动器上的缓存刷新。这会强制写下所有缓存,而不仅仅是关键数据,因此如果滥用会降低整个系统的速度,例如 fsync()。
然后有固件错误的驱动器,或者故意谎报数据何时被物理写入。
话虽如此.. 有几种方法可以设置驱动器/文件系统:A) NCQ 和写入缓存禁用 B) 仅启用 NCQ C) 仅启用写入缓存 D) 启用 NCQ 和写入缓存
我假设障碍已启用..顺便说一句,如何检查它们是否实际启用?
如果断电,在主动写入磁盘时,我的猜测是选项 B(NCQ,无缓存)对于文件系统日志和数据都是安全的。可能会有性能损失。
选项 D(NCQ+缓存),如果使用屏障或 FUA,对于使用 fsync() 的文件系统日志和应用程序是安全的。对于在缓存中等待的数据来说,这将是不利的,由文件系统来检测它(校验和),至少文件系统不会(希望)处于不稳定状态。在性能方面,它应该更好。
然而,我的问题是......我错过了什么吗?还有其他变量需要考虑吗?是否有任何工具可以确认这一点,以及我的驱动器是否正常运行?