我终于找到并回答了我的问题 – 所以我在这里发布解决方案以防万一有人遇到同样的问题.
libvirt连接对象可以与存储池一起使用.
来自libvirt.org:“存储池是由管理员(通常是专用存储管理员)留出的一定数量的存储,供虚拟机使用.存储池由存储管理员或系统管理员分为存储卷,并将卷作为块设备分配给VM.“
基本上卷是quemu-img创建的.在所有.img(使用qemu-img创建)文件所在的同一目录中创建存储池后;使用qemu-img创建的文件被视为卷.
以下代码将列出所有现有卷,包括使用qemu-img创建的卷
conn = libvirt.open()
pools = conn.listAllStoragePools(0)
for pool in pools:
#check if pool is active
if pool.isActive() == 0:
#activate pool
pool.create()
stgvols = pool.listVolumes()
print('Storage pool: '+pool.name())
for stgvol in stgvols :
print(' Storage vol: '+stgvol)
创建存储池:
def createStoragePool(conn):
xmlDesc = """
guest_images_storage_pool
8c79f996-cb2a-d24d-9822-ac7547ab2d01
4306780815
237457858
4069322956
/path/to/guest_images
0755
-1
-1
"""
pool = conn.storagePoolDefineXML(xmlDesc, 0)
#set storage pool autostart
pool.setAutostart(1)
return pool
创建卷:
def createStoragePoolVolume(pool, name):
stpVolXml = """
"""+name+""".img
0
10
/path/to/guest_images/"""+name+""".img
107
107
0744
virt_image_t
"""
stpVol = pool.createXML(stpVolXml, 0)
return stpVol