docs/zh_cn/guide/tiered-storage.md
JuiceFS 从 v1.4 开始支持分层存储,可以把不同目录或文件映射到不同对象存储类型(Storage Class),例如把热数据保留在标准存储,把冷数据下沉到 IA / Glacier 类存储,降低成本。
0~3。
0 为默认层。1~3 为可配置层。STANDARD_IA、INTELLIGENT_TIERING、GLACIER_IR)。key=value。上传对象时会附加该标签,可配合云厂商的生命周期规则使用(详见自定义标签(tag))。juicefs config 定义 tier 映射,再执行 juicefs tier set。先为 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
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
递归模式会处理目录树中的文件与子目录。
juicefs tier set redis://localhost --tier 0 /path/to/file
juicefs tier set redis://localhost --tier 0 /path/to/dir -r
--force)如果你把某个 tier 的 storage-class 从 A 改成了 B,已有文件的元数据 tier 仍然不变,但对象存储里现存对象通常还是 A。
此时可用 --force 触发重写,把对象改写到新的存储类型:
juicefs tier set redis://localhost --tier 2 /path/to/dir -r --force
对于 GLACIER / DEEP_ARCHIVE 等归档类型,可执行:
juicefs tier restore redis://localhost /path/to/dir -r
restore 只向对象存储发起恢复请求;是否可读取、何时可读取取决于对象存储服务端恢复进度。活动副本的默认存活期(以天为单位)为 3 天
可使用 juicefs info 查看文件 tier 信息:
juicefs info /mountpoint/path/to/file
重点关注:
tier: <id>-><storage-class>:元数据中的 tier 与映射。restore-status:会显示对象是否处于解冻状态以及副本的过期时间。expected(...),actual(...),提示需要执行 tier set --force 重写。tier=0,会显示对象实际存储类型(actual(...))。除了 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 费用,又能借助云厂商的生命周期规则把数据平滑下沉到归档层。
:::note 注意
标签格式必须为 key=value(仅允许一个 =,且 key 与 value 均不能为空),否则会被拒绝或忽略。生命周期规则的具体配置方式请参考对应云厂商的文档。
:::
tier set 仅支持文件和目录路径。--tier 仅允许 0~3。tier set 可能失败;待数据上传完成后再重试。--storage-class 不会自动迁移历史对象,需要手动执行 tier set ... --force。--tag 仅在上传新对象时生效,不会修改对象存储中已有对象的标签。