Libvirt源码分析Part1-存储池和卷的表象与细节之存储池

本文深入剖析Libvirt中存储池的核心数据结构,包括virStoragePoolObj和virStoragePoolDef,以及管理多个存储池的结构体virStoragePoolObjList。文章介绍了从virsh命令到libvirt内部的业务流程,如存储池的定义、创建、启动、删除等操作的详细步骤,重点关注DIR、FS、NetFS、ISCSI类型的存储池。
摘要由CSDN通过智能技术生成

  一般而言,程序之中最最重要的是数据结构,故而我们从查找核心数据结构开始,但最初的表象切入点是libvirt的交互工具virsh。

 


 


  1. 存储池的核心数据结构

           

          其中的virStoragePoolDefPtr类型是存储池属性数据结构

           

 

          找到以上两个核心数据结构,就基本上能够了解到如何描述每一个存储池,但是libvirt需要管理的是多个存储池

          这时需要用到结构指针: 理解起来也简单,类似于一个数组, *p[1] 可以找到第二个结构变量

<细节>指针可以用malloc在堆上给他分配几个sizeof()的大小,存放几个结构变量,需要改数量时calloc堆上内存块的大小,根据调整变量的位置,通过memmove移动其他结构变量的位置。

 

          实际使用中,又引入了这个结构体,便于获得到结构指针指向内存区域中结构变量的总个数

           

          libvirt.c中conn->storageDriver->pools 就是这个类型的

 

2. 核心业务流程

        表象 -> 细节

        virsh的命令行 -> tools/virsh.c代码 -> src/libvirt.c -> src/storage/storage_dirver.c -> src/storage/storage_backend_XX.c

 

3. 新建存储池类操作

        表象: 支持DIR,FS,NetFS,Logical,Disk,IScsi,Scsi,multipath  (我们实际上只关=心DIR,FS,NetFs,Iscsi)

        细节: DIR,FS,NetFS的卷的一些poolcreate,poolstart等需要实际跟操作系统打交道的功能是走的storage_backend_fs.c这个后端

                     同样的Logical,Disk,Iscsi,Scsi,mpath都有各自的后端

 

       <一> pool-define              virsh命令之一,用于按照提供的XML描述的内容,在存储池列表中新加入一个存储池,只加入不起用

                                                 XML描述格式,我们只关心DIR,Fs,NetFs,Iscsi几种

                                                 DIR:

                                                  

                                                 Fs:

                                                  

                                                 NetFs:

                                                

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值