Skip to main content
QUICK REVIEW

[论文解读] Binary-Compatible Verification of Filesystems with ACL2

Mehta, Mihir Parang, Cook, William R.|arXiv (Cornell University)|Oct 5, 2018
Advanced Data Storage Technologies参考文献 15被引用 7
一句话总结

该论文提出了一种新型黑盒方法——有界黑盒崩溃测试(B3),通过在 fsync() 调用后对文件操作工作负载进行有界生成,以全面验证文件系统崩溃一致性。该方法通过 CRASHMONKEY 和 ACE 工具实现,成功识别出 26 个已知崩溃一致性错误中的 24 个,并在广泛使用的 Linux 文件系统中发现了 10 个新的严重错误,包括数据丢失和原子性违规,甚至在形式化验证的文件系统 FSCQ 中也发现了此类问题。

ABSTRACT

Filesystems are an essential component of most computer systems. Work on the verification of filesystem functionality has been focused on constructing new filesystems in a manner which simplifies the process of verifying them against specifications. This leaves open the question of whether filesystems already in use are correct at the binary level. This paper introduces LoFAT, a model of the FAT32 filesystem which efficiently implements a subset of the POSIX filesystem operations, and HiFAT, a more abstract model of FAT32 which is simpler to reason about. LoFAT is proved to be correct in terms of refinement of HiFAT, and made executable by enabling the state of the model to be written to and read from FAT32 disk images. EqFAT, an equivalence relation for disk images, considers whether two disk images contain the same directory tree modulo reordering of files and implementation-level details regarding cluster allocation. A suite of co-simulation tests uses EqFAT to compare the operation of existing FAT32 implementations to LoFAT and check the correctness of existing implementations of FAT32 such as the mtools suite of programs and the Linux FAT32 implementation. All models and proofs are formalized and mechanically verified in ACL2.

研究动机与目标

  • 为解决 ext4、xfs、btrfs 和 F2FS 等广泛使用的 Linux 文件系统中缺乏主动崩溃一致性测试的问题。
  • 识别过去五年中报告的崩溃一致性错误的系统性模式,以支持自动化、有界的测试。
  • 设计并实现一种可扩展的黑盒测试框架,无需修改源代码或进行形式化验证。
  • 在成熟、生产级文件系统(包括已验证文件系统)中发现此前未知的崩溃一致性错误。

提出的方法

  • B3 通过限制文件操作数量、仅使用 fsync()、fdatasync() 或 sync 作为持久化点,以及将初始状态限定为全新空文件系统,对可能的工作负载空间进行有界约束。
  • CRASHMONKEY 通过重放 I/O 操作并捕获崩溃状态,在每个持久化点后模拟断电崩溃,随后检查持久化数据在恢复后是否仍然存在且正确。
  • ACE 自动生成用户指定范围内所有有效的工作负载,包括带参数的文件操作、持久化点以及保持依赖关系的序列。
  • 该框架在 CRASHMONKEY 中使用细粒度检查,无需修改目标文件系统即可在恢复后验证文件和元数据的一致性。
  • 该方法应用于 ext4、xfs、btrfs、F2FS 和 FSCQ,工具已部署用于测试现有及新发现的错误。

实验结果

研究问题

  • RQ1过去五年中,广泛使用的 Linux 文件系统崩溃一致性错误的共同模式是什么?
  • RQ2是否可以使用有界、黑盒测试方法,在最小假设下系统性地发现崩溃一致性错误?
  • RQ3基于此方法的自动化工具能否在成熟文件系统中发现已知和此前未检测到的崩溃一致性错误?
  • RQ4该方法在形式化验证文件系统中检测错误的能力如何,是否可揭示验证栈中的潜在缺陷?

主要发现

  • CRASHMONKEY 和 ACE 在七个内核版本和三种文件系统(ext4、xfs、btrfs)中成功重现了 26 个已报告崩溃一致性错误中的 24 个。
  • 这些工具在广泛使用的 Linux 文件系统中发现了 10 个新的崩溃一致性错误,包括严重的错误如破坏的 rename 原子性以及 fsync() 后的数据丢失。
  • 在 btrfs 和 F2FS 中发现的 10 个新错误中有 7 个自 2014 年起就存在于内核中,表明长期存在的未被发现的缺陷。
  • 工具还在 FSCQ(一个形式化验证的文件系统)中发现了数据丢失错误,表明组件中的验证缺口可能破坏正确性。
  • 10 个新错误中有 5 个已被开发者修复,其余 7 个正处于积极修复开发中。
  • 研究发现,96% 的崩溃一致性错误(25/26)可通过在新建文件系统上执行三个或更少操作的工作负载触发,且崩溃发生在 fsync() 调用后立即发生。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。