Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过python获取ceph的磁盘使用率_Python_Ceph - Fatal编程技术网

如何通过python获取ceph的磁盘使用率

如何通过python获取ceph的磁盘使用率,python,ceph,Python,Ceph,我想获取ceph上的卷的磁盘使用情况 rbd -p volumes list volume-3968ca3d-d55f-47ac-9174-ff2614b0bde1 volume-493eee5c-3cdb-4c1c-b8d0-a24efba0c884 现在,我可以通过它的ID获取使用情况 rbd disk-usage volumes/volume-3968ca3d-d55f-47ac-9174-ff2614b0bde1 NAME

我想获取ceph上的卷的磁盘使用情况

rbd -p volumes list
volume-3968ca3d-d55f-47ac-9174-ff2614b0bde1
volume-493eee5c-3cdb-4c1c-b8d0-a24efba0c884
现在,我可以通过它的ID获取使用情况

rbd disk-usage volumes/volume-3968ca3d-d55f-47ac-9174-ff2614b0bde1
NAME                                               PROVISIONED USED
volume-3968ca3d-d55f-47ac-9174-ff2614b0bde1@yasin1       1024M 532M
一切正常。 我想通过API执行此命令。我读 数百次了,找不到任何解决方案来获得python的使用

我该怎么做才能让pyhton使用它?

所有内容都在和文档中

您的代码将类似于以下代码段。它将连接到集群。它将获取其IO上下文,创建一个RBD实例,该实例反过来可以检索image_名称,并且image_名称用于访问最终具有size()方法的image实例。这将为我们提供图像的最大大小。为了计算磁盘使用量,使用
diff_iterate
方法扫描整个图像,查找图像中存在/不存在的对象。对于每个对象,将调用计数器实例的cb_offset方法。如果对象存在,则计数将按对象的长度增加。对于没有快速差异贴图的图像,这需要一段时间。同样的技术也用于区分快照。在这种情况下,
diff_iterate
的第三个参数指向快照。在我们的例子中,我们喜欢区分时间的开始(一个空的图像),所以它没有

import rados
import rbd

class DiffCounter:
    def __init__(self):
        self.count = 0
    def cb_offset(self, offset, length, exists):
        if exists:
            self.count+=length

def disk_usage():
    cluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
    cluster.connect()
    try:
        ioctx = cluster.open_ioctx('rbd')
        try:
            rbd_inst = rbd.RBD()
            try:
                for image_name in rbd_inst.list(ioctx):
                    image = rbd.Image(ioctx, image_name)
                    max_size = image.size()
                    counter = DiffCounter()
                    image.diff_iterate(0,max_size,None,counter.cb_offset)
                    current_size = counter.count
                    print(image_name,max_size,current_size)
            finally:
                image.close()
        finally:
            ioctx.close()
    finally:
        cluster.shutdown()

if __name__ == '__main__':
    disk_usage()

我在中文博客中找到了解决方案。ceph文件不完整ceph文件完整且正确。毫无疑问。但它肯定缺少示例部分。