怎样利用python代码管理LVM(增删查改),利用底层lib库,而非命令行命令。关于python管理lvm的库比较少,不过还是找到一个第三方的库,作者应该还是在维护更新中,很欣慰。
1 安装liblvm2的开发库
apt-get install liblvm2-dev2 下载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 install4 测试
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