Skip to content

No.8 了解 JuiceFS 回收站机制

JuiceFS 的回收站功能提供了一种完善的数据安全机制,当文件被删除时,它们会被移动到回收站目录并按时间分类存储,保留指定时间后才被永久删除。这为用户提供了可靠的文件恢复保障。

回收站工作原理

  1. 删除操作重定向 当用户删除文件时,JuiceFS 会将文件移动到隐藏的 .trash 目录,并按删除时间创建子目录(格式:YYYY-MM-DD-HH/[parent inode]-[file inode]-[file name])进行分类存储。

  2. 保留期限 文件在回收站中会保留指定的时间(默认为 1 天),超过保留期限后,系统会自动清理。保留时间可通过 --trash-days 参数配置。

  3. 存储空间管理 回收站文件会计入存储空间使用量,JuiceFS 会定期检查回收站空间占用情况,确保不会意外占用过多空间。

配置回收站

可以通过以下方式配置回收站:

创建文件系统时配置

bash
# 格式化时设置回收站保留时间(单位:天)
juicefs format --trash-days=2 \
    --storage=s3 \
    --bucket=https://mybucket.s3.amazonaws.com \
    redis://your-meta-url myjfs

已有文件系统修改配置

bash
# 设置回收站保留时间为 2 天
juicefs config --trash-days=2 redis://your-meta-url

# 查看当前回收站配置
juicefs config redis://your-meta-url | grep trash

# 禁用回收站功能
juicefs config redis://your-meta-url --trash-days=0

恢复误删文件

简单恢复

  1. 访问回收站目录:
bash
cd /mnt/juicefs/.trash
ls -l  # 查看按时间分类的删除文件
  1. 找到需要恢复的文件或目录,移动到正常位置:
bash
mv ./2024-06-17-12/[parent inode]-[file inode]-file.txt /mnt/juicefs/recovered/

复杂目录恢复

对于结构复杂的目录,可以使用 restore 命令:

bash
# 先重建目录结构
juicefs restore redis://your-meta-url 2024-06-17-12

# 预览恢复后的目录结构
tree .trash/2024-06-17-12

# 将文件恢复到原位置
juicefs restore redis://your-meta-url 2024-06-17-12 --put-back

注意事项

  • 回收站功能默认启用,保留时间为 1 天
  • 使用 --trash-days=0 可以完全禁用回收站功能
  • 回收站仅对普通删除操作有效,格式化操作会直接清除所有数据
  • 回收站中的文件会保留原始权限和属性信息
  • 多客户端场景下,回收站操作是原子性的,确保数据一致性
  • 回收站功能会轻微影响删除操作的性能
  • 只有 root 用户具有回收站目录的写权限
  • 回收站清理依赖后台任务,需要至少 1 个在线的挂载点
  • 文件碎片也会按回收站设置的时间保留,可通过 juicefs status 查看

视频地址