常见问题

JuiceFS 模块的常见问题解答

端口冲突怎么办?

同一节点上的多个 JuiceFS 实例必须配置不同的 port 值。如果遇到端口冲突错误:

juice_instances have port conflicts: [9567, 9567]

请在配置中为每个实例分配唯一的端口:

juice_instances:
  fs1:
    path: /fs1
    meta: postgres://...
    port: 9567
  fs2:
    path: /fs2
    meta: postgres://...
    port: 9568    # 必须不同

如何添加新实例?

  1. 在配置中添加新的实例定义
  2. 执行剧本指定新实例名称
./juice.yml -l 10.10.10.10 -e fsname=newfs

如何移除实例?

  1. 在配置中将实例的 state 设置为 absent
  2. 执行 juice_clean 任务
./juice.yml -l 10.10.10.10 -e fsname=jfs -t juice_clean

文件系统数据存储在哪里?

取决于 data 参数配置:

  • PostgreSQL 大对象:数据存储在 PostgreSQL 数据库的 pg_largeobject 表中
  • MinIO/S3:数据存储在对象存储的指定 bucket 中

元数据始终存储在 meta 参数指定的 PostgreSQL 数据库中。


支持哪些存储后端?

JuiceFS 支持多种存储后端,在 Pigsty 中常用的有:

  • postgres:PostgreSQL 大对象存储
  • minio:MinIO 对象存储
  • s3:AWS S3 或兼容 S3 协议的存储

详细列表请参考 JuiceFS 官方文档


可以在多个节点挂载同一个文件系统吗?

可以。只需要在多个节点配置相同的 meta URL,JuiceFS 会自动处理并发访问。

首次格式化只需在一个节点执行,其他节点会自动跳过格式化步骤。


如何利用 PITR 恢复文件系统?

当使用 PostgreSQL 作为元数据和数据存储时:

  1. 停止所有 JuiceFS 服务
  2. 使用 pgBackRest 恢复 PostgreSQL 到目标时间点
  3. 重启 PostgreSQL 和 JuiceFS 服务

详细步骤请参考 管理预案:PITR 恢复文件系统


缓存目录可以自定义吗?

可以,通过 juice_cache 参数设置:

juice_cache: /data/juice    # 默认值
# 或
juice_cache: /ssd/juice     # 使用 SSD 存储缓存

挂载选项怎么配置?

通过实例的 mount 字段传递额外的 juicefs mount 参数:

juice_instances:
  jfs:
    path  : /fs
    meta  : postgres://...
    mount : --cache-size 102400 --prefetch 3

常用选项:

选项说明
--cache-size本地缓存大小(MB)
--prefetch预取块数
--buffer-size读写缓冲区大小(MB)
--max-uploads最大并发上传数
--open-cache打开文件缓存时间(秒)

为什么格式化时使用 –no-update?

剧本在执行 juicefs format 时使用 --no-update 参数,确保已存在的文件系统不会被意外修改。这使得剧本可以安全地在多个节点重复执行,而不影响已有的文件系统配置。


服务无法启动怎么办?

检查以下几点:

  1. PostgreSQL 连接:确保元数据库可访问

    psql "postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta" -c "SELECT 1"
    
  2. 服务状态:查看 systemd 日志

    systemctl status juicefs-jfs
    journalctl -u juicefs-jfs -f
    
  3. 挂载点:确保挂载点目录存在且未被占用

    ls -la /fs
    mountpoint /fs
    
  4. 端口:确保端口未被占用

    ss -tlnp | grep 9567
    

最后修改 2026-01-25: batch doc update (9667d27)