diff --git a/lib/vdsm/common/config.py.in b/lib/vdsm/common/config.py.in index 5b6ac7e05..c3fe58b5c 100644 --- a/lib/vdsm/common/config.py.in +++ b/lib/vdsm/common/config.py.in @@ -481,6 +481,11 @@ parameters = [ 'are either "filter" or "devices". Filter method will use LVM ' 'filter, while device will use LVM devices file. The default ' 'value is "devices".'), + + ('keep_active', '', + 'In some case, you might want to keep active some lvm. You can list' + 'them here separated with "comma".' + 'For instance "/dev/vg1/lv1,/dev/vg1/lv2..."'), ]), # Section: [sanlock] diff --git a/lib/vdsm/storage/lvm.py b/lib/vdsm/storage/lvm.py index 53e100022..dcc6f4c4a 100644 --- a/lib/vdsm/storage/lvm.py +++ b/lib/vdsm/storage/lvm.py @@ -240,6 +240,9 @@ def __getattr__(self, attrName): USE_DEVICES = config.get("lvm", "config_method").lower() == "devices" +KEEPACTIVE = [lvm for lvm in config.get("lvm", "keep_active").split(",") + if lvm is not None] + def _get_lvm_version(): packages = osinfo.package_versions() @@ -1162,8 +1165,10 @@ def deactivateUnusedLVs(vgname, skiplvs=()): # List prepared images LVs if any pattern = "{}/{}/*/*".format(sc.P_VDSM_STORAGE, vgname) prepared = frozenset(os.path.basename(n) for n in glob.iglob(pattern)) + keep_active_lvs = KEEPACTIVE for lv in _lvminfo.getAllLvs(vgname): + completelvname = "/dev/" + vgname + "/" + lv.name if lv.active: if lv.name in skiplvs: log.debug("Skipping active lv: vg=%s lv=%s", @@ -1174,6 +1179,9 @@ def deactivateUnusedLVs(vgname, skiplvs=()): elif lv.opened: log.debug("Skipping open lv: vg=%s lv=%s", vgname, lv.name) + elif completelvname in keep_active_lvs: + log.debug("Skipping KEEPACTIVE lv: vg=%s lv=%s", vgname, + lv.name) else: deactivate.append(lv.name)