1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

vgsplit: add support for option --poolmetadataspare

When splitting VG with thin/cache pool volume, handle pmspare during
such split and allocate new pmspare in new VG or extend existing pmspare
there and eventually drop  pmspare in original VG if is no longer needed
there.
This commit is contained in:
Zdenek Kabelac 2021-07-20 22:33:05 +02:00
parent 5042463c50
commit 2132fdc11f
5 changed files with 30 additions and 1 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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

View File

@ -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,

View File

@ -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;