缓存有一定概率导致ReFS分区损坏
发表于 : 周日 6月 25, 2023 1:44 pm
已经重新写三次了,长话短说:
1.我使用PrimoCache缓存ReFS分区,仅使用二级缓存,并选择“下次开机时重置缓存”,之后便休眠电脑(注:因为特殊原因,此电脑休眠相当于直接关机(类似PCHunter的强制关机),即启动时无法恢复休眠状态),此时硬盘灯一直闪(因为这时还有缓写数据),之后电脑便成功休眠(这时PrimoCache已经把缓存数据写入了...吧?)
2.之后我启动电脑,发现被缓存盘已损坏,提示“卷修复不成功”,此时使用ReFSUtil的快速扫描阶段失败,提示“发生了数据完整性校验和错误。文件流中的数据已损坏。”并且这时DiskGenius(新版支持ReFS)无法查看分区文i件,显示为空。(后面的“卷修复不成功”都是可以查看的。)
3.当我恢复数据时发现,因为“卷修复不成功”时其仍在读写数据来《抢救数据》,所以导致大约500个G的数据丢失(接近80%)。
刚开始我以为是ReFS分区的锅,于是我在虚拟机测试,死活搞不坏ReFS分区(排除虚拟磁盘文件(VHDX)无法打开的情况和“参数错误”错误(这个也许可以手动修复,而且它不会像“卷修复不成功”一样覆写数据)),直到我看到这个论坛关于ReFS分区错误的报告。
于是我开始测试PrimoCache+ReFS的安全性,果然损坏了(即“卷修复不成功”错误(出现了2次,概率够高了))。之后我测试PrimoCache+NTFS的安全性,非常安全,没有出现分区打不开的情况(排除虚拟磁盘文件(VHDX)无法打开的情况)。
为了实验的严谨性,我打算使用现实世界的硬件(U盘)进行测试。我使用一个128G的U盘,测试PrimoCache+NTFS的安全性,拔插了8次左右完全没有损坏,之后测试单ReFS分区,不使用PrimoCache,更是拔插了十几次没有任何问题。最后测试PrimoCache+ReFS,仅仅拔插到第6次左右就提示“卷修复不成功”,此时ReFS依然读写分区,应该是在《抢救数据》。
附加测试:又重新在U盘测了PrimoCache+NTFS,共15次无问题;单ReFS,共17次无问题;PrimoCache+ReFS,第7次出现“卷修复不成功”。
如果需要“卷修复不成功”错误的分区数据,请回复我,我将克隆出来提供研究。
吐槽:说无法复现也太不负责了吧,这么大的概率,而且ReFS原本就没有问题(在虚拟机里可是开了“更好的性能”策略,有Windows自己的缓存,那种缓存怎么没事呢?)
PrimoCache版本:4.2.0服务器版;内核版本:4.2.0.6 Windows版本:10 专业工作站版;版本号:1909;操作系统版本:18363.592
别问我U盘怎么格式化ReFS分区的,换成cfadisk驱动就行了。(警告:只有安装了这个驱动的系统才能识别到U盘的ReFS分区,其他电脑是无法识别的,别指望U盘能更安全,而且这个驱动要开“禁用驱动程序强制签名”(新的系统就算开这个也不能使用无签名驱动,只能用自签名驱动))。
修正:我发现了一个错误,上面我说的休眠电脑是在测试UPS,软件设置了系统关闭2分钟后关闭UPS,也许PrimoCache并未完全写入缓写数据就被UPS直接断电,这是设置上的一个问题,不过也说明PrimoCache缓写未写入+ReFS会出现问题,但为啥Windows的缓写就没出过问题呢?也许在ReFS缓写的机制要修改一下。
目的:主要是因为ReFS原本要的就是数据安全,而PrimoCache的到来却让其经常出现“卷修复不成功”,而且这个错误会不断覆写数据导致无法恢复,这显然不太好。而老旧的NTFS竟然在这种情况下不会损坏!这非常的不合理!我想知道为什么会出现这种情况,到底是PrimoCache的Bug还是ReFS设计与PrimoCache不兼容导致的呢?
1.我使用PrimoCache缓存ReFS分区,仅使用二级缓存,并选择“下次开机时重置缓存”,之后便休眠电脑(注:因为特殊原因,此电脑休眠相当于直接关机(类似PCHunter的强制关机),即启动时无法恢复休眠状态),此时硬盘灯一直闪(因为这时还有缓写数据),之后电脑便成功休眠(这时PrimoCache已经把缓存数据写入了...吧?)
2.之后我启动电脑,发现被缓存盘已损坏,提示“卷修复不成功”,此时使用ReFSUtil的快速扫描阶段失败,提示“发生了数据完整性校验和错误。文件流中的数据已损坏。”并且这时DiskGenius(新版支持ReFS)无法查看分区文i件,显示为空。(后面的“卷修复不成功”都是可以查看的。)
3.当我恢复数据时发现,因为“卷修复不成功”时其仍在读写数据来《抢救数据》,所以导致大约500个G的数据丢失(接近80%)。
刚开始我以为是ReFS分区的锅,于是我在虚拟机测试,死活搞不坏ReFS分区(排除虚拟磁盘文件(VHDX)无法打开的情况和“参数错误”错误(这个也许可以手动修复,而且它不会像“卷修复不成功”一样覆写数据)),直到我看到这个论坛关于ReFS分区错误的报告。
于是我开始测试PrimoCache+ReFS的安全性,果然损坏了(即“卷修复不成功”错误(出现了2次,概率够高了))。之后我测试PrimoCache+NTFS的安全性,非常安全,没有出现分区打不开的情况(排除虚拟磁盘文件(VHDX)无法打开的情况)。
为了实验的严谨性,我打算使用现实世界的硬件(U盘)进行测试。我使用一个128G的U盘,测试PrimoCache+NTFS的安全性,拔插了8次左右完全没有损坏,之后测试单ReFS分区,不使用PrimoCache,更是拔插了十几次没有任何问题。最后测试PrimoCache+ReFS,仅仅拔插到第6次左右就提示“卷修复不成功”,此时ReFS依然读写分区,应该是在《抢救数据》。
附加测试:又重新在U盘测了PrimoCache+NTFS,共15次无问题;单ReFS,共17次无问题;PrimoCache+ReFS,第7次出现“卷修复不成功”。
如果需要“卷修复不成功”错误的分区数据,请回复我,我将克隆出来提供研究。
吐槽:说无法复现也太不负责了吧,这么大的概率,而且ReFS原本就没有问题(在虚拟机里可是开了“更好的性能”策略,有Windows自己的缓存,那种缓存怎么没事呢?)
PrimoCache版本:4.2.0服务器版;内核版本:4.2.0.6 Windows版本:10 专业工作站版;版本号:1909;操作系统版本:18363.592
别问我U盘怎么格式化ReFS分区的,换成cfadisk驱动就行了。(警告:只有安装了这个驱动的系统才能识别到U盘的ReFS分区,其他电脑是无法识别的,别指望U盘能更安全,而且这个驱动要开“禁用驱动程序强制签名”(新的系统就算开这个也不能使用无签名驱动,只能用自签名驱动))。
修正:我发现了一个错误,上面我说的休眠电脑是在测试UPS,软件设置了系统关闭2分钟后关闭UPS,也许PrimoCache并未完全写入缓写数据就被UPS直接断电,这是设置上的一个问题,不过也说明PrimoCache缓写未写入+ReFS会出现问题,但为啥Windows的缓写就没出过问题呢?也许在ReFS缓写的机制要修改一下。
目的:主要是因为ReFS原本要的就是数据安全,而PrimoCache的到来却让其经常出现“卷修复不成功”,而且这个错误会不断覆写数据导致无法恢复,这显然不太好。而老旧的NTFS竟然在这种情况下不会损坏!这非常的不合理!我想知道为什么会出现这种情况,到底是PrimoCache的Bug还是ReFS设计与PrimoCache不兼容导致的呢?