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