Skip to main content

posix_compatibility

JuiceFS 主要通过 pjdfstestLinux 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 能通过大多数与文件系统相关的用例。在历史测试中,少量跳过/失败用例的原因通常包括:

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

各版本一致性说明

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

延伸阅读

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