第 5 章 Librbd (Python)
rbd
python 模块提供对 RBD 镜像的类文件访问。要使用此内置工具,必须导入 rbd
和 rados
模块。
创建并写入镜像
连接到 RADOS 并打开 IO 上下文:
cluster = rados.Rados(conffile='my_ceph.conf') cluster.connect() ioctx = cluster.open_ioctx('mypool')
cluster = rados.Rados(conffile='my_ceph.conf') cluster.connect() ioctx = cluster.open_ioctx('mypool')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 实例化一个
:class:rbd.RBD
对象,用于创建镜像:rbd_inst = rbd.RBD() size = 4 * 1024**3 # 4 GiB rbd_inst.create(ioctx, 'myimage', size)
rbd_inst = rbd.RBD() size = 4 * 1024**3 # 4 GiB rbd_inst.create(ioctx, 'myimage', size)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在镜像上执行 I/O,请实例化一个
:class:rbd.Image
对象:image = rbd.Image(ioctx, 'myimage') data = 'foo' * 200 image.write(data, 0)
image = rbd.Image(ioctx, 'myimage') data = 'foo' * 200 image.write(data, 0)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将"foo"写入镜像的前 600 字节。请注意,数据不能是
:type:unicode
-librbd
不知道如何处理比:c:type:char
更宽的字符。关闭镜像、IO 上下文和与 RADOS 的连接:
image.close() ioctx.close() cluster.shutdown()
image.close() ioctx.close() cluster.shutdown()
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了安全起见,每个调用都必须位于单独的
:finally
中 :Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这可能会有问题,Rados、Ioctx 和 Image 类可以用作自动关闭或关闭的上下文管理器。使用它们作为上下文管理器时,上述示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow