Skip to main content

POSIX 兼容性

JuiceFS 主要通过 pjdfstest 与 Linux Test Project(LTP) 进行 POSIX 兼容性验证。本文对社区版文档内容做摘要说明。

pjdfstest​

pjdfstest 用于验证 POSIX 系统调用行为。JuiceFS 已通过最新 8,813 项测试。

注意:运行 pjdfstest 前需关闭回收站(trash)​

pjdfstest 会直接删除文件;若启用 JuiceFS 回收站,行为与测试预期不一致。请在测试前关闭回收站:

juicefs config <meta-url> --trash-days 0

POSIX 语义与支持能力​

除 pjdfstest 覆盖范围之外,JuiceFS 还提供以下与 POSIX 语义相关的能力:

  • Close-to-open 一致性:文件写入并关闭后,后续 open/read 可读到最新数据;同一挂载点内写入数据可立即读取。
  • 原子化元数据操作:rename 及其他元数据操作具备原子性(由元数据引擎事务保证)。
  • unlink 后仍可访问已打开文件:在同一挂载点内,文件被 unlink 后,已打开的文件句柄仍可继续访问。
  • 支持 mmap(通过 FSx 验证)。
  • 支持 fallocate 及打洞(punch hole)。
  • 支持扩展属性(xattr)。
  • 支持 BSD 锁(flock)。
  • 支持 POSIX 记录锁(fcntl):支持传统(与进程关联的)记录锁。

记录锁:传统锁与 OFD 锁​

POSIX 记录锁可分为 传统锁(traditional lock,F_SETLK)与 OFD 锁(open file description lock,F_OFD_SETLK)。受 Linux FUSE 内核模块实现限制,JuiceFS 目前仅支持 传统记录锁。详情可参考 fcntl(2)。

Linux Test Project (LTP)​

LTP 是用于验证 Linux 内核与系统调用可靠性/稳定性的测试套件。JuiceFS 能通过大多数与文件系统相关的用例。在历史测试中,少量跳过/失败用例的原因通常包括:

  • lseek 对 SEEK_DATA / SEEK_HOLE 的期望行为。
  • 个别用例对 open / openat 行为有特定要求。

各版本一致性说明​

上述 POSIX 兼容性在 社区版、云服务和企业版中保持一致。

延伸阅读​

更完整细节(含完整测试输出与附录)请参考社区版文档:https://juicefs.com/docs/community/posix_compatibility。