107 lines
3.1 KiB
Diff
107 lines
3.1 KiB
Diff
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;
|
|
|