Python2.7 管理LVM设备-1

   怎样利用python代码管理LVM(增删查改),利用底层lib库,而非命令行命令。关于python管理lvm的库比较少,不过还是找到一个第三方的库,作者应该还是在维护更新中,很欣慰。

1 安装liblvm2的开发库

apt-get install liblvm2-dev
2 下载python的lvm2py库

wget 'https://pypi.python.org/packages/source/l/lvm2py/lvm2py-1.0.tar.gz'
3 安装lvm2py库

tar zxvf lvm2py-1.0.tar.gz
cd lvm2py-1.0
python setup.py install
4 测试

root@client:~# python
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lvm2py
>>> dir(lvm2py)
['LVM', 'LogicalVolume', 'PhysicalVolume', 'VolumeGroup', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'conversion', 'exception', 'lv', 'lvm', 'pv', 'util', 'vg']
>>>

下面开始熟悉lvm2py的一些类:

1 class lvm.LVM

  lvm类为全局的lvm管理提供api接口,该类提供一个全局的lvm句柄,用来访问具体对象。volume groups, logical and physical volumes。

  close():关闭lvm句柄,一般很少使用该方法,一般情况下你不会使用到该方法。

 create_vg(name, devices):返回一个新的VG实例。name(str): VG名称,devices (list): 设备列表。

  get_vg(name, mode='r'):返回VG实例,name应该是已经存在的VG名称,一般默认是以只读模式(r)打开的。也可以以写模式(w)打开。

  handle:Returns the lvm handle provided by the api represented by a ctypes opaque structure

  lvm_version:返回lvm lib版本。

  open():获得一个lvm句柄,一般情况下不会使用该方法。

  remove_vg(vg):删除一个vg,注意,删除一个vg时,打开模式必须处于写模式。vg(obj): A VG instance

  system_dir:返回lvm的系统目录,如果没有使用set_system_dir设置则返回None。

  vgscan():检查系统的VG,然后返回一个VG列表。


2 class vg.VolumeGroup(handle, name, mode='r')

  VG类为全局的vg_t类型的句柄提供lvm api接口,该类提供一个全局的vg_t类型的句柄用来操作VG。你需要提供一个lvm实例到该类中。

  add_pv(device):初始化一个设备为PV,把该设备加入VG中。

  close():关闭lvm和vg_t类型的句柄,一般你不会使用到该方法。

  create_lv(name, length, units):创建一个LV,并返回和该LV实例关联的lv_t句柄。name(str): 创建的LV的名称。length(int): LV的大小。units(str): 描述大小的单位('MiB','GiB'...)

  extent_count:返回VG的计数。

  extent_size(units='MiB'):采用已给出的单位描述VG的大小。

  free_extent_count:返回VG空闲的计数。

 free_size(units='MiB'):以给出的单位描述空闲的VG大小。

  get_lv(name):返回LV实例当给出的LV名称存在时,name(str): An existing logical volume name。

  get_pv(device):返回与该设备有关系的PV,device(str): An existing device。

  handle:返回vg_t类型的句柄。

  is_clustered:Returns True if the VG is clustered, False otherwise。

  is_exported:Returns True if the VG is exported, False otherwise。

  is_partial:Returns True if the VG is partial, False otherwise。

  lvm:返回lvm实例。

  lvscan():扫描VG中的LV,返回一个LV实例的列表。

  max_lv_count:返回LV允许创建的最大计数。

  max_pv_count:返回PV允许创建的最大计数。

  mode:返回实例以那种模式打开。

  name:返回VG的名称。

  open():获得lvm和vg_t类型的句柄,通常你不会用到该方法。

  pv_count:返回pv的计数。

 pvscan():搜索VG获得PV,返回一个PV实例列表。

  remove_all_lvs():删除VG中的所有LV。

  remove_lv(lv):在VG中删除某一个LV,lv(obj): A LogicalVolume instance。

  remove_pv(pv):在VG中删除一个PV,pv(obj): A PhysicalVolume instance。

  sequence:返回一个VG的序列号。

  set_extent_size(length, units):设置VG的大小以给定的单位,length(int): The desired length size。units(str): The desired units ('MiB').

  set_mode(mode):设置VG的模式是读还是写。

  size(units='MiB'):以给定的单位返回VG的大小。

  uuid:返回VG的uuid。


3 class pv.PhysicalVolume(vg, pvh=None, name=None)

  该类提供一个全局的pv_t类型的句柄。

  close():关闭lvm、vg_t、pv_t类型的句柄。

  dev_size(units='MiB'):以给定的单位返回device的大小。

  free(units='MiB'):以给定的单位返回空闲的设备大小。

  handle:返回pv_t类型的句柄。

  mda_count:Returns the physical volume mda count。

  open():获得lvm、vg_t、pv_t类型的句柄,一般很少用到。

  size(units='MiB'):以给定的单位返回PV的大小。

  uuid:返回pv的uuid。

  vg:Returns the VG instance holding the lvm and vg_t handle。


4 class lv.LogicalVolume(vg, lvh=None, name=None)

  activate():激活lv。

  close():关闭lvm、vg_t、lv_t。

  deactivate():使lv无效。

  handle:返回lv_t类型的句柄。

  is_active:如果lv是激活状态的返回True。

  is_suspended:如果lv是挂起状态返回True。

  name:返回lv的名称。

  open():获得lvm、vg_t、lv_t句柄。

  size(units='MiB'):以给定的单位返回lv的大小。

  uuid:返回lv的uuid。

  vg:Returns the VG instance holding the lvm and vg_t handle。


DOC http://xzased.github.io/lvm2py/
官网 https://pypi.python.org/pypi/lvm2py
git项目 https://github.com/xzased/lvm2py

你可能感兴趣的:(python,lvm)