获取cephfs目录的使用情况

| 分类 ceph  | 标签 ceph 

前言

有时候需要快速地了解cephfs下某个目录的使用情况,比如消耗了多少的磁盘空间,共有多少个子文件,因为目录下可能有子目录,子目录下可能又各自有子目录和文件,给统计带来了很大的不便。

对于使用的使用空间情况,可以通过du命令获取,但是该方法性能太差,对于目录结构非常深的情况,性能尤其的差。

方法

cephfs 提供了一个称为 virtual xattrs 功能获取目录的递归统计信息。

让我们一起体会下该功能的强大:

root@node-3:/var/share/ezfs/shareroot# ll
total 0
drwxrwxrwx 1 root root   1 Mar  9 21:18 ./
drwxr-xr-x 1 root root   4 Mar  9 16:29 ../
drwxrwxrwx 1 root root 126 Mar  9 21:58 nas/
root@node-3:/var/share/ezfs/shareroot/nas# ls
1    102  106  11   113  117  120  124  14  18  21  25  29  32  36  4   43  47  50  54  58  61  65  69  72  76  8   83  87  90  94  98
10   103  107  110  114  118  121  125  15  19  22  26  3   33  37  40  44  48  51  55  59  62  66  7   73  77  80  84  88  91  95  99
100  104  108  111  115  119  122  126  16  2   23  27  30  34  38  41  45  49  52  56  6   63  67  70  74  78  81  85  89  92  96
101  105  109  112  116  12   123  13   17  20  24  28  31  35  39  42  46  5   53  57  60  64  68  71  75  79  82  86  9   93  97

事实上,对于下面的126个子目录,每个目录下都有200个左右的子目录,然后下面存放有很多的文件。如果我要统计nas目录下共有多少个文件,那么du命令执行到我花儿都谢了也没返回结果。

root@node-3:/var/share/ezfs/shareroot# getfattr -d -m ceph.dir.* .
# file: .
ceph.dir.entries="1"
ceph.dir.files="0"
ceph.dir.rbytes="708822611968"
ceph.dir.rctime="1457535283.09430737000"
ceph.dir.rentries="3633611"
ceph.dir.rfiles="3608532"
ceph.dir.rsubdirs="25079"
ceph.dir.subdirs="1"

注意,我使用了getfattr命令,来获取文件系统给出的扩展属性。 很轻松的就可以得到nas目录的一些信息

*顶层目录nas下共有一个子目录

*递归来看,共有25079个子目录

*顶层目录nas下文件个数位0

*递归来看,该目录下文件的总数3608532

*递归来统计,该目录消耗的总空间为708822611968字节

其他

对代码感兴趣的同学,可以阅读内核的fs/ceph/xattr.c 除此以外,python-ceph这个deb提供了一些访问cephfs的函数接口。


上一篇     下一篇