[lvm-devel] master - print warning about in-use orphans

David Teigland teigland at sourceware.org
Thu Jun 1 16:20:00 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=c98a25aab1659a5640ac473517bb6af97d696588
Commit:        c98a25aab1659a5640ac473517bb6af97d696588
Parent:        f3c90e90f8466b5c2fe336e9a1947307c92c9e59
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Thu Jun 1 11:10:09 2017 -0500
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Thu Jun 1 11:18:42 2017 -0500

print warning about in-use orphans

Warn about a PV that has the in-use flag set, but appears in
the orphan VG (no VG was found referencing it.)

There are a number of conditions that could lead to this:

. The PV was created with no mdas and is used in a VG with
  other PVs (with metadata) that have not yet appeared on
  the system.  So, no VG metadata is found by lvm which
  references the in-use PV with no mdas.

. vgremove could have failed after clearing mdas but
  before clearing the in-use flag.  In this case, the
  in-use flag needs to be manually cleared on the PV.

. The PV may have damanged/unrecognized VG metadata
  that lvm could not read.

. The PV may have no mdas, and the PVs with the metadata
  may have damaged/unrecognized metadata.
---
 WHATS_NEW               |    1 +
 lib/metadata/metadata.c |   36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 10d845f..ae704af 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.172 - 
 ===============================
+  Print a warning about in-use PVs with no VG using them.
   Disable automatic clearing of PVs that look like in-use orphans.
   Cache format2 flag is now using segment name type field.
   Support storing status flags via segtype name field.
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index cb02ecf..4ba81c7 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -3802,6 +3802,8 @@ static int _vg_read_orphan_pv(struct lvmcache_info *info, void *baton)
 	struct _vg_read_orphan_baton *b = baton;
 	struct physical_volume *pv = NULL;
 	struct pv_list *pvl;
+	uint32_t ext_version;
+	uint32_t ext_flags;
 
 	if (!(pv = _pv_read(b->vg->cmd, b->vg->vgmem, dev_name(lvmcache_device(info)),
 			    b->vg->fid, b->warn_flags, 0))) {
@@ -3837,6 +3839,40 @@ static int _vg_read_orphan_pv(struct lvmcache_info *info, void *baton)
 	}
 	*/
 
+	/*
+	 * Nothing to do if PV header extension < 2:
+	 *  - version 0 is PV header without any extensions,
+	 *  - version 1 has bootloader area support only and
+	 *    we're not checking anything for that one here.
+	 */
+	ext_version = lvmcache_ext_version(info);
+	ext_flags = lvmcache_ext_flags(info);
+
+	/*
+	 * Warn about a PV that has the in-use flag set, but appears in
+	 * the orphan VG (no VG was found referencing it.)
+	 * There are a number of conditions that could lead to this:
+	 *
+	 * . The PV was created with no mdas and is used in a VG with
+	 * other PVs (with metadata) that have not yet appeared on
+	 * the system.  So, no VG metadata is found by lvm which
+	 * references the in-use PV with no mdas.
+	 *
+	 * . vgremove could have failed after clearing mdas but
+	 * before clearing the in-use flag.  In this case, the
+	 * in-use flag needs to be manually cleared on the PV.
+	 *
+	 * . The PV may have damanged/unrecognized VG metadata
+	 * that lvm could not read.
+	 *
+	 * . The PV may have no mdas, and the PVs with the metadata
+	 * may have damaged/unrecognized metadata.
+	 */
+	if ((ext_version >= 2) && (ext_flags & PV_EXT_USED)) {
+		log_warn("WARNING: PV %s is marked in use but no VG was found using it.", pv_dev_name(pv));
+		log_warn("WARNING: PV %s might need repairing.", pv_dev_name(pv));
+	}
+
 	return 1;
 }
 




More information about the lvm-devel mailing list