juicedata/juicefs
运维与部署一个兼容 POSIX 的分布式文件系统,把数据存到对象存储、元数据存到 Redis 或 MySQL 等引擎。
项目介绍
JuiceFS 是一个以 Apache-2.0 协议开源的 POSIX 兼容分布式文件系统,面向云原生环境设计。它把存储拆成两部分:文件数据写入 S3、GCS、MinIO 或本地磁盘等对象存储,元数据(文件名、大小、权限、目录结构等)则存放在独立的元数据引擎中,可选 Redis、MySQL、TiKV、SQLite 等。客户端进程协调两者,对外呈现普通文件系统接口,应用无需改代码就能使用大规模云存储。
它主要面向数据密集型场景:大数据与 Hadoop 作业(提供 Hadoop Java SDK)、机器学习与 AI 训练流水线、通过 CSI 驱动挂载为 Kubernetes 持久卷,以及多客户端共享读写。项目还提供 S3 兼容网关。文件在写入对象存储前会被切分成 Chunk、Slice 和固定大小的 Block(默认 4 MiB),因此对象存储桶里看到的是 JuiceFS 的内部布局,而不是原始文件。
快速使用
开始前需要准备三样东西:一个受支持的元数据引擎、一个受支持的对象存储后端,以及在要挂载的机器上安装 JuiceFS 客户端。元数据引擎和对象存储的配置步骤见对应文档,客户端安装见安装文档(Windows 也有说明)。
README 本身没有给出完整的 juicefs format 和 juicefs mount 命令序列,请按快速上手指南操作,不要照搬不完整的命令片段。全部命令行选项见命令参考。
主要使用方式
- POSIX 挂载:主路径,把 JuiceFS 挂载为本地目录,供现有应用直接使用。
- 容器:可作为 Docker 和 Podman 的持久卷(说明)。
- Kubernetes:通过 CSI 驱动提供持久卷(说明)。
- Hadoop:提供兼容 Hadoop 2.x 和 3.x 的 Java SDK(说明)。
- S3 API:提供 S3 兼容网关,供只认 S3 协议的工具接入(说明)。
使用约束
- 项目称已通过 pjdfstest 全部 8813 项一致性测试,并额外提供 close-to-open 一致性、原子元数据操作、mmap、带 punch hole 的 fallocate、xattr,以及 flock 和 fcntl 两种文件锁。
- 支持传输中和静态数据加密,也支持 LZ4 和 Zstandard 压缩。
- 元数据引擎的选择很关键:性能和部署拓扑都取决于它;一旦元数据存储丢失,就无法访问数据,因为对象存储中只有不可直接识别的分块。社区讨论提到这一权衡,并指出大规模部署多倾向使用 TiKV 或 FoundationDB 这类分布式 KV 存储。
- 支持 Redis Cluster,但一个文件系统只能占用一个 hash slot,这会限制扩展规模。
- 项目默认收集匿名使用数据,可用
juicefs mount --no-usage-report关闭。 - 项目声明存储格式稳定,未来版本会继续支持。
HotRepo 点评
JuiceFS 有 14,680 个 Star,2026-11-05 登上 Go 语言日榜,当日新增 39 个 Star,最好名次为 14;这是唯一一条站内快照,不足以判断趋势。更有参考价值的是讨论记录:项目在 2021 年 1 月和 2026 年 1 月两次登上 Hacker News,分别获得 219 分和 186 分,相隔五年。2026 年的讨论中,有评论者称 Sprite 的存储栈基于大幅改造过的 JuiceFS,并重写了 SQLite 元数据后端;另一位则表示在 Krea 因训练性能不足、且元数据存储只能部署在单一位置而放弃使用。这些经历恰好说明该设计的核心权衡:决定性能与故障范围的是元数据层,而不是对象存储。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。