回收站

注意

此特性需要使用 1.0.0 及以上版本的 JuiceFS

对存储系统来说,数据的安全性永远是其需要考虑的关键要素之一。因此,JuiceFS 设计并默认开启了回收站功能,会自动将用户删除的文件移动到隐藏的回收站目录内,保留一段时间后才将数据真正清理。

配置

用户在初始化(即执行 format 命令)文件系统时,可以通过 --trash-days 参数来设置文件在回收站内保留的时间。在此时间段内,应用删除的文件数据不会被真正清理,因此通过 df 命令看到的文件系统使用量并不会减少,对象存储中的对象也会依然存在。

  • 此参数默认值为 1,意味着回收站内文件会在一天后被自动清理。
  • 将此参数值设为 0 即可禁用回收站功能,系统会在短时间内清空回收站,并使得后续应用删除的文件能被立即清理。
  • 旧版本 JuiceFS 欲使用回收站,需要在升级所有挂载点后通过 config 命令手动将 --trash-days 改为需要的正整数值。

如果是已完成初始化的文件系统,可以继续通过 config 命令更新回收站保留时间,例如:

  1. $ juicefs config META-URL --trash-days 7

然后通过 status 命令验证配置更新成功:

  1. $ juicefs status META-URL
  2. {
  3. "Setting": {
  4. ...
  5. "TrashDays": 7
  6. }
  7. }

使用

回收站本身是一个名为 .trash 的目录,会被自动创建在根目录 / 下。

组织形式

回收站内固定只有两级深度。第一级为根据时间以 年-月-日-小时 格式命名的目录(如 2021-11-30-10),系统会自动创建它,并将在这个小时内删除的所有文件都放在此目录下。第二级即为平铺的用户文件和空目录(通常的 rm -r <dir> 命令实际会先逐个删除目标目录下文件,再删除空目录)。回收站内不再保留原来的目录树结构,为了能在不影响正常操作性能的前提下,尽可能提供恢复原树型结构的信息,回收站内的文件被自动重命名成 {父目录 inode}-{文件 inode}-{原始文件名} 格式。其中 inode 是文件系统内部的管理信息,如果用户并不需求文件原始路径,则直接关注最后的原始文件名即可。

注意

第一级目录的命名取自 UTC 时间,与中国北京时间相差 8 个小时。

提示

你可以通过 juicefs info 命令查看目录或文件的 inode

访问权限

所有用户均有权限浏览回收站,并且可以看到其他用户删除的文件列表。然而,由于回收站内的文件依然保留了其原来的权限属性,因此用户仅能读取其原本就有权限读取的文件。当文件系统使用子目录挂载模式(挂载时指定了 --subdir 选项,通常在 Kubernetes 上作为 CSI 驱动使用)时,回收站将会被彻底隐藏。

回收站内不允许用户自行创建新的文件,非 root 用户也无法删除或移动其中的文件,即使他/她是这个文件的所有者。

恢复/清理

文件的恢复通常建议由 root 用户来执行,其被允许直接使用类似 mv 的命令将文件移出回收站,而不需要任何的数据拷贝。对于普通用户而言,其仅能通过读取拥有访问权限的文件再写入到新文件的方式来达到类似恢复的效果。

回收站的清理由 JuiceFS 客户端自动执行,因此需要至少有 1 个在线的挂载点,默认清理周期是每小时清理 1 次。如果需要手动清理部分条目,同样需要由 root 用户来执行。