分层存储
JuiceFS 从 v1.4 开始支持分层存储,可以把不同目录或文件映射到不同对象存储类型(Storage Class),例如把热数据保留在标准存储,把冷数据下沉到 IA / Glacier 类存储,降低成本。
核心概念
- tier:分层 ID,范围为
0~3。0为默认层。1~3为可配置层。
- storage-class:某个 tier 对应的对象存储类型(例如
STANDARD_IA、INTELLIGENT_TIERING、GLACIER_IR)。 - tag:某个 tier 对应的自定义对象标签,格式为
key=value。上传对象时会附加该标签,可配合云厂商的生命周期规则使用(详见自定义标签(tag))。 - 文件/目录的 tier 属性:存储在元数据中,决定后续写入或迁移时应使用的存储类型。
使用前提
- 已完成 JuiceFS 文件系统格式化与挂载。
- 底层对象存储支持目标存储类型,以及(如需)归档对象恢复能力。
- 先通过
juicefs config定义 tier 映射,再执行juicefs tier set。
1. 配置分层映射
先为 tier 1~3 配置存储类型:
juicefs config redis://localhost --tier 1 --storage-class STANDARD_IA -y
juicefs config redis://localhost --tier 2 --storage-class INTELLIGENT_TIERING -y
juicefs config redis://localhost --tier 3 --storage-class GLACIER_IR -y
查看当前映射:
juicefs tier list redis://localhost
2. 为文件或目录设置 tier
设置单个文件
juicefs tier set redis://localhost --tier 1 /path/to/file
设置目录(仅目录本身)
为目录本身设置存储层级的作用是当后续有新文件或子目录创建在该目录下时,会继承其父目录的 tier,从而自动使用对应的存储类型。
juicefs tier set redis://localhost --tier 2 /path/to/dir
不带 -r 时,仅修改目标目录自身,不会递归处理子目录和文件。
递归设置目录
juicefs tier set redis://localhost --tier 2 /path/to/dir -r
递归模式会处理目录树中的文件与子目录。
重置回默认层(tier 0)
juicefs tier set redis://localhost --tier 0 /path/to/file
juicefs tier set redis://localhost --tier 0 /path/to/dir -r
3. 变更 tier 映射后的重写(--force)
如果你把某个 tier 的 storage-class 从 A 改成了 B,已有文件的元数据 tier 仍然不变,但对象存储里现存对象通常还是 A。
此时可用 --force 触发重写 ,把对象改写到新的存储类型:
juicefs tier set redis://localhost --tier 2 /path/to/dir -r --force
4. 归档类对象恢复
对于 GLACIER / DEEP_ARCHIVE 等归档类型,可执行:
juicefs tier restore redis://localhost /path/to/dir -r
restore 只向对象存储发起恢复请求;是否可读取、何时可读取取决于对象存储服务端恢复进度。活动副本的默认存活期(以天为单位)为 3 天
5. 状态检查
可使用 juicefs info 查看文件 tier 信息:
juicefs info /mountpoint/path/to/file
重点关注:
tier: <id>-><storage-class>:元数据中的 tier 与映射。restore-status:会显示对象是否处于解冻状态以及副本的过期时间。- 当映射与对象实际存储类型不一致时,会显示
expected(...),actual(...),提示需要执行tier set --force重写。 - 对
tier=0,会显示对象实际存储类型(actual(...))。
6. 自定义标签(tag)
除了 storage-class,还可以为某个 tier 配置自定义对象标签(tag),格式为 key=value:
juicefs config redis://localhost --tier 1 --storage-class STANDARD --tag juicefs-tier=archive -y
也可以在格式化时为默认层(tier 0)设置标签:
juicefs format --storage-class STANDARD --tag juicefs-tier=archive redis://localhost myjfs
设置后,JuiceFS 在上传对象时会自动附加该标签。可通过 juicefs tier list 查看每个 tier 的 tag,或用 juicefs info 查看具体文件的标签。
典型用法:配合生命周期规则下沉到归档层
直接以归档类型(如 GLACIER、DEEP_ARCHIVE)上传对象时,部分云厂商会按归档存储的写入/请求计费,单次上传的 API 费用较高。当目标是把数据下沉到归档层时,更经济的做法是:
- 仍以标准(
STANDARD)等普通存储类型上传,同时为该 tier 设置一个自定义标签,例如--tag juicefs-tier=archive。 - 在对象存储桶上配置生命周期规则,按该标签筛选对象,将命中标签的对象自动转换为归档存储类型。
这样既避免了直接上传归档类型带来的高额 API 费用,又能借助云厂商的生命周期规则把数据平滑下沉到归档层。
标签格式必须为 key=value(仅允许一个 =,且 key 与 value 均不能为空),否则会被拒绝或忽略。生命周期规则的具体配置方式请参考对应云厂商的文档。
注意事项
tier set仅支持文件和目录路径。--tier仅允许0~3。- 在写回缓存(writeback)场景下,若文件数据尚未上传到对象存储,
tier set可能失败;待数据上传完成后再重试。 - 修改
--storage-class不会自动迁移历史对象,需要手动执行tier set ... --force。 --tag仅在上传新对象时生效,不会修改对象存储中已有对象的标签。


