递归计算大小、ctime 等。

sage

观察目录的大小

$ mkdir foo ; cd foo $ mkdir -p dir1/subdir $ mkdir -p dir2 $ echo 123456789 > dir1/file.10 $ echo 12345678901234 > dir1/file.15 $ echo 1234 > dir1/subdir/file.5 $ echo 12345678901234567890123456789 > dir2/file.30 $ find . -ls 1 drwxr-xr-x 1 sage sage 60 May 23 15:23 . 1 drwxr-xr-x 1 sage sage 30 May 23 15:23 ./dir1 1 -rw-r--r-- 1 sage sage 10 May 23 15:23 ./dir1/file.10 1 -rw-r--r-- 1 sage sage 15 May 23 15:23 ./dir1/file.15 1 drwxr-xr-x 1 sage sage 5 May 23 15:24 ./dir1/subdir 1 -rw-r--r-- 1 sage sage 5 May 23 15:24 ./dir1/subdir/file.5 1 drwxr-xr-x 1 sage sage 30 May 23 15:24 ./dir2 1 -rw-r--r-- 1 sage sage 30 May 23 15:24 ./dir2/file.30

客户端配置为在 stat() 目录时提供“嵌套”大小,即告知您目录内部和嵌套目录中所有文件大小的总和。这基本上是任意粒度目录级别的配额计算。

内部,MDS 实际上正在进行递归计算

  • 文件大小(字节)
  • ctime(考虑备份软件扫描文件系统以查找更改)
  • 文件数量
  • 目录数量

一些说明和注意事项(当然)

  • 递归统计信息在向上层级传播之前可能会有延迟,尤其是在层级跨越多个元数据服务器时。计划是确保至少每分钟或类似的时间将时间推送到上层。但是,通常情况下,只要没有冲突的锁,就会向上推送统计信息。
  • 目录当前不会为总大小贡献任何“字节”。它应该是一些估计值,即存储目录元数据所用的磁盘空间量。
  • 目录的 i_blocks 没有递归定义,因此‘du’仍然有效(尽管您可能不想使用它)。
  • 这是原始文件 i_size 的总和,而不是使用的块数。这意味着稀疏文件“看起来”比实际大小更大。
  • Ceph 内部区分指向同一文件的多个链接。仅对每个文件的第一个(“主”)链接进行递归计数。