diff --git a/blivet/devicelibs/lvm.py b/blivet/devicelibs/lvm.py index 57aa740d0..ec4ca1e5e 100644 --- a/blivet/devicelibs/lvm.py +++ b/blivet/devicelibs/lvm.py @@ -126,6 +126,7 @@ def determine_parent_lv(vg_name, internal_lv, lvs): :type lvs: :class:`~.devices.lvm.LMVLogicalVolumeDevice` """ + # try name matching first (fast, cheap, often works) for lv in lvs: if internal_lv.lvname == lv.lvname: # skip the internal_lv itself @@ -136,15 +137,34 @@ def determine_parent_lv(vg_name, internal_lv, lvs): if re.match(lv.lvname+internal_lv.name_suffix+"$", internal_lv.lvname): return lv + # now try checking relations between LVs + for lv in lvs: # cache pools are internal LVs of cached LVs try: pool_name = blockdev.lvm.cache_pool_name(vg_name, lv.lvname) + except blockdev.LVMError: + # cannot determine, just go on + pass + else: if pool_name == internal_lv.lvname: return lv + + # pools have internal data and metadata LVs + try: + data_lv_name = blockdev.lvm.data_lv_name(vg_name, lv.lvname) except blockdev.LVMError: - # doesn't have a pool + # cannot determine, just go on pass - - # TODO: use 'data_lv' and 'metadata_lv' on appropriate internal LVs + else: + if data_lv_name == internal_lv.lvname: + return lv + try: + metadata_lv_name = blockdev.lvm.metadata_lv_name(vg_name, lv.lvname) + except blockdev.LVMError: + # cannot determine, just go on + pass + else: + if metadata_lv_name == internal_lv.lvname: + return lv return None diff --git a/python-blivet.spec b/python-blivet.spec index f40bc2117..ec39a146c 100644 --- a/python-blivet.spec +++ b/python-blivet.spec @@ -18,7 +18,7 @@ Source0: http://github.com/dwlehman/blivet/archive/%{realname}-%{version}.tar.gz %define pypartedver 3.10.4 %define e2fsver 1.41.0 %define utillinuxver 2.15.1 -%define libblockdevver 1.0 +%define libblockdevver 1.1 BuildArch: noarch BuildRequires: gettext