WHATS_NEW | 1 + lib/metadata/pool_manip.c | 11 +++++++++++ man/vgsplit.8_pregen | 9 +++++++++ tools/command-lines.in | 2 +- tools/vgsplit.c | 8 ++++++++ 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/WHATS_NEW b/WHATS_NEW index 097160e..0b8e3f2 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.03.13 - =============================== + Support --poolmetadataspare with vgsplit. Fix detection of active components of external origin volume. Add vdoimport tool to support conversion of VDO volumes. Support configurable allocation/vdo_pool_header_size. diff --git a/lib/metadata/pool_manip.c b/lib/metadata/pool_manip.c index 9ceec3a..e451e92 100644 --- a/lib/metadata/pool_manip.c +++ b/lib/metadata/pool_manip.c @@ -722,6 +722,17 @@ int handle_pool_metadata_spare(struct volume_group *vg, uint32_t extents, return 1; } + if (!extents) { + /* pmspare is not needed */ + if (lv) { + log_debug_metadata("Dropping unused pool metadata spare LV %s.", + display_lvname(lv)); + if (!lv_remove_single(vg->cmd, lv, DONT_PROMPT, 0)) + return_0; + } + return 1; + } + if (extents > MAX_SIZE) extents = MAX_SIZE; diff --git a/man/vgsplit.8_pregen b/man/vgsplit.8_pregen index 331c6e4..8a0ae59 100644 --- a/man/vgsplit.8_pregen +++ b/man/vgsplit.8_pregen @@ -70,6 +70,8 @@ Common options for command: .hy ] .br +[ \fB--poolmetadataspare\fP \fBy\fP|\fBn\fP ] +.br [ \fB--\fP[\fBvg\fP]\fBmetadatacopies\fP \fBall\fP|\fBunmanaged\fP|\fINumber\fP ] .ad b .RE @@ -235,6 +237,13 @@ Move only PVs used by the named LV. Disable locking. . .HP +\fB--poolmetadataspare\fP \fBy\fP|\fBn\fP +.br +Enable or disable the automatic creation and management of a +spare pool metadata LV in the VG. A spare metadata LV is reserved +space that can be used when repairing a pool. +. +.HP \fB--profile\fP \fIString\fP .br An alias for --commandprofile or --metadataprofile, depending diff --git a/tools/command-lines.in b/tools/command-lines.in index 8607305..a4785b3 100644 --- a/tools/command-lines.in +++ b/tools/command-lines.in @@ -1912,7 +1912,7 @@ ID: vgscan_general --- -OO_VGSPLIT: --autobackup Bool +OO_VGSPLIT: --autobackup Bool, --poolmetadataspare Bool # used only when the destination VG is new OO_VGSPLIT_NEW: --alloc Alloc, diff --git a/tools/vgsplit.c b/tools/vgsplit.c index 296248e..a085ac2 100644 --- a/tools/vgsplit.c +++ b/tools/vgsplit.c @@ -525,6 +525,7 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv) int existing_vg = 0; int r = ECMD_FAILED; const char *lv_name; + int poolmetadataspare = arg_int_value(cmd, poolmetadataspare_ARG, DEFAULT_POOL_METADATA_SPARE); if ((arg_is_set(cmd, name_ARG) + argc) < 3) { log_error("Existing VG, new VG and either physical volumes " @@ -699,6 +700,13 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv) */ vg_to->status |= EXPORTED_VG; + + if (!handle_pool_metadata_spare(vg_to, 0, &vg_to->pvs, poolmetadataspare)) + goto_bad; + + if (!handle_pool_metadata_spare(vg_from, 0, &vg_from->pvs, poolmetadataspare)) + goto_bad; + if (!archive(vg_to)) goto_bad;